개발을 하다 보면 "TCP가 더 안정적인 프로토콜", "UDP는 속도가 빠르다" 같은 문장을 자주 보게 된다. 하지만 막상 언제 TCP를 써야 하고, 언제 UDP를 써야 하는지 또는 왜 성능 차이가 발생하는지, 네트워크 수준에서 무엇이 다른지를 정확하게 설명하기 어려운 경우가 많다. 이번 글에서는 TCP와 UDP의 구조적 차이, 동작 방식, 장단점, 실제 서비스에서의 선택 기준을 정리해봤다.

TCP와 UDP는 ‘전송 계층’ 프로토콜
OSI 7계층에서 TCP와 UDP는 Layer 4(전송 계층)에 있다.
- IP는 목적지까지 데이터 패킷을 전달하는 역할(L3)
- TCP/UDP는 “그 데이터를 어떻게 전달할까?”를 결정하는 역할(L4)
즉, TCP/UDP는 데이터를 어떤 방식으로 보내고 받을지를 규정하는 규칙이다.
핵심 비교표
| 항목 | TCP | UDP |
| 연결 방식 | 연결형(Connection-Oriented) | 비연결형(Connectionless) |
| 신뢰성 | 높음(재전송, 순서보장) | 낮음(보장 없음) |
| 전송 순서 | 순서 보장 | 순서 보장 안 됨 |
| 흐름 제어 | 있음 | 없음 |
| 혼잡 제어 | 있음 | 없음 |
| 속도 | 느림(오버헤드 큼) | 빠름(가볍고 단순) |
| 헤더 크기 | 크다(20바이트+) | 작다(8바이트) |
| 사용 사례 | 웹, DB, 이메일, 파일 전송 | 게임, 스트리밍, 실시간 통신 |
TCP는 왜 “신뢰성이 높다”고 할까요?
TCP는 “신뢰성 있는 연결”을 위해 여러 기능을 제공한다.
1) 연결 설정 (3-Way Handshake)
데이터 전송 전에 반드시 SYN → SYN/ACK → ACK 절차를 거쳐 연결을 맺는다.
예시
클라이언트: 나 연결하고 싶어(SYN)
서버: 좋아 일단 응답할게(SYN/ACK)
클라이언트: 확인했어(ACK)
2) 재전송(retransmission)
패킷이 유실되면 자동으로 다시 보낸다.
3) 흐름 제어(flow control)
수신자가 처리 가능한 만큼만 데이터를 보내도록 조절한다.
4) 혼잡 제어(congestion control)
네트워크가 붐비면 전송 속도를 줄여 병목을 피한다.
5) 순서 복원
패킷이 섞여 도착하더라도 TCP는 내부 버퍼에 저장 후 원래 순서로 복원한다.
위 기능들이 합쳐져 TCP는
“정확한 데이터 전달”을 목표로 하는 전송 프로토콜이라 불린다.
UDP는 왜 빠를까요?
UDP는 다음과 같은 특징을 가진다.
- 연결 설정 없음 (3-Way Handshake 필요 없음)
- 흐름/혼잡 제어 없음
- 패킷 순서 보장 없음
- 재전송 없음
- 헤더 크기 작음 (8바이트)
즉, 최소한의 정보만 담고 바로 보내버리는 방식이다. 그래서 시스템이 느려지지 않고 대량의 패킷을 빠르게 처리할 수 있다.
비유하자면
- TCP = 등기우편
- 보내기 전에 확인
- 도착 여부 확인
- 순서대로 정돈
- 누락 시 다시 보내줌
- UDP = 엽서 뿌리기
- 그냥 던지고 끝
- 도착했는지 알 수 없음
- 순서 유지 X
UDP가 하이리스크-하이퍼포먼스인 이유가 여기 있다.
실무에서 자주 쓰이는 예시
TCP가 쓰이는 곳
- 웹 서버(HTTP/HTTPS)
- 데이터베이스(MySQL, PostgreSQL 등)
- SSH
- 파일 다운로드/업로드(FTP)
- 메신저 앱의 텍스트 메시지
- API 통신
TCP는 “정확도가 중요한 서비스”에서 거의 필수이다.
UDP가 쓰이는 곳
- 온라인 게임(특히 FPS, MOBA 등)
- 화상회의(WebRTC)
- VoIP(카카오톡 음성통화 등)
- 실시간 스트리밍(RTP 기반)
- DNS 요청(작고 빠른 요청/응답)
UDP는 “속도가 생명인 서비스”에서 선택된다. 게임에서 총을 쐈는데 0.2초 뒤에 맞았다면 벌써 죽어 있을 것이다. 그런 서비스는 약간의 패킷 손실보다 지연(latency) 이 훨씬 더 큰 문제다.
실무 기준으로 설명하는 “언제 TCP, 언제 UDP?”
TCP를 선택해야 하는 경우
- 데이터의 정확성이 매우 중요함
- 순서가 보장되어야 함
- 패킷 손실이 절대 허용되지 않음
- 재전송 정책이 필요함
- 트랜잭션성이 있는 업무
예)
- 금융/공공 API
- 회원가입/로그인
- 첨부파일 다운로드
- 운영 데이터 송수신
UDP를 선택해야 하는 경우
- 속도가 더 중요함
- 약간의 패킷 누락은 허용 가능
- 메시지가 짧고 가볍다
- 실시간성이 핵심이다
예)
- 온라인 게임 위치 정보
- 스트리밍 영상/음성 패킷
- 실시간 센서 데이터
- IoT 통신
개발자가 자주 겪는 오해
1) “UDP는 불안정해서 잘 안 쓴다?”
아닙니다. 게임, 통신, 방송 산업에서는 UDP가 주력이다.
2) “TCP는 무조건 느리다?”
TCP는 구조적으로 UDP보다 느릴 수밖에 없지만 오늘날 서버 성능이 높아 큰 문제가 되지 않는 경우도 많다.
3) “UDP는 보안에 취약하다?”
UDP 자체는 보안 기능이 없지만 실무에서는 DTLS처럼 UDP 위에 보안 계층을 올려 사용하기도 한다.
실제 서비스에서의 선택 사례 — “게임 서버 프로토콜”
게임 서버에서 이동 좌표를 보내는 패킷은 “빠르게 많이” 보내야 한다. 0.1초만 느려도 위치가 순간이동처럼 튀어 보인다. 그래서 대부분 UDP 기반으로 움직임 정보를 보낸다.
반면,
- 로그인
- 인벤토리 저장
- 결제
- 게임 종료 후 결과 저장
같은 민감 정보는 반드시 TCP로 처리한다. 결제 내역이 손실되면 큰 문제가 되기 때문이다.
즉,
하나의 시스템 안에서 TCP와 UDP를 혼합해서 사용할 수도 있다.
개발자가 기억할 핵심만 요약하기
TCP
- 정확성
- 순서 보장
- 재전송
- 흐름/혼잡 제어
- 신뢰성 중요할 때
UDP
- 단순함
- 빠름
- 추가 제어 없음
- 실시간성이 중요할 때
결국 “정확성 vs 속도” 중 무엇이 중요한지에 따라 선택이 달라진다.
마무리
TCP와 UDP는 단순한 기술 비교로 보이지만 실제로는 시스템 설계 및 서비스 특성에 따라 통신 방식을 결정해야 하는 중요한 요소다.
- 파일 전송, API, DB → TCP
- 게임 위치, 음성/영상 스트리밍 → UDP
이 흐름만 이해해도 TCP/UDP 선택 기준을 명확하게 설명할 수 있다. 앞으로 네트워크 기반 개발을 하거나 서버 구조를 설계할 때
이 글이 기본적인 판단 기준이 되길 바란다.
