본문 바로가기
IT 정보/용어

소켓 프로그래밍이란? 네트워크 통신 프로그래밍의 핵심 기본 기술

by 희품 2025. 4. 10.
반응형

컴퓨터 공학, 프로그래밍, 네트워크, 보안 등
프로그래밍과 관련된, IT 쪽 전문가가 되려는 사람이 커리큘럼을 찾아본다면,
이런 순서로 공부하고, 이다음에는 소켓 프로그래밍을 공부하세요.라는 말을 들어본 적이 있을 것이다.
소켓 프로그래밍(Socket Programming)은 뭘까? 
IT와 관련 없는 사람이 들으면,
나사를 렌치 같은 공구로 연결하는 소켓을 떠올리며, 연관을 지어보면서 의문점을 가지게 된다.

 

네트워크 통신의 기본

인터넷 기반 프로그램은 대부분 네트워크를 통해 데이터를 주고받는다. 매일 사용하는 웹 브라우저, 메신저, 온라인 게임, 스트리밍 서비스 등 모두 네트워크 통신을 기반으로 작동하는 것이다.

이때 통신에 사용하는 통신 기술 중 가장 기본적이면서도 핵심인 것이 소켓(Socket)이고, 이 소켓(Socket)을 이용한 프로그래밍이 소켓 프로그래밍(Socket Programming)이다.

 

소켓이란?

소켓(Socket)이라는 단어는, '구멍', '끼워 넣는 곳', '꽂는 자리' 등의 뜻을 가진 단어이다.

예를 들면, 전구를 꽂는 소켓, 이어폰 잭을 꽂는 포트, 볼트나 너트를 돌려 끼우는 것, 전기 콘센트도 소켓이라고 볼 수 있다.

어떤 장치를 연결하기 위한 인터페이스라는 본래 뜻을 가지고, 네트워크 통신에 적용한 것이 소켓 프로그래밍이다.

소켓(Socket)은 네트워크에서 양 끝단을 연결해 주는 통신의 인터페이스라는 의미를 가지고 있다. 컴퓨터끼리 데이터를 주고받기 위해 소켓을 열고, 서로 연결한 뒤 데이터를 송수신한다. 

 

 

소켓 프로그래밍(Socket Programming)

소켓 프로그래밍은 소켓을 이용해 두 컴퓨터 또는 프로세스 간에 데이터를 주고받는 프로그램을 개발하는 것을 의미한다. 일반적으로 클라이언트(Client)와 서버(Server) 구조로 이루어진다.

 

아래 순서는 소켓 프로그래밍의 기본적인 흐름이다.

  1. 서버는 특정 포트에 소켓을 열고 기다린다. (Listen)
  2. 클라이언트는 서버의 IP와 포트를 이용해 접속을 시도한다. (Connect)
  3. 서버와 클라이언트가 연결되면 양쪽에서 데이터를 주고받는다. (Send / Receive)
  4. 통신이 종료되면 소켓을 닫고, 연결을 끊는다. (Close)

 

네트워크 소켓의 종류

네트워크 소켓은 크게 2가지 종류로 나뉜다.

연결 상태를 지향하는 TCP 소켓과 비연결 상태를 지향하는 UDP 소켓이다.

TCP(Transmission Control Protocol) 소켓은 전송 제어 프로토콜을 이용한 소켓이다.

신뢰성 높은 데이터 전송을 보장할 때 사용한다. 연결을 설정하고 데이터를 주고받으며, 패킷의 순서를 보장하고, 데이터 손실 여부를 체크해서 전송 데이터가 손실되면 재전송한다.

브라우저에 개발된 코드 대로 정확히 표시해야 하는 웹 브라우징, 전송을 했으면 반드시 도착해야 하는 이메일 서비스, 전송한 파일이 깨지면 실행 자체가 안 될 수 있으니 파일 전송 등은 모두 TCP 소켓을 이용해 구현하게 된다.

UDP(User Datagram Protocol) 소켓은 데이타그램(datagram)이라는 기본 단위로 사용하는 사용자 데이터그램 프로토콜을 이용한 소켓이다. 

연결 없이 빠른 데이터 전송이 필요할 때 사용되며, 신뢰성은 낮지만 속도가 빠른 특징을 가지고 있다. 패킷 순서나 도달 여부를 보장하지 않는다.

실시간 스트리밍 영상을 볼 때 화면이 잠시 깨지는 현상도, 일부 패킷을 정상적으로 못 받았거나 받는 순서가 잘못돼서 발생하는 현상으로 볼 수 있다. 기술과 속도가 빨라진 요즘에는 문제를 발견하기 힘든데, 대규모 집회나 행사 같은 데서 대형 스크린으로 실시간 스트리밍 방송을 하는 경우 요즘에도 이러한 증상을 볼 수 있다.

실시간 대화가 기반돼야 하는 VoIP나 반응 속도가 중요한 온라인 게임 등에서도 TCP보다는 UDP를 사용하는 경우가 많았다. VoIP의 경우 어차피 지나간 음성은 필요가 없고, 잠깐 깨짐 현상이 발생하는 정도의 문제를 방지하는 것보다 실시간 속도가 빠른 것이 중요하기 때문이고, 온라인 게임은 픽셀이 잠깐 깨지는 것보다 더 빠른 반응속도가 중요하기 때문이다.

옛날 스타크래프트 1세대를 플레이해 봤던 사람들이라면, 베틀넷으로 플레이하는 것과 PC방에서 UDP로 플레이하던 반응속도를 생각해 보면 속도차이가 얼마나 나는지 떠올릴 수 있을 것이다.

 

 

소켓 프로그래밍은 언제 활용 될까?

2개 이상의 프로세스나 장비가 연결될 때, 서버 - 클라이언트와 같은 구조가 필요할 때 소켓 프로그래밍은 좋은 개발 방법이 될 수 있다.

서버를 두고, 클라이언트 여러 대가 접속해서 서로에게 통신할 수 있는 채팅 앱과, 온라인 게임의 실시간 통신, 원격 제어처럼 계속 연결유지가 되어야 할 때 소켓 프로그래밍으로 두 소켓을 연결해 사용할 수 있다.

채팅 앱, 온라인 게임, 원격제어, IoT 기기와 서버의 통신, 스트리밍 서비스, P2P 전송 등

실시간, 연결이라는 키워드를 살리면 소켓 프로그래밍이 필요한 상황을 쉽게 떠올릴 수 있다.


소켓 프로그래밍은 컴퓨터 네트워크에서 기본이면서 강력한 기술이다.

서버에서 뭘 열고, 기다리고, 뭘 바인드 한다 그러고, 클라이언트에서 접속하고, 서버가 connect였나, 클라이언트가 bind였나 기본적인 부분부터 배울 때는 조금 복잡하게 느껴질 수 있지만, 구조와 원리가 이해되고 나서부터는 핸드폰 충전기를 콘센트에 꼽는 것처럼 자연스럽게 이해하고 이용할 수 있게 될 것이다.

 

 

 

반응형