네트워크 프로그래밍을 하다 보면 필연적으로 마주하게 되는 선택이 있습니다. 바로 TCP와 UDP 중 어떤 프로토콜을 사용할 것인가 하는 문제입니다. 언뜻 보면 비슷해 보이는 두 프로토콜이지만, 실제로는 완전히 다른 철학과 특성을 가지고 있어요.

최근 HTTP/3가 UDP 기반의 QUIC 프로토콜을 채택하면서 UDP에 대한 관심이 더욱 높아지고 있습니다. 이번 글에서는 TCP와 UDP의 핵심 차이점부터 실제 개발 현장에서의 활용 사례까지, 개발자 관점에서 꼭 알아두어야 할 내용들을 정리해보겠습니다.

 

 

1. TCP 프로토콜의 특징과 동작원리 (Transmission Control Protocol)

TCP는 전송 제어 프로토콜(Transmission Control Protocol)로, OSI 7계층 중 전송 계층(Transport Layer)에서 동작하는 연결 지향적 프로토콜입니다.

TCP의 핵심 특징

연결 지향적 서비스 (Connection-Oriented Service) TCP는 데이터 전송 전에 반드시 3-Way Handshake 과정을 통해 연결을 설정합니다. 이는 마치 전화를 걸 때 “여보세요?”로 통화 상대를 확인하는 것과 같은 개념이에요.

  1. SYN (Synchronize): 클라이언트가 서버에 연결 요청
  2. SYN-ACK: 서버가 연결 요청을 수락하며 동시에 연결 요청
  3. ACK (Acknowledgment): 클라이언트가 최종 연결 확립

신뢰성 보장 (Reliability) TCP는 데이터가 정확히 전달되었는지 확인하는 여러 메커니즘을 제공합니다:

  • 순서 보장: 패킷에 순서 번호를 부여하여 올바른 순서로 재조립
  • 오류 검출: 체크섬(Checksum)을 통한 데이터 무결성 확인
  • 재전송: 손실된 패킷 자동 재전송
  • 중복 제거: 중복 패킷 감지 및 제거

흐름 제어 (Flow Control) 송신자와 수신자 간의 데이터 처리 속도 차이를 조절합니다. 수신자의 버퍼 크기에 맞춰 송신 속도를 조절하는 슬라이딩 윈도우(Sliding Window) 방식을 사용해요.

혼잡 제어 (Congestion Control) 네트워크 혼잡 상황을 감지하고 전송 속도를 동적으로 조절합니다:

  • 슬로우 스타트(Slow Start): 처음에는 작은 윈도우로 시작하여 점진적으로 증가
  • AIMD(Additive Increase/Multiplicative Decrease): 혼잡 발생 시 전송량을 절반으로 감소

TCP vs UDP 통신 과정 비교

 

 

2. UDP 프로토콜의 특징과 동작원리 (User Datagram Protocol)

UDP는 사용자 데이터그램 프로토콜(User Datagram Protocol)로, 비연결 지향적이며 단순한 구조를 가진 프로토콜입니다.

UDP의 핵심 특징

비연결 지향적 서비스 (Connectionless Service) UDP는 연결 설정 과정 없이 바로 데이터를 전송합니다. 이는 편지를 보내는 것과 비슷해요. 받는 사람이 집에 있는지 확인하지 않고 그냥 보내는 방식입니다.

최소한의 오버헤드

  • 헤더 크기: TCP 20바이트 vs UDP 8바이트
  • 처리 속도: 연결 관리나 오류 복구 과정이 없어 빠른 전송 가능
  • 리소스 사용량: 적은 메모리와 CPU 사용

단순한 데이터 전송 UDP는 “최선형 전달(Best Effort Delivery)” 서비스를 제공합니다:

  • 데이터 전송 시도는 하지만 도착 보장 안 함
  • 순서 보장 안 함
  • 오류 복구 기능 없음
  • 흐름 제어나 혼잡 제어 없음

멀티캐스트 지원 TCP는 1:1 통신만 가능하지만, UDP는 1:N 통신이 가능합니다. 브로드캐스트(Broadcast)와 멀티캐스트(Multicast) 통신을 지원해요.

 

 

3. TCP vs UDP 상세 비교표

구분 TCP UDP
연결 방식 연결 지향적 (Connection-Oriented) 비연결 지향적 (Connectionless)
신뢰성 높음 (데이터 전송 보장) 낮음 (Best Effort)
전송 속도 상대적으로 느림 빠름
헤더 크기 20바이트 (가변) 8바이트 (고정)
데이터 단위 세그먼트(Segment) 데이터그램(Datagram)
순서 보장 보장함 보장하지 않음
오류 복구 자동 재전송 없음
흐름 제어 지원 지원하지 않음
혼잡 제어 지원 지원하지 않음
브로드캐스트 지원하지 않음 지원
용도 파일 전송, 웹 브라우징, 이메일 실시간 스트리밍, 게임, DNS

TCP vs UDP 프로토콜 비교

 

 

4. 실제 사용 사례와 예시 – 어디서 어떻게 쓰일까?

TCP 사용 사례

웹 브라우징 (Web Browsing)

  • HTTP/HTTPS 프로토콜이 TCP 기반으로 동작
  • 웹페이지의 HTML, CSS, JavaScript 파일들이 정확히 전송되어야 함
  • 예시: 온라인 쇼핑몰에서 결제 정보 전송

파일 전송 (File Transfer)

  • FTP(File Transfer Protocol), SFTP 등
  • 대용량 파일도 손실 없이 완전히 전송되어야 함
  • 예시: 클라우드 스토리지 서비스 (Google Drive, Dropbox)

이메일 서비스

  • SMTP(Simple Mail Transfer Protocol), IMAP, POP3
  • 메일 내용이 손실되거나 변조되면 안 됨
  • 예시: Gmail, Outlook 등의 이메일 클라이언트

데이터베이스 접속

  • MySQL, PostgreSQL 등의 DB 연결
  • 트랜잭션의 정확성이 중요
  • 예시: 은행 시스템의 계좌 이체 작업

UDP 사용 사례

실시간 동영상 스트리밍

  • YouTube, Netflix, Twitch 등의 라이브 스트리밍
  • 일부 프레임 손실보다는 실시간성이 중요
  • 예시: 유튜브 라이브 방송, 줌(Zoom) 화상회의

온라인 게임

  • 실시간 멀티플레이어 게임에서 플레이어 위치, 액션 전송
  • 낮은 지연시간(Low Latency)이 핵심
  • 예시: 리그 오브 레전드, 오버워치, 배틀그라운드

DNS 조회 (Domain Name System)

  • 웹사이트 주소를 IP 주소로 변환하는 서비스
  • 빠른 응답이 중요하고, 실패 시 재시도하면 됨
  • 예시: google.com → 172.217.175.78

음성 통화 (VoIP)

  • 인터넷 전화, 음성 채팅
  • 약간의 음질 저하보다는 실시간 통화가 중요
  • 예시: 디스코드 음성 채팅, 카카오톡 보이스톡

IoT 센서 데이터

  • 온도, 습도 등 센서 데이터 전송
  • 주기적으로 전송되므로 일부 손실 허용 가능
  • 예시: 스마트홈 기기, 웨어러블 디바이스

TCP-UDP 사용 사례

 

 

5. 최신 기술 트렌드 – QUIC과 HTTP/3의 등장

최근 구글이 개발한 QUIC(Quick UDP Internet Connections) 프로토콜이 주목받고 있습니다. QUIC은 UDP를 기반으로 하면서도 TCP의 신뢰성을 제공하는 혁신적인 프로토콜이에요.

QUIC의 특징:

  • UDP 기반이지만 TCP의 신뢰성 제공
  • 더 빠른 연결 설정 (0-RTT 연결)
  • 멀티플렉싱으로 Head-of-Line Blocking 해결
  • HTTP/3의 기반 프로토콜로 채택

이는 기존의 “TCP는 신뢰성, UDP는 속도”라는 이분법적 사고를 넘어서는 새로운 접근 방식입니다.

 

 

6. 프로토콜 선택 – 언제 무엇을 써야 할까?

TCP를 선택해야 하는 경우

데이터 무결성이 절대적으로 중요한 경우

  • 금융 거래, 개인정보 처리, 파일 다운로드

모든 데이터가 순서대로 도착해야 하는 경우

  • 프로그램 설치 파일, 데이터베이스 백업

네트워크 상태가 불안정한 환경

  • 모바일 네트워크, 공용 WiFi

UDP를 선택해야 하는 경우

실시간성이 가장 중요한 경우

  • 게임, 실시간 스트리밍, 화상회의

일부 데이터 손실이 허용되는 경우

  • 센서 데이터, 로그 전송

간단하고 빠른 요청-응답이 필요한 경우

  • DNS 조회, 시간 동기화

브로드캐스트/멀티캐스트가 필요한 경우

  • 네트워크 탐색, 서비스 discovery

 

 

TCP와 UDP는 각각 다른 목적과 상황에 최적화된 프로토콜입니다. TCP는 신뢰성과 데이터 무결성이 중요한 상황에, UDP는 속도와 실시간성이 중요한 상황에 적합해요.

최근에는 QUIC 같은 새로운 프로토콜이 등장하면서 두 프로토콜의 장점을 결합하려는 시도들이 활발히 이루어지고 있습니다. 개발자로서는 각 프로토콜의 특성을 정확히 이해하고, 프로젝트의 요구사항에 맞는 최적의 선택을 할 수 있는 능력을 기르는 것이 중요하겠습니다. 🙂

 

댓글 남기기