코드잇 스프린트 위클리 페이퍼 열일곱번째 주제 17-2
전송 계층에서 TCP와 UDP의 차이점은 무엇이며, 각각 어떤 상황에서 사용하는 것이 적절한가요?
네트워크를 통해 데이터를 보낼 때 IP 주소를 찾는것도 중요하지만 어떤 방식으로 전달할 것인지도 중요하다.
이 전송 방식을 결정하는 곳이 TCP/IP 4계층 모델의 전송 계층이고, TCP, UDP라는 핵심 프로토콜이 있다.
두 프로토콜은 데이터를 전송한다는 목적은 같지만, 꼼꼼하게 처리할 것인가, 빠르게 처리할 것인가로 나뉜다.
1. TCP (Transmission Control Protocol). 신뢰성 있는 전송
TCP는 '신뢰성(Reliability)'을 최우선으로 하는 프로토콜이다. 데이터가 누락되지 않고, 순서대로, 정확하게 도착하는 하는 것을 보장한다.
연결 지향형(Connection-oriented)
데이터를 보내기 전에 상대방과 미리 연결을 맺는다. 이것을 3-Way Handshake라고 부른다.

오류 및 흐름 제어
중간에 패킷(데이터 조각)이 분실되면 다시 보내달라고 요청(재전송)하고, 받는 사람의 속도에 맞춰서 보내는 양을 조절한다.
하지만 단점으로는 꼼꼼하게 검사하고 연결을 맺는 과정(오버헤드)이 필요하므로 상대적으로 속도가 느리고, 시스템 자원을 많이 사용한다.
2. UDP (User Datagram Protocol). 빠르고 단순한 전송
UDP는 속도를 최우선으로 하는 프로토콜이다. 신뢰성을 보장하지 않고, 그냥 목적지를 향해 데이터를 던지기만 한다.
비연결형(Connectionless)
사전 연결 작업 없이 데이터를 바로 쏜다. (No Handshake)
신뢰성 없음
데이터가 중간에 유실되든, 순서가 뒤죽박죽으로 도착하든 신경쓰지 않는다. 오류 확인이나 재전송 절차가 없다.
장점으로는 복잡한 제어 로직이 없기 때문에 속도가 매우 빠르고, 네트워크 부하가 적다.
3. 적절한 사용 상황
서비스의 특성에 맞춰서 선택을 해야한다.
TCP가 적절한 상황 (데이터 무결성)
웹 브라우징(HTTP/HTTPS)
웹 페이지의 HTML 코드나 이미지가 1바이트라도 유실되면 화면이 깨지므로 무조건 TCP를 사용한다.
파일 전송(FTP), 이메일(SMTP)
다운로드한 파일이나 이메일 내용이 중간에 누락되면 안되기 때문에 신뢰성이 필수이다.
UDP가 적절한 상황 (속도, 실시간성)
실시간 스트리밍 및 화상 회의 (Youtube, Zoom, Zep 등)
영상 재생 중 1~2 프레임정도 유실되어 화면이 찰나의 순간 깨지는 것은 괜찮다. 하지만 데이터가 늦게 도착해서 뚝뚝 끊기는 '버퍼링'이 발생하면 치명적인 서비스..
온라인 게임
유저의 빠른 반응 속도와 동기화가 중요하기 때문에 주로 UDP를 사용한다.
DNS (도메인 이름 시스템)
단순하고 아주 빠른 질의/응답이 필요하므로 UDP를 사용한다.