안녕하십니까. C++ 게임 서버 프로그래머를 위한 CS 이론 연재입니다.
지난 글에서는 네트워크 통신의 전체적인 설계도인 OSI 7계층과 TCP/IP 4계층 모델에 대해 알아보았습니다. 두 모델 모두에서 **전송 계층(Transport Layer)**은 데이터의 종단 간 전송을 책임지는 매우 중요한 역할을 했습니다.
이번 글에서는 바로 이 전송 계층의 대표적인 두 프로토콜, **TCP(Transmission Control Protocol)**와 **UDP(User Datagram Protocol)**에 대해 심도 있게 알아보겠습니다. "TCP와 UDP의 차이점을 설명해 보세요"라는 질문은 게임 서버 개발자 면접의 단골 질문이므로 반드시 명확하게 이해하고 넘어가야 합니다.
## TCP (Transmission Control Protocol) 란 무엇입니까?
TCP는 연결 지향(Connection-oriented) 프로토콜입니다. 이는 데이터를 전송하기 전에 송신자와 수신자 간에 논리적인 연결을 먼저 설정해야 함을 의미합니다. 이 연결 설정 과정을 3-way Handshake라고 부릅니다.
TCP의 가장 큰 특징은 신뢰성 있는 데이터 전송을 보장한다는 점입니다.
- 데이터 분할과 순서 보장: 전송할 데이터가 클 경우, 이를 적절한 크기로 분할(Segmentation)하고 각 조각에 순서 번호(Sequence Number)를 부여합니다. 수신 측에서는 이 번호를 기반으로 원래의 데이터를 정확하게 재조립합니다.
- 오류 검출 및 재전송: 데이터 전송 중 오류가 발생하거나 일부가 누락되면, 수신 측은 이를 감지하고 송신 측에 재전송을 요청합니다. 이를 통해 데이터의 무결성을 보장합니다.
- 흐름 제어(Flow Control): 수신 측이 처리할 수 있는 속도보다 송신 측이 더 빠르게 데이터를 보내지 않도록 전송 속도를 조절합니다.
- 혼잡 제어(Congestion Control): 네트워크의 혼잡 상태를 파악하고, 데이터 전송량을 조절하여 네트워크가 마비되는 것을 방지합니다.
이처럼 TCP는 데이터가 순서에 맞게, 누락 없이, 안전하게 전달되는 것을 최우선으로 하므로, 신뢰성이 중요한 서비스에 사용됩니다.
## UDP (User Datagram Protocol) 란 무엇입니까?
UDP는 비연결 지향(Connectionless) 프로토콜입니다. TCP처럼 사전에 연결을 설정하는 과정 없이, 송신 측이 일방적으로 데이터를 전송합니다.
UDP의 가장 큰 특징은 빠른 속도입니다.
- 최소한의 오버헤드: TCP의 3-way Handshake와 같은 연결 설정 과정이나, 순서 보장, 재전송 요청 등의 복잡한 기능이 없습니다. 단순히 데이터에 목적지 주소(IP, Port) 정보만 붙여서 보내는 방식이므로 헤더가 단순하고 전송 속도가 매우 빠릅니다.
- 신뢰성 미보장: 데이터를 보내기는 하지만, 이 데이터가 제대로 도착했는지, 순서는 올바른지 전혀 보장하지 않습니다. 데이터가 중간에 유실되거나 순서가 뒤바뀌어 도착할 수 있습니다.
이처럼 UDP는 신뢰성을 포기하는 대신, 속도와 실시간성을 확보하는 데 중점을 둡니다. 약간의 데이터 손실이 있더라도 빠르게 정보를 전달하는 것이 더 중요한 서비스에 적합합니다.
## TCP와 UDP 비교 정리
구분 | TCP | UDP |
연결 방식 | 연결 지향 (Connection-oriented) | 비연결 지향 (Connectionless) |
신뢰성 | 높음 (데이터 순서 보장, 재전송) | 낮음 (신뢰성 보장 안 함) |
전송 속도 | 상대적으로 느림 | 빠름 |
헤더 오버헤드 | 큼 (20 bytes 이상) | 작음 (8 bytes) |
주요 사용처 | 채팅, 로그인, 파일 전송, 웹 통신(HTTP) | 실시간 게임, 음성/영상 스트리밍, DNS |
## 게임 서버에서는 어떻게 사용됩니까?
게임 서버는 TCP와 UDP의 특징을 모두 활용하여 두 프로토콜을 함께 사용하는 경우가 많습니다.
- TCP 사용 사례:
- 로그인/회원가입: 계정 정보는 단 하나의 비트도 유실되어서는 안 되므로 신뢰성 있는 TCP를 사용합니다.
- 채팅: 메시지가 누락되거나 순서가 뒤바뀌면 대화가 성립하지 않으므로 TCP를 사용합니다.
- 캐릭터 정보, 상점 데이터 조회: 플레이어의 재화나 아이템 정보처럼 반드시 정확해야 하는 데이터를 주고받을 때 사용합니다.
- UDP 사용 사례:
- 실시간 위치 동기화: FPS나 레이싱 게임에서 수많은 플레이어의 위치 정보를 실시간으로 주고받을 때 사용합니다. 한두 프레임의 위치 정보가 유실되더라도, 곧바로 다음 위치 정보가 들어오는 것이 더 중요하기 때문입니다.
- 스킬 사용, 총알 발사: 빠른 반응 속도가 생명인 액션에 사용됩니다.
## 정리
이번 글에서는 전송 계층의 핵심 프로토콜인 TCP와 UDP의 차이점을 알아보았습니다. 면접에서는 단순히 둘의 특징을 나열하는 것을 넘어, **"어떤 상황에서 왜 그 프로토콜을 선택해야 하는가?"**를 게임 개발의 예시와 함께 논리적으로 설명하는 것이 중요합니다.
- TCP는 신뢰성이 중요할 때 사용합니다.
- UDP는 속도와 실시간성이 중요할 때 사용합니다.
- 성공적인 게임 서버는 두 프로토콜의 장점을 이해하고 적재적소에 활용해야 합니다.
다음 연재 글에서는 TCP가 신뢰성을 확보하는 첫 번째 관문인 "TCP의 3-way Handshake와 4-way Handshake" 과정에 대해 자세히 알아보겠습니다.
'네트워크이론' 카테고리의 다른 글
기술면접 대비 이론 - OSI 7계층과 TCP/IP 4계층 모델 (2) | 2025.07.09 |
---|