UDP 애플리케이션은 손실, 순서, 재시도 책임을 직접 정한다
UDP는 데이터그램을 보내지만 도착, 순서, 중복 제거를 보장하지 않습니다. 필요한 신뢰성은 애플리케이션 프로토콜이 timeout, sequence, retry, idempotency로 설계해야 합니다.
send
요청 ID와 deadline을 붙인다
응답을 매칭할 ID와 기다릴 시간을 정합니다.
wait
응답 없으면 timeout
무한 대기하지 않고 재시도나 실패로 전환합니다.
retry
재시도는 중복을 만들 수 있다
서버 작업이 여러 번 실행돼도 안전한지 확인합니다.
accept
늦은 응답과 순서를 판정
오래된 응답, 중복 응답, 순서가 바뀐 응답을 처리합니다.
문제
UDP가 해주지 않는 것
애플리케이션 설계
손실
재전송과 도착 보장
timeout, retry limit, fallback
순서
먼저 보낸 것이 먼저 도착한다는 보장
sequence number, reorder buffer
중복
같은 요청/응답 제거
request ID, idempotency key
크기
경로 MTU와 단편화 안전성
작은 payload, TCP fallback
DNS 질의는 작고 재시도가 쉽다 응답이 없으면 다른 resolver나 TCP로 다시 시도할 수 있습니다.
결제/주문 중복 실행이 위험하면 UDP 단독은 피한다 재시도될 수 있는 요청은 idempotency 설계가 먼저 필요합니다.
QUIC UDP 위에 필요한 전송 기능을 다시 만든다 재전송, 흐름 제어, 암호화를 프로토콜이 직접 제공합니다.