네트워크 프로그래밍
지난 시간에는 Connector를 이용하여 ServerCore 프로젝트를 라이브러리화 하는 작업을 진행했다. 이번 시간에는 실질 적으로 패킷을 전송하고, 수신하는 부분을 만들 것이다. 그렇지만 우리 프로젝트는 현재 string으로만 데이터를 전송하고 있는데, 현업에서는 string 형태로 패킷을 전송하지 않기 때문에 이를 수정해야한다.
하지만 어떻게? 무슨 방법으로? 등 패킷 통신처리에 대한 다양한 대한 궁금증이 생기게 되는데 이 때 사용할 수 있는 방법이 TCP/UDP가 있다. 따라서 오늘은 TCP와 UDP에 대해서 다시금 알아보는 시간을 가진다.
예제 😎
간단하게 예를 들어보자. 우리가 아무것도 모르지만 TCP를 이용해 서버를 구성한다고 하면, TCP의 특징 떄문에 우리가 클라이언트에게 100 byte를 보낸다 해도, 클라이언트의 상황에 따라 30 byte만 처리하고, 나머지를 나중에 처리하는 문제가 발생한다. ⁉️.. 어쩌자고.. 따라서 이렇게 될 경우 모든 byte가 다 수신이 되었는지 확인을 해야하는 등 추가적인 작업이 필요하다. 간략한 예시와 TCP의 특징을 통해 문제점을 알아보았으니 이제 TCP와 UDP에 대해 알아보자. 👍
TCP란?
특정 클라이언트와 서버 프로그램 사이에 데이터 통신을 제공해주는 Transport Layer의 대표적인 프로토콜 중 하나이다. 패킷이 누락되거나, 중복되지는 않았는지 꼼꼼하게 관리하는 프로토콜이다. 안전성의 이유로 MMO에서 자주 사용한다.
UDP란?
연결이라는 개념 없이 단순하게 보내는 방식이다. 전송 순서의 보장이 없다.
TCP와 UDP의 차이점
연결 지향성
속도와 신뢰성
결론
TCP는 안전한 트럭과, 전화 연결방식의 이미지 형태로 머리속에 기억하면 좋고, UDP는 위험한 총알 배송, 우편 전송 방식의 이미지 형태로 기억하면 좋다. 👍
그래서 무엇을 사용하냐?라고 물으면 FPS는 대기시간(=레이턴시)를 줄이기 위해 UDP를 사용하고, MMO는 안전성을 위해 TCP를 쓴다. 하지만 둘 중 하나만 선택해서 사용하는 것이 아니라, UDP를 사용하지만 TCP의 일부 기능을 추가하는 형태 혹은 반대로 커스터마이징하여서 사용한다고 한다.
P.S. 정보처리기사 자격증을 공부하면서 죽어라~ 공부해서 해당 주제로는 포스팅을 안하려고 했지만, 오랜만에 리마인드 하는 느낌으로 작성해보았다. 😂
'공부 > 인프런 - Rookiss' 카테고리의 다른 글
Part 4-3-12. 네트워크 프로그래밍 : SendBuffer (0) | 2023.11.05 |
---|---|
Part 4-3-11. 네트워크 프로그래밍 : RecvBuffer (1) | 2023.11.02 |
Part 4-3-9. 네트워크 프로그래밍 : Connector (1) | 2023.10.30 |
Part 4-3-8. 네트워크 프로그래밍 : Session #4 (Event Handler) (0) | 2023.10.29 |
Part 4-3-7. 네트워크 프로그래밍 : Session #3 (Send 개선) (0) | 2023.09.22 |