UDP란 무엇인가: 비연결 프로토콜 및 작동 방식

저자: IT Sectr 게시일: 2026-03-06 읽는 시간: 8 분

UDP(User Datagram Protocol)는 IP 위에서 작동하며 데이터그램 전송 시 최소 지연 시간을 제공하는 비연결 데이터 전송 프로토콜입니다. TCP와 달리 UDP는 전달, 패킷 순서 또는 중복 방지를 보장하지 않습니다. IETF RFC 768(2024)에 따르면, UDP는 화상 통화, 스트리밍 및 DNS 쿼리로 인해 전 세계 인터넷 트래픽의 40% 이상을 처리합니다.

핵심 요점

  • UDP는 전달 확인 없이 데이터그램을 보내는 비연결 프로토콜
  • 최소 지연 시간은 핸드셰이크, 혼잡 제어 및 재전송이 없어 달성
  • 사용 화상 통화, 온라인 게임, DNS, DHCP, 스트리밍
  • UDP 데이터그램 헤더는 TCP의 20~60바이트에 비해 단 8바이트
  • 패킷 손실은 FEC, 재전송 또는 데이터 중복성을 통해 애플리케이션 계층에서 보상

UDP란?

UDP(User Datagram Protocol)는 TCP/IP 모델의 전송 계층 주요 프로토콜 중 하나로, 1980년 David Reed가 설계했습니다. 최소한의 데이터 전송 메커니즘을 제공합니다. 애플리케이션이 데이터그램을 보내면 프로토콜은 수신자에게 도착했는지 추적하지 않습니다.

UDP 헤더는 소스 포트, 대상 포트, 길이, 체크섬의 4개 필드로만 구성됩니다. 각 필드는 2바이트를 차지하므로 전체 헤더 크기는 8바이트입니다. 비교하자면, 옵션이 없는 TCP 헤더는 20바이트, 옵션이 있으면 최대 60바이트입니다.

프로토콜은 자체 수준에서 조각화를 지원하지 않습니다. 데이터그램이 MTU(Maximum Transmission Unit)를 초과하면 IP 수준에서 조각화됩니다. 하나의 조각이 손실되면 전체 데이터그램이 폐기됩니다. UDP는 개별 조각의 재전송을 요청할 수 없기 때문입니다. 개발자는 데이터그램 크기를 제어해야 합니다. 모바일 네트워크의 경우 MTU가 종종 1400바이트이므로 최대 크기가 이 값을 초과하지 않아야 합니다.

UDP 작동 방식

UDP를 사용하는 애플리케이션은 SOCK_DGRAM 유형의 소켓을 만들고 포트와 대상 IP 주소를 지정하여 데이터그램을 보냅니다. 프로토콜은 최소 헤더를 추가하고 패킷을 IP 계층으로 전달합니다. 수신자는 자신의 포트에서 수신 대기하고 들어오는 데이터그램에서 데이터를 추출합니다.

UDP는 혼잡 제어를 수행하지 않습니다. 애플리케이션은 네트워크가 지원하는 최대 속도로 데이터그램을 보낼 수 있습니다. 이로 인해 채널 혼잡이 발생할 수 있지만, 실시간 시나리오에서는 이러한 공격성이 정당화됩니다. 화상 통화의 경우 손실 가능성이 있는 데이터 스트림이 전송 중단보다 더 중요합니다.

python
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b'Hello, UDP!', ('192.168.1.100', 8888))
sock.close()

이 예제에서는 UDP용 SOCK_DGRAM 소켓이 생성됩니다. sendto 메서드는 연결을 설정하지 않고 데이터그램을 보냅니다. 수신자의 IP와 포트만 알면 됩니다. 서버 측의 recvfrom 메서드는 응답을 위해 데이터와 발신자 주소를 모두 반환합니다. 모바일 플랫폼의 UDP 소켓도 유사하게 구성되지만 추가 권한이 필요합니다. iOS에서는 암호화되지 않은 UDP 연결을 위해 NSAppTransportSecurity를 추가해야 하며, Android에서는 매니페스트에 INTERNET 권한이 필요합니다.

UDP의 장단점

UDP를 선택하는 것은 속도가 신뢰성보다 더 중요한 시나리오에서 정당화됩니다. 프로토콜은 연결 설정, 확인 및 재전송에 시간을 낭비하지 않습니다. 이는 최소 지연 시간을 제공하지만 개발자가 손실을 독립적으로 처리해야 합니다.

장점단점
낮은 지연 시간 — 핸드셰이크 없음전달 보장 없음
작은 헤더 — 8바이트혼잡 제어 없음
브로드캐스트 및 멀티캐스트 지원패킷 중복 가능
데이터그램 독립성 — 대기열 없음데이터그램 크기가 MTU로 제한

모바일 애플리케이션에서 UDP는 WebRTC와 같은 프레임워크를 통해 사용되며, UDP 위에 손실 제어, 적응형 비트레이트 및 지터 버퍼를 추가합니다. 이는 순수 프로토콜의 단점 없이 속도 이점을 제공합니다.

UDP의 또 다른 중요한 측면은 혼잡 제어가 없다는 것입니다. TCP에서는 Slow Start 및 Congestion Avoidance 알고리즘이 패킷 손실 시 전송 속도를 줄여 네트워크 과부하를 방지합니다. UDP에는 이러한 메커니즘이 없으므로 개발자는 자체 속도 제어 전략을 구현해야 합니다. 예를 들어 화상 통화의 적응형 비트레이트나 게임 서버의 과도한 네트워크 혼잡을 방지하기 위한 속도 제한이 있습니다.

UDP 사용처

UDP는 지연 시간 허용 오차가 패킷 손실 허용 오차보다 더 중요한 시나리오에서 필수적입니다. 모바일 및 웹 개발에서 프로토콜의 주요 적용 분야를 살펴보겠습니다.

오디오 및 비디오 스트리밍

UDP 위에서 실행되는 RTP 및 RTSP 프로토콜은 실시간 오디오 및 비디오 스트림 전송에 사용됩니다. WebRTC — 브라우저 및 모바일 애플리케이션의 화상 통화 표준 — 미디어 데이터의 기본 전송으로 UDP를 사용하고 시그널링에 TCP를 사용합니다. 30fps 비디오에서 하나의 패킷 손실은 사용자가 인식할 수 없지만, 재전송 지연은 눈에 띄는 화면 멈춤을 유발합니다.

온라인 게임

멀티플레이어 슈팅 게임과 MOBA는 적절한 동기화를 위해 50ms 미만의 지연 시간이 필요합니다. UDP는 플레이어 위치, 사격 및 이벤트를 TCP보다 빠르게 전송하며 패킷 손실은 무시됩니다. 다음 업데이트는 16~33ms 내에 도착합니다. Unity 및 Unreal Engine을 포함한 인기 게임 엔진은 애플리케이션 수준 확인을 통해 중요한 이벤트에 대한 추가 신뢰성을 갖춘 자체 전송 계층을 통해 UDP를 사용합니다.

DNS 및 DHCP

DNS 쿼리는 포트 53에서 UDP를 사용합니다. 각 쿼리는 하나의 작은 데이터그램(일반적으로 최대 512바이트)이기 때문입니다. 응답이 없으면 클라이언트는 타임아웃 후 쿼리를 재시도합니다. 이는 3방향 핸드셰이크가 있는 TCP 연결 설정보다 빠릅니다. DHCP도 UDP 위에서 작동합니다. 클라이언트에 아직 IP 주소가 없어 TCP 연결을 설정할 수 없지만 브로드캐스트 UDP 패킷을 통해 로컬 네트워크에서 DHCP 서버를 찾을 수 있기 때문입니다.

UDP와 TCP 비교

UDP와 TCP의 선택은 속도와 신뢰성 간의 균형입니다. 각 프로토콜은 작업 클래스에 최적화되어 있으며, 그 차이를 이해하면 모바일 애플리케이션의 네트워크 통신 설계 시 올바른 아키텍처 결정을 내리는 데 도움이 됩니다.

기준UDPTCP
연결 설정필요 없음3방향 핸드셰이크
헤더8바이트20~60바이트
전달 보장없음있음(확인 포함)
순서 지정없음있음
혼잡 제어없음있음(AIMD, Slow Start)
사용 사례스트리밍, 게임, DNS웹, 이메일, 파일, API

모바일 프로젝트는 종종 하이브리드 접근 방식을 사용합니다. 신뢰할 수 있는 요청(인증, 데이터 로딩)에는 TCP를, 미디어 스트림에는 UDP를 사용합니다. QUIC — UDP 위에서 실행되는 Google의 최신 프로토콜 — UDP의 속도와 TCP의 신뢰성을 결합하며 이미 HTTP/3에서 사용되고 있습니다.

UDP 코드 예제

클라이언트로부터 메시지를 받고 응답을 보내는 Python의 간단한 UDP 서버를 살펴보겠습니다. 서버는 포트 8888에서 수신 대기하고 무한 루프에서 들어오는 데이터그램을 처리합니다.

python
import socket

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('0.0.0.0', 8888))
print('UDP 서버가 포트 8888에서 시작됨')

while True:
    data, addr = server.recvfrom(1024)
    print(f'{addr}로부터 수신: {data.decode()}')
    server.sendto(b'OK', addr)

서버는 UDP 소켓을 만들고 포트 8888에 바인딩한 후 들어오는 데이터그램을 기다립니다. recvfrom은 데이터와 클라이언트 주소를 반환하여 sendto를 통한 응답을 가능하게 합니다. TCP와 달리 서버는 연결 상태를 유지하지 않습니다. 각 데이터그램은 독립적으로 처리됩니다. 이는 UDP 서버를 확장 가능하게 만듭니다. 단일 서버가 개별 연결마다 메모리를 할당하지 않고 수백만 클라이언트를 처리할 수 있으며, 이는 DNS 서버 및 게임 매치메이킹 시스템에 중요합니다.

모바일 개발에서 UDP는 종종 고수준 라이브러리를 통해 사용됩니다. 예를 들어, iOS용 CocoaAsyncSocket은 비동기 이벤트 처리를 위한 델리게이트 및 GCD와 함께 UDP 소켓을 제공합니다. Android에서 DatagramSocket 클래스는 표준 java.net 라이브러리의 일부이며 추가 종속성이 필요하지 않습니다. Flutter의 경우 네이티브 소켓을 구성하지 않고 데이터그램을 송수신할 수 있는 간단한 인터페이스를 제공하는 udp 패키지가 있습니다.

많은 모바일 네트워크와 기업 방화벽이 특히 1024 이상의 포트에서 UDP 트래픽을 차단한다는 점에 유의해야 합니다. 애플리케이션이 UDP를 사용하는 경우 WebRTC가 하는 것처럼 TCP로의 폴백을 제공하거나 STUN 서버를 통해 프로토콜 가용성을 확인해야 합니다. iOS에서 시스템 Network.framework와 NWConnection은 TCP와 UDP를 모두 지원하며 가용성에 따라 최적의 프로토콜을 자동으로 선택합니다. 실시간 애플리케이션의 경우 패킷 손실 시 스트림 품질을 낮추는 적응형 비트레이트를 구현하는 것이 좋으며, 높은 오류율의 불안정한 채널에서도 지속적인 재생을 보장합니다.

자주 묻는 질문

UDP와 TCP의 차이점은 무엇인가요?

UDP는 연결을 설정하지 않고 패킷 전달을 보장하지 않아 TCP보다 빠릅니다. UDP 헤더는 8바이트이고 TCP는 20~60바이트입니다. UDP는 스트리밍 및 게임에 적합하며, TCP는 웹 요청 및 파일 전송에 적합합니다.

UDP에서 데이터그램이란 무엇인가요?

데이터그램은 UDP 헤더(소스 포트, 대상 포트, 길이, 체크섬)가 있는 독립적인 데이터 패킷입니다. 각 데이터그램은 이전 데이터그램과 관계없이 독립적으로 처리됩니다. 데이터그램 크기는 네트워크 MTU에 의해 제한되며 사양상 최대 65507바이트입니다.

UDP 사용 시 신뢰성은 어떻게 보장되나요?

UDP는 전송 수준에서 신뢰성을 제공하지 않습니다. 신뢰성은 애플리케이션에 의해 구현됩니다. 개발자는 시퀀스 번호, 체크섬, 재전송 요청 및 오류 수정을 추가합니다. FEC(순방향 오류 수정)를 통해 재전송 없이 손실된 패킷을 복구할 수 있습니다.

UDP를 사용하지 말아야 할 때는 언제인가요?

UDP는 데이터 무결성이 중요한 시나리오에는 적합하지 않습니다. 파일 전송, 은행 거래, REST API 등입니다. 이러한 경우 TCP는 모든 바이트가 올바른 순서로 도착함을 보장합니다. 또한 손실률이 높은 불안정한 채널에서는 UDP가 권장되지 않습니다.

QUIC이란 무엇이며 UDP와 어떤 관련이 있나요?

QUIC은 UDP 위에서 실행되는 전송 프로토콜로, Google이 개발하고 IETF가 RFC 9000으로 표준화했습니다. UDP의 속도와 TCP의 신뢰성을 결합하고 HOL(Head-of-Line) 차단 없이 멀티플렉싱을 지원하며 내장 암호화를 제공합니다. HTTP/3은 전송 계층으로 QUIC을 사용합니다.

요약

  • UDP는 최소 지연 시간과 8바이트 헤더를 가진 비연결 프로토콜
  • 보장하지 않음 전달, 패킷 순서 또는 중복 방지
  • 사용 화상 통화, 온라인 게임, DNS, DHCP, 스트리밍
  • UDP 또는 TCP 선택 각 시나리오의 속도와 신뢰성 균형에 따라 다름
  • 패킷 손실은 FEC, 재전송 또는 중복성을 통해 애플리케이션 계층에서 보상
  • UDP 위의 QUIC은 HTTP/3 프로토콜에서 UDP의 속도와 TCP의 신뢰성을 결합
  • 개발자는 데이터그램 크기를 제어하고 네트워크에서 UDP가 차단 또는 필터링될 때 TCP로 폴백을 제공해야 함

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기