네트워크 소켓

벽의 콘센트에 플러그를 꽂아 전기를 쓰듯, 프로그램이 인터넷이라는 벽에 꽂아 대화를 나누는 소프트웨어 플러그예요.

정의 네트워크 소켓은 컴퓨터에서 실행 중인 프로그램이 네트워크를 통해 다른 컴퓨터의 프로그램과 데이터를 주고받을 수 있도록 운영체제가 열어주는 가상의 연결 통로예요.

콘센트에 플러그를 꽂듯 연결해요

전자기기를 작동시킬 때 벽에 있는 콘센트에 전선 플러그를 꽂는 모습을 떠올려 보세요. 플러그가 맞물리는 순간 보이지 않는 전기가 흘러 들어와 기기를 움직이게 하죠. 컴퓨터 프로그램도 다른 컴퓨터와 데이터를 주고받으려면 이런 가상의 플러그와 콘센트가 필요해요.

우리가 웹 브라우저나 메신저를 실행할 때, 컴퓨터 안의 운영체제는 작은 소프트웨어 통로를 하나 만들어 줘요. 이것이 바로 소켓이에요. 프로그램은 복잡한 전선이나 전파 신호의 원리를 몰라도 이 소켓에 글자나 사진을 밀어 넣기만 하면 돼요.

그러면 운영체제와 네트워크 장비가 소켓 속 데이터를 포장해서 상대방 컴퓨터로 안전하게 실어 날라요. 프로그램 입장에서는 소켓이라는 창구에 메시지를 집어넣고 꺼내기만 하면 되는 아주 편리한 도구인 셈이에요.

스마트폰 앱과 서버 프로그램이 소켓과 네트워크를 통해 데이터를 주고받는 통신 구조도 내 스마트폰 앱 내 소켓 인터넷 망 데이터 패킷 이동 서버 소켓 서버 프로그램

IP 주소와 포트 번호가 만나는 지점

소켓이 어디로 연결되어야 할지 알려면 두 가지 정보가 반드시 합쳐져야 해요. 바로 대상을 찾아갈 건물 주소에 해당하는 'IP 주소'와, 그 건물 안에서 몇 호실인지를 나타내는 '포트 번호'예요.

아파트 단지에 비유하면 이해하기 쉬워요. IP 주소가 거대한 아파트 건물의 위치라면, 포트 번호는 택배를 받을 101호나 202호 같은 구체적인 방 번호예요. 소켓은 바로 그 특정 호실 앞의 전용 출입문 역할을 담당해요.

예를 들어 웹 서버는 보통 웹 통신 전용인 80번이나 443번 포트에 소켓을 열어두고 손님을 기다려요. 내 컴퓨터가 브라우저를 켜고 웹 서버의 소켓 문을 두드리면, 양쪽 사이에 일대일 통화 선로가 만들어지며 대화가 시작돼요.

조금 더 정확히 말하면: 연결형과 비연결형

소켓은 통신 목적에 따라 크게 두 가지 방식으로 동작해요. 상대방과 먼저 전화를 걸어 연결을 확인한 뒤 안전하게 대화하는 스트림 소켓(TCP 방식)과, 주소만 적은 편지를 우체통에 빠르게 던져 넣는 데이터그램 소켓(UDP 방식)이에요.

글자가 하나도 빠지면 안 되는 웹 서핑이나 파일 전송은 신뢰성이 높은 연결형 소켓을 사용해요. 반면에 약간의 데이터가 새더라도 1초의 지연 없이 화면을 보여줘야 하는 실시간 게임이나 화상 회의는 편지 던지기 방식을 주로 써요.

통신이 모두 끝나면 프로그램은 소켓을 닫아 정리해요. 컴퓨터는 통로를 열어두는 데 메모리를 쓰기 때문에, 대화가 끝나면 소켓을 닫아 다음에 열릴 새로운 연결을 위해 자원을 돌려놓아요.

🤔 흔한 오해

✕ 오해

네트워크 소켓은 컴퓨터 본체 뒤에 있는 랜선 꽂는 구멍(하드웨어)이다.

✓ 사실

하드웨어 단자가 아니라, 프로그램끼리 인터넷으로 데이터를 주고받을 수 있도록 운영체제가 소프트웨어적으로 만들어주는 '가상의 통로'예요.

🧺 일상에서 만나요

1 카카오톡을 켜두면 서버와 연결된 소켓이 항상 열려 있어 상대방의 메시지가 도착하는 즉시 화면에 떠요.
2 온라인 게임을 할 때 내 캐릭터의 이동 좌표가 소켓을 통해 게임 서버와 다른 유저들에게 1초에 수십 번씩 전달돼요.
💡 그러니까 한마디로

네트워크 소켓은 프로그램이 인터넷을 통해 다른 프로그램과 대화할 수 있도록 열어주는 소프트웨어 연결 통로예요.