| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 운영체제
- 정렬
- 유니티
- 통신
- SQL
- vertex shader
- SQL시험
- 버텍스 쉐이더
- URP
- 배칭
- TCP
- HDRP
- c#
- 주식
- 코스닥
- Heap
- 프로세스
- 네트워크
- 픽셀 쉐이더
- SRP
- 스레드
- 쉐이더
- 유니티 최적화
- 자료구조
- 코스피
- 디자인패턴
- 렌더링파이프라인
- unity
- SQLD
- 멀티스레드
- Today
- Total
Let's Girin!
[네트워크] 온라인 게임의 통신 방식 본문
1. 통신이란?
통신이란 서로 다른 컴퓨터나 기기 간에 데이터를 주고받는 과정을 의미한다. 온라인 게임에서는 플레이어의 조작 정보, 게임 상태, 캐릭터 위치 등 다양한 데이터를 실시간으로 주고받아야 하므로 통신이 매우 중요하다.
2. 통신지연(Latency)
- 통신지연은 데이터를 보내고 상대방이 받기까지 걸리는 시간이다.
- 일반적으로 단위는 밀리초(ms)로 표시하며 네트워크 환경이나 거리, 회선 품질에 따라 수 밀리초부터 수백 밀리초까지 다양하다.
- 온라인 게임은 보통 초당 60프레임(60FPS) 으로 동작하는데, 1프레임은 약 16.7ms이다. 따라서 16ms 이하의 지연이 이상적이며, 그 이상이면 플레이어가 조작한 결과가 늦게 반영되어 게임이 둔하게 느껴질 수 있다.
3. 온라인 게임의 주요 통신 방식
1. 동기 방식 (Synchronous)
동기 방식은 모든 게임 단말이 같은 상태를 유지하도록 데이터를 주고받는 방식이다. 즉, 한 쪽이 처리한 내용을 다른 쪽도 똑같이 처리해야 다음 단계로 넘어간다
- 턴 동기(Turn-based Sync)
턴제 게임에서 한 플레이어가 행동을 선택하면 그 정보를 상대에게 보내고, 양쪽 모두 그 결과를 적용한 뒤 다음 턴으로 넘어간다. 대표적으로 체스, 카드 게임 등이 여기에 해당한다. - 키 입력 동기(Input Sync)
FPS, TPS 같은 실시간 액션 게임에서 키보드나 컨트롤러 입력 정보를 주고받아 각 클라이언트가 같은 프레임에 동일한 입력을 처리한다. 이렇게 하면 서로 다른 클라이언트가 같은 게임 상태를 유지할 수 있다.
🔹장점
- 게임 상태가 완벽히 일치하므로 치팅 방지에 유리하다.
- 모든 플레이어가 같은 환경에서 게임을 즐길 수 있다.
🔹단점
- 한 플레이어의 입력을 기다리는 동안 게임이 멈추거나 지연될 수 있어, 네트워크 상태가 안 좋으면 플레이 경험이 크게 저하된다.
2. 비동기 방식 (Asynchronous)
비동기 방식은 꼭 필요한 최소한의 데이터만 주고받아 각 단말이 독립적으로 게임을 진행하면서 나중에 상태를 맞추는 방식이다.
- MMORPG나 대규모 온라인 게임에서 흔히 쓰이며, 모든 플레이어의 정보를 기다리지 않고 서버가 최신 상태를 계속 보내고 클라이언트는 이를 수신하여 게임을 진행한다.
🔹 장점
- 네트워크 지연이 있어도 게임이 멈추지 않고 부드럽게 진행된다.
- 대규모 플레이어 동시 접속에 적합하다.
🔹 단점
- 모든 클라이언트의 상태가 완전히 일치하지 않을 수 있다.
- 위치 동기화 오류, 순간적인 위치 튐 등의 현상이 발생할 수 있다.
4. 온라인 게임에서 통신 시 꼭 고려해야 할 제약사항
1. 통신 지연(Latency)
- 지연을 최소화하기 위한 네트워크 최적화가 필수이다.
- 예를 들어, 예측 알고리즘(Prediction)을 사용해 플레이어의 동작을 미리 추정하여 렌더링하거나, 지연을 보상하는 보간(Interpolation) 기법을 쓴다.
2. 데이터 소실(Packet Loss)
- 네트워크 특성상 데이터가 유실될 수 있어 이를 감지하고 재전송하거나 오류를 보정하는 기술이 필요하다.
- UDP 프로토콜을 많이 쓰지만, 신뢰성이 필요한 데이터는 TCP나 별도의 재전송 로직으로 보완한다.
UDP는 연결을 미리 설정하지 않는 비연결형 프로토콜로, 데이터 전송 시 신뢰성을 보장하지 않아 재전송이나 순서 보장이 없다. 그래서 속도가 빠르고 오버헤드가 적어, 실시간 위치 정보나 입력처럼 빠른 전달이 중요한 데이터에 적합하다.
반면, TCP는 데이터를 보내기 전에 연결을 설정하는 연결형 프로토콜이며, 데이터가 정상적으로 도착했는지 확인하고 필요시 재전송까지 하여 신뢰성을 보장한다. 또한 데이터의 순서도 반드시 맞춰서 전달한다. 이런 특성 때문에 TCP는 채팅 메시지, 로그인, 아이템 거래 등 정확한 전달이 중요한 데이터에 주로 사용되지만, 그만큼 속도가 UDP보다 느리고 오버헤드가 크다.
* 게임에서 UDP와 TCP를 함께 쓰는 이유
실시간 게임에서는 플레이어 움직임 등 빠른 정보는 UDP로 보내고,
중요한 정보(예: 게임 시작 명령, 아이템 거래)는 TCP 또는 자체적인 신뢰성 보장 메커니즘을 만들어 보완하는 경우가 많다.
예를 들어, UDP로 움직임 데이터를 보내다가 만약 중요한 이벤트(아이템 습득 등)는 별도 확인 절차를 두어 데이터 누락을 방지하는 식이다.
3. 회선 끊김(Disconnect)
- 플레이어 접속이 끊기면 게임 상태와 다른 플레이어 영향을 고려해 어떻게 처리할지 정해야 한다.
- 예를 들어, 끊긴 플레이어 캐릭터를 AI가 대신 조종하거나, 팀 기반 게임에서는 자동으로 팀에서 제외하고 남은 플레이어가 계속 진행할 수 있도록 설계한다.
5. 주요 용어 정리

- 단말(Client Device): 게임을 플레이하는 컴퓨터, 게임기, 스마트폰, 태블릿 등 네트워크에 연결된 기기
- 로컬 단말(Local Client): 내가 직접 플레이하는 기기
- 리모트 단말(Remote Client): 내 게임 상대가 플레이하는 기기
- 게임 서버(Game Server): 모든 플레이어의 데이터를 중앙에서 관리하거나 중계하는 서버
- 게임 클라이언트(Game Client): 서버와 통신하며 게임을 실행하는 단말 프로그램
- 호스트(Host): P2P 방식에서 게임 진행과 데이터 관리를 담당하는 주체
- 게스트(Guest): 호스트가 관리하는 게임 정보를 수신하여 플레이하는 단말
[참고] 유니티 네트워크 프로그래밍(가와다 마사토시 지음/김성재 옮김)
개인적으로 공부한 내용 정리.
'NetWork' 카테고리의 다른 글
| [네트워크] AWS S3와 CDN, 안정적인 웹 서비스 구축 (1) | 2025.07.07 |
|---|---|
| [네트워크] TCP 와 HTTP 통신 정리 (2) | 2024.05.25 |
| [네트워크] 데이터 통신의 기초 : 데이터는 어떻게 전달될까? (0) | 2022.09.14 |