UDP란 무엇인가요?
면접용
UDP는 사용자 데이터그램 프로토콜(User Datagram Protocol)의 약자로, 연결을 설정하지 않고 데이터를 빠르게 전송할 수 있는 전송 계층 프로토콜입니다.
TCP와 달리 수신 측의 응답을 기다리지 않고 데이터를 보내기 때문에 속도는 빠르지만, 패킷이 유실되거나 순서가 바뀔 수 있습니다. 따라서 신뢰성보다 속도가 중요한 환경에서 주로 사용됩니다. 예를 들어, 영상 스트리밍, 온라인 게임, 음성 통화처럼 일부 데이터 손실을 감수하더라도 끊김 없는 실시간성이 중요한 경우에 적합합니다.
개념 설명
(이미지 출처: https://subspace.com/resources/tune-tcp-udp-performance)
UDP는 무엇인가요?
User Datagram Protocol의 약자로, 데이터를 데이터그램 단위로 처리하는 전송 계층 프로토콜입니다.
비연결형(Stateless)이며, 신뢰성이 없는 전송 방식입니다.
데이터를 전송하기 전에 연결을 설정하지 않고, 데이터를 보내기만 하면 되는 구조입니다.
UDP는 데이터를 빠르게 보내기 위해 복잡한 연결 절차를 생략합니다. 이 덕분에 빠르지만, 순서 보장이나 재전송 등의 기능은 제공하지 않기 때문에 이러한 부분은 애플리케이션 레벨에서 처리해야 합니다.
UDP가 사용되는 대표적인 예시: DNS
DNS 질의와 같이, 짧고 간단한 요청-응답이 필요한 경우 UDP가 적합합니다.
DNS는 사용자가 입력한 도메인 주소를 IP 주소로 변환하는 과정입니다.
전송해야 하는 데이터가 매우 작고, 단 한 번의 요청-응답이면 끝나는 구조이므로, 연결 설정이 필요 없는 UDP가 효율적입니다.
만약 응답이 오지 않으면, 클라이언트가 다시 요청을 보내면 됩니다.
Request에 대한 손실은 Application Layer에서 제어가 가능하다고 합니다.
하지만 크기가 512(UDP 제한)이 넘을 때, TCP를 사용해야 합니다.
→ 빠르게 응답을 받아야 하고, 소량의 데이터만 오가는 환경에서는 UDP가 TCP보다 적합합니다.
UDP의 구조적 특징
클라이언트-서버 구조에서도 사용 가능합니다. (예: DNS, 게임 서버)
Peer-to-Peer 구조에도 적합합니다. (예: WebRTC, 실시간 영상 통신)
IP 주소와 Port 정보만 알면, 양측 모두 송신자 또는 수신자가 될 수 있습니다.
DNS 질의
클라이언트 → 서버
단방향 요청-응답 구조
WebRTC 영상 스트리밍
노드 ↔ 노드
P2P 구조로 직접 영상 전송
온라인 게임
클라이언트 ↔ 서버
위치 등 실시간 정보 교환
UDP 통신에서의 신뢰성 처리
UDP는 연결을 맺지 않고, 수신 확인(ACK)도 없기 때문에 패킷이 도착했는지 여부를 알 수 없습니다. 따라서 TCP처럼 자동으로 재전송하거나 순서를 보장하지 않습니다.
이러한 한계 때문에, 응답이 없을 때 어떻게 할 것인지는 전적으로 개발자의 몫입니다.
타임아웃 설정
일정 시간 내 응답이 없으면, 응답이 유실되었다고 판단하고 재전송
시퀀스 번호 부여
보낸 메시지마다 고유 번호를 붙이고, 응답에서 해당 번호를 돌려받아 누락 여부 판단
애플리케이션 레벨 ACK 구현
응답이 왔다는 확인 메시지를 명시적으로 정의하고, 수신 시 처리
이처럼 UDP 위에서 신뢰성을 확보하기 위한 처리는 애플리케이션 단에서 직접 구현해야 합니다. 실시간 영상처럼 일부 손실이 허용되는 경우에는 재전송을 생략하고, 중요 데이터에서는 재전송 로직을 포함시키는 방식으로 상황에 맞게 설계합니다.
실시간 스트리밍에서의 활용
WebRTC와 같은 실시간 통신에서는 UDP 기반의 RTP(Real-time Transport Protocol)를 사용하여 데이터를 주고받습니다. 이때 주고받는 패킷에는 시퀀스 번호와 타임스탬프가 포함되어 있어, 수신자는 순서를 맞추고 지연을 보정할 수 있습니다.
하지만 패킷이 유실되더라도 재전송은 하지 않습니다. 그 이유는 재전송으로 인한 지연이 오히려 사용자 경험을 저해할 수 있기 때문입니다.
→ 실시간성이 중요한 환경에서는 빠르게 도착한 데이터만 재생하고, 누락된 데이터는 무시하는 방식으로 처리합니다.
TCP와의 차이점
연결 방식
연결 지향
비연결 지향
신뢰성
높음 (재전송, 순서 보장)
낮음 (소실 가능)
속도
느림
빠름
사용 예시
파일 다운로드, 로그인
스트리밍, 실시간 게임
프론트엔드 관점에서 ! 영상 플랫폼의 소통 방식
Netflix, YouTube와 같은 플랫폼은 실시간 방송이 아닌 VOD(Video On Demand) 서비스이므로, 일반적으로 TCP 기반의 HTTP 통신을 사용합니다. 영상은 CDN(콘텐츠 전송 네트워크)을 통해 분할된 형태로 제공되며, 브라우저에서는 video 태그나 HLS.js, dash.js 같은 라이브러리를 통해 스트리밍이 이루어집니다.
1단계: 초반에는 TCP로 영상 일부를 미리 다운로드합니다
초기 지연 없이 빠르게 재생을 시작하기 위해 사용자가 영상 재생을 시작하면, 브라우저는 일정 구간(예: 5~10초 분량)의 데이터를 미리 다운로드합니다.
<video controls autoplay>
<source src="https://cdn.example.com/video/1234.m3u8" type="application/x-mpegURL">
</video>
위와 같은 방식으로 브라우저는 video 태그를 통해 CDN에 요청을 보내고, TCP 기반으로 데이터를 받아옵니다.
2단계: CDN을 통해 영상 데이터를 점진적으로 받아옵니다
CDN에서는 영상이 작은 조각(.ts, .mp4 등)으로 분할되어 저장되어 있습니다.
브라우저는 필요할 때마다 다음 조각을 요청하여 점진적으로 다운로드하고 재생합니다. 이를 Progressive Streaming이라고 합니다.
가까운 위치의 CDN 서버로부터 데이터를 받아오므로, 지연 시간이 짧고 품질이 안정적입니다.
3단계: 그럼 UDP는 전혀 사용되지 않는가?
브라우저 기반의 일반적인 영상 스트리밍에서는 UDP가 사용되지 않습니다. 모든 전송은 TCP 기반의 HTTP로 이루어집니다.
하지만 특정 상황에서는 UDP 기반 전송 기술도 사용됩니다. 예를 들어, HTTP/3 프로토콜은 내부적으로 QUIC을 사용하는데, QUIC은 UDP 기반으로 동작하면서도 TCP와 유사한 신뢰성과 흐름 제어 기능을 제공합니다. YouTube는 일부 환경에서 QUIC을 통해 콘텐츠를 더 빠르게 전송합니다.
또한, TV 앱이나 셋톱박스, 스마트폰 네이티브 앱과 같은 환경에서는 WebRTC 기반의 UDP 전송이나 P2P 기술이 활용되기도 합니다.
Last updated