거창하지 않지만 중요한 개발 잡담

Let's Groove - TCP와 UDP

NAEU 2026. 3. 7. 12:52
제가 자주 보는 분의 글들을 읽다가 적어봅니다 흔히 속도는 UDP, 안정성은 TCP라고 머리에 박혀있습니다 다만 글의 내용을 보면 오히려 TCP가 빠른 결과가 나왔습니다 전제를 살펴보도록 하죠
  • 이미 연결되어 있다
  • 재전송이 일어나지 않는다

TCP의 연결은 3-way handshake로 진행됩니다

Clinet -> Server 연결 요첨

Server -> Client 연결 확인 + 연결 요청

Client -> Server 연결 확인

 

반면 UDP는 연결이랄게 따로 없습니다

그냥 존재하는지도 모르는 어딘가에게 계속 데이터를 보내는 거죠

그래서 TCP는 연결 처리 과정이 존재합니만 전제는 이미 연결되어 있기에 이는 무시하도록 하죠

 

다음은 재전송입니다

재전송은 주로 패킷이 손실되었을 때 진행됩니다

TCP의 경우 데이터를 수신 확인인 ACK가 돌아오지 않았기에 다시 전송합니다 반

면 UDP는 손실됐는지도 모르기에 다시 처리할 과정이 존재하지 않습니다 따라 재전송이 발생한다면 TCP에서는 처리하는 일이 더 생기기에 늦어진다지만, 이것도 전제에서는 빠졌습니다

 

그럼 남은게 뭘까요?

 

헤더의 크기가 우선 떠오릅니다 TCP는 데이터의 상태같이 자세한 정보들을 더 기록해야하기에 패킷에서 크기를 더 차지합니다 하지만 그 차이는 현대 하드웨어 기준으로 무시될 수준이기에 실질적 레이턴시의 차이가 미미해지죠

그래서 결론은 TCP가 모든면에서 더 좋다? 라고 하기엔 사실 전제가 좀 사기인 면이 있죠

실시간 게임 네트워킹을 기준으로 최초 연결 시간은 어느정도 감수할 수 있지만, 손실에 대해 재전송하지 않으면 어떤 일들이 발생할지 모릅니다

 

특히 TCP는 순서가 꽤 중요한 프로토콜이기 때문에 더욱 무시될 수는 없죠

데이터가 방대해져 4개로 쪼개서 보낸다고 할때, 1. 통과 2. 손실이 발생하면 다음 3과 4는 블로킹 되어 HOL Blocking이 발생하게 되니까요

 

따라서 실제로 TCP만을 사용하기엔 무리가 있지만 글의 내용은 UDP는 빠름! TCP는 느림!이라는 단순한 사고를 경계하자는 취지인 것 같네요

추가로 몇개를 더 찾아봤는데 UDP기반으로 중요한 데이터만 재전송 가능하게 만든 방식도 있다고 합니다