Socket 쉬운 설명
개발자로 살다보면 소켓이란 단어를 많이 듣게 됩니다.
- 이번에 회사에서 소켓 방식으로 구현했어
- MySQL 접속 방식 보니까 localhost로 접속할 때는 소켓방식으로 하더라고
- TCP 소켓
- 소켓 프로그래밍
- …
너무 다양한 맥락에서 소켓이란 단어가 사용이 되기 때문에 도대체 소켓이 무엇인지 파악하기가 어렵습니다.
그래서 많은 사람이 쉽게 이해할 수 있도록 간단히 설명해 보려고 합니다.
우선 소켓은 개발자가 아닌 사람들도 자주 사용하는 단어입니다. 바로 집에 전등이나 뭔가 고장이 나서 고칠 때 입니다.
네이버 영어 사전에 따르면 소켓(Socket)은 콘센트, 꽂는 곳 이라는 정의를 가지고 있습니다.
좀 다르게 풀어보면 다른 어떤 시스템(콘센트의 경우 전력 시스템)에 접속하기 위한 창구로 이해할 수 있습니다.
개발자들이 이야기하는 소켓은 네트워크 소켓인데 위 정의를 벗어나지 않습니다.
위키백과에 따르면 네트워크 소켓은 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점이라고 이야기 합니다.
풀어서 이야기 하면 소켓은 컴퓨터가 네트워크 시스템에 접속하기 위한 창구로서 전화 시스템의 전화기 같은 역할을 한다고 이야기할 수 있습니다.
우리가 콘센트를 꼽아서 전력 시스템에 가전을 연결하는 것처럼, 전화기를 사용해 통신 시스템을 이용하는 것과 같은 것이 소켓이라고 이해하면 됩니다.
콘센트와 전화기에 여러 종류가 있는 것처럼 네트워크 소켓도 여러 종류가 있고 크게 TCP 소켓, UDP 소켓으로 나뉩니다.
이 외에도 다양한 종류의 소켓에 대해 듣게 될텐데 모두 다 네트워크 시스템에 연결하기 위한 어떤 것인데 종류가 다른 것이로구나로 이해하시면 됩니다. 추가로 콘센트도 종류가 다르면(110v, 220v) 서로 호환이 안되는 것처럼 네트워크 소켓도 종류가 다르면 제대로 통신이 되지 않는다는 것도 알고 있으면 좋습니다.
더 명확한 이해를 하기 위해 몇가지만 더 설명드리면 개발자들이 “이번에 소켓 방식으로 뭔가를 개발했어”라고 하는 것은 소켓 중에서도 웹소켓을 줄여서 이야기 하는 것입니다. 일반적으로 이 말은 HTTP가 아닌 방식으로 구현했어라는 것을 강조하기 위해 사용되는데 HTTP도 TCP 소켓 위에서 구현되기 때문에 이 역시 소켓 방식이며 엄밀히 이야기 하면 "소켓 방식으로 뭔가를 개발했어"는 너무 당연한 말 또 약간 애매한 말입니다.
또 MySQL 접속 방식 중에서 TCP와 소켓 방식을 나누어 설명하는 경우가 있는데 이 경우에 소켓은 Unix Domain Socket을 줄여 이야기 하는 것입니다. Unix Domain Socket은 동일한 컴퓨터에서 프로세스 간에 소통 시에 사용되는 소켓으로 TCP와 동일한 방식이지만 파일을 기반으로 이루어진다는 차이점을 가지고 있습니다. 이 역시 정확히하면 TCP 방식도 TCP 소켓을 사용하기 때문에 소켓 방식이며 단순히 소켓 방식이라고만 이야기 하면 애매하게 말한 것이 됩니다.
단지 소켓 방식이라고 이야기하는 것이 애매할 수는 있지만 명확한 문맥에서는 축약해 이야기하는 것이 효율적인 커뮤니케이션이 될 수 있기 때문에 그렇게 말해도 무방하다고 생각합니다. 정리하면 개발자들이 말하는 소켓은 축약어 일 때가 많으며 이를 잘 구별해서 듣자! 그리고 좀 애매하다 싶으면 “무슨 소켓을 이야기하는 것일까요?”라고 물어보자 입니다:)