개발면접준비

TCP와 UDP

개발지식 블로그 2024. 12. 16. 19:45

서론

우리는 여러 가지 게임을 해보았다. 그 과정에서는 클라이언트와 서버가 소통을 하며 정보가 올바르게 또는 빠르게 교환이 되어야 유저가 의도하는 대로 게임을 진행시킬 수 있다. 예를 들어, 배그에서 듀오로 참여해 한 집을 같이 파밍하고 있다고 생각해 보자. 유저 A가 총이 바닥에 있는 것을 보고 근처로 다가가서 F키를 눌러 획득하려 한다. 이 과정에서 클라이언트와 서버는 어떤 정보를 주고받고 어떤 결과가 나올까?

개요

게임이 시작되면 서버는 어느 지점에 어떤 아이템이 배치 될지 결정한다. A 유저가 집에 들어와서 아이템을 찾는다. A 유저가 원하는 아이템인지 시각적으로 확인한다. 아이템 획득을 시도한다. 클라이언트가 서버에게 A 유저가 아이템을 획득하기를 요청한다. 서버는 이 아이템이 실제로 그 위치에 있는지, 실제로 A 유저가 그 위치에 있는지, A 유저가 아이템을 획득할 공간을 가지고 있는지 등을 확인한다. 모든 정보가 옳다고 확인되면 A 유저의 클라이언트와 A 유저 주변의 클라이언트에게 정보를 전달한다. 이후 A 유저의 인벤토리를 확인하면 획득한 아이템이 있다. 아이템이 있던 자리에는 더 이상 그 아이템이 보이지 않는다. 이것은 A, B 유저 모두의 클라이언트에서 동일하다.  

본론

위 예시에서 한 유저가 아이템을 보고 딸깍하면 일어나는 수 많은 일 중에 일부분을 서버와 클라이언트의 관점에서 묘사해 보았다. 실제로는 더 복잡한 조건들을 거쳐야 할 것이다. 우리는 이 과정에서 어느 부분에서 TCP와 UDP가 쓰이는지 알아볼 것이다. 일단 TCP가 무엇인지 UDP가 무엇인지 알아보자

TCP와 UDP는 *OSI 7계층 중 3 계층인 전송계층에 속한다. 이때 데이터를 전달하기 위해 사용하는 *프로토콜이 있는데 이 프로토콜의 대표적인 두 가지가 TCP와 UDP이다. 

 

 

TCP란?

TCP(Transmission Control Protocol)는 네트워크에서 데이터를 신뢰성 있게 전송하기 위한 프로토콜이다. TCP는 데이터를 보내는 쪽과 받는 쪽 사이에 3-way handshaking과정으로 연결을 설정한 후 데이터가 정확하고 순서대로 전달되도록 보장한다. 이후 연결을 종료할 때에는 4-way handshaking과정으로 연결을 종료한다.

패킷의 도착 순서가 보장되고 신뢰성이 높다.

UDP보다 속도가 느리다

 

UDP란?

UDP(User Datagram Protocol)은 데이터를 *데이터그램 단위로 처리하는 프로토콜이며 비연결형 프로토콜이다. 즉, 각각의 패킷은 다른 경로로 전송되며, 각각의 패킷을 독립적인 관계를 지닌다.

패킷의 도착 순서가 보장되지 않는다.

TCP보다 속도가 빠르다.

 

이러한 특징들을 알고 게임의 상황을 다시 봐보자.

게임 시작 시 아이템의 종류 및 위치를 결정하고 이러한 정보가 서버에서 클라이언트로  전송되어 각 플레이어가 아이템을 시각적으로 확인 할 수 있도록 한다. 이 과정에서는 TCP가 쓰이고 이유로, 초기 아이템 배치 정보는 데이터 손실 없이 정확히 클라이언트에 전달되어야 하기 때문이다. 다음으로 유저가 아이템을 확인하는 것은 UDP가 쓰인다. 아이템의 시각적 데이터는 빠르게 표시되지만, 잠깐의 데이터가 손실되어도 게임 플레이에 크게 영향을 미치지 않기 때문이다. 다음으로 유저가 아이템을 획득하려 할 때는 TCP가 쓰인다. 유저가 획득키를 누르면 클라이언트는 서버로 유저의 ID, 아이템의 ID, 유저의 좌표 정보 등을 TCP를 이용해서 정확한 정보를 보낸다. 그러면 서버에서는 아이템이 해당 위치에 있는 게 맞는지, 유저가 유효범위 내에 있는지, 인벤토리에 공간이 있는지 확인하고 검증이 완료되면 아이템이 유저의 인벤토리로 이동한다. 이후 아이템은 맵에서 사라졌음을 처리한다. 이러한 결과를 서버는 다시 클라이언트로 전달하고 유저 주변에 있던 다른 유저들의 클라이언트에도 아이템이 사라졌음을 동기화한다. 다른 유저에게 아이템 사라짐 동기화를 할 때에는 UDP를 사용해서 아이템이 사라졌다는 시각적 정보를 빠르게 전달한다. 

마무리

이처럼 정확성관 신뢰성이 필요한 부분에는 TCP가 쓰이고 잠시 손실이 있어도 치명적이지 않고 빠른 정보가 더 중요할 때에는 UDP가 쓰인다. 

하나의 게임에서 작은 부분에서도 TCP와 UDP는 함께 그러나 다른 곳에서 각자의 일을 도맡고 있다.

 

위의 내용을 바탕으로 개발자 면접 간

1. TCP와 UDP는 무엇인가요?

2. 각각은 어떤 곳에서 쓰이나요?

3. 각각을 사용해서 어떤 기능을 만든 경험이 있나요?

 

등에 대한 질문을 생각해 볼 수 있겠다. 스스로에게 질문을 해보고 답해보자.

 

헷갈리는 부분은 보완하기! 찡긋 O.<

 

틀린 부분이나 보완해줬으면 하는 내용이 있으면 댓글로 알려주세요! 추가 설명이 필요하신 부분도 댓글로 알려주세요.

어떠한 피드백도 환영입니다. 긴 글 읽어주셔서 감사합니다.

 

주석

  • OSI 7 계층 : 네트워크 통신 과정을 계층적으로 나눈 국제 표준 모델
  • 프로토콜 : 네트워크에서 데이터를 주고받는 규칙이나 표준화된 통신방법
  • 패킷: 네트워크를 통해 데이터를 전송할 때 사용하는 작은 데이터 단위
  • 데이터그램: 독립적인 관계를 지니는 패킷