๐ฏ ๊ฒ์ ๋คํธ์ํน์ ๋ฉํฐํ๋ ์ด ๊ฒ์์ ๋ง๋ค ๋ ํ์์ ์ผ๋ก ์์์ผ ํ ์์์ด๋ค. ๋คํธ์ํน ์์ด ์ฑ๊ธํ๋ ์ด ๊ฒ์์ ๋ง๋ ๋ค๋ฉด, ๋ชจ๋ ๊ฒ์ ๋ก์ง์ด ๋ก์ปฌ(ํด๋ผ์ด์ธํธ)์์๋ง ๋์ํ๋ฉด ๋์ง๋ง, ๋ฉํฐํ๋ ์ด์์๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ฐ์ดํฐ ๋๊ธฐํ๊ฐ ํ์.
๐ฎ 1. ๊ฒ์ ๋คํธ์ํน์ ๊ธฐ๋ณธ ๊ฐ๋
1๏ธโฃ ๋คํธ์ํฌ ๋ชจ๋ธ (์๋ฒ & ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ)
๋ฉํฐํ๋ ์ด ๊ฒ์์ ๋ง๋ค๊ธฐ ์ํด์ ๋คํธ์ํฌ ๋ชจ๋ธ์ ์ ํํด์ผ ํ๋ค.

์ด๋ฏธ์ง์ถ์ฒ : https://systemdesignschool.io/blog/peer-to-peer-architecture
๐ P2P (Peer-to-Peer)
- ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์.
- ์๋ฒ ์์ด ๋์ ๊ฐ๋ฅํ์ง๋ง, ๋ณด์์ด ์ทจ์ฝํ๊ณ ๋๊ธฐํ๊ฐ ์ด๋ ต๋ค.
- ์ฃผ๋ก ํด์ ๊ฒ์, ์๊ท๋ชจ ํ๋ ฅ ๊ฒ์์์ ์ฌ์ฉ.
๐ ํด๋ผ์ด์ธํธ-์๋ฒ (Client-Server)
- ์ค์ ์๋ฒ๊ฐ ๋ชจ๋ ๊ฒ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ํด๋ผ์ด์ธํธ๋ ์๋ฒ์๋ง ํต์ .
- ๋ฐ์ดํฐ ์กฐ์(ํต ๋ฐฉ์ง)์ด ์ด๋ ต๊ณ ๋๊ธฐํ๊ฐ ์ฝ์ง๋ง, ์๋ฒ ๋น์ฉ์ด ๋ ๋ค.
- ์ฃผ๋ก FPS, MOBA, MMORPG ๊ฐ์ ์ค์๊ฐ ๊ฒ์์์ ์ฌ์ฉ.
๐ ํ์ด๋ธ๋ฆฌ๋ (P2P + ์๋ฒ)
- ์๋ฒ๊ฐ ํต์ฌ์ ์ธ ์ญํ ์ ํ์ง๋ง, ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ์ฒ๋ฆฌ.
- ์๋ฅผ ๋ค๋ฉด ๋ก๋น๋ P2P, ๊ฒ์์ ์๋ฒ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
2๏ธโฃ ๋คํธ์ํฌ ํต์ ํ๋กํ ์ฝ
๊ฒ์ ๋คํธ์ํฌ์์๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ํน์ ํ ํ๋กํ ์ฝ(ํต์ ๋ฐฉ์)์ ์ฌ์ฉํด์ผ ํ๋ค.

์ด๋ฏธ์ง ์ถ์ฒ : https://velog.io/@devfish/Network-UDP-TCPIP-HTTP
๐ TCP (Transmission Control Protocol)
- ์ ๋ขฐ์ฑ์ด ๋์ ํ๋กํ ์ฝ๋ก, ๋ฐ์ดํฐ๊ฐ ๋ฐ๋์ ์์๋๋ก ๋์ฐฉํด์ผ ํ ๋ ์ฌ์ฉ. (ํจํท ์์ ๋ณด์ฅ)
- ํจํท ์์๋ฅผ ์ ๋ ฌํ๊ณ , ์ ์ค๋ ํจํท์ด ์์ผ๋ฉด ์ฌ์์ฒญ ํ ํจํท์ ๋๊น (ํจํท ์ก์ ๋ณด์ฅ)
- ํ์ง๋ง ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค.
- ์ฃผ๋ก ํด์ ๊ฒ์, ์ฑํ
, ๋ก๋น ์์คํ
๋ฑ์ ์ฌ์ฉ.
- 3Way handshakes (์ฐ๊ฒฐ ์ ๋ฌด ํ์ธ)
๐ UDP (User Datagram Protocol)
- ์๋๊ฐ ๋น ๋ฅธ ํ๋กํ ์ฝ๋ก, ๋ฐ์ดํฐ๊ฐ ์์ ์์ด ๋์ฐฉํ ์๋ ์๊ณ , ์ผ๋ถ ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์๋ ์์.
- ํ์ง๋ง ์ค์๊ฐ ๊ฒ์์์๋ ์๋๊ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์ UDP๋ฅผ ์ฌ์ฉํ๊ณ , ๊ฒ์ ์ฝ๋์์ ์์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ์กํ๋๋ก ์ค๊ณํ๋ค.
- FPS, MOBA, ๋ ์ด์ฑ ๊ฒ์ ๋ฑ์์ ๋ง์ด ์ฌ์ฉ.
3๏ธโฃ ๊ฒ์์์ ๋๊ธฐํ(Synchronization) ๋ฌธ์
๋ฉํฐํ๋ ์ด ๊ฒ์์ ๋ง๋ค ๋ ๊ฒ์ ์ํ๋ฅผ ์ผ๊ด๋๊ฒ ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ค. ํ์ง๋ง, ๋คํธ์ํฌ ์ง์ฐ(Lag)๊ณผ ํจํท ์์ค(Packet Loss) ๋ฑ์ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ๋ค.
๐ ๋ณด๊ฐ(Interpolation) & ์์ธก(Prediction)
- ๋ณด๊ฐ (Interpolation): ์ด์ ์ํ์ ํ์ฌ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ฐ ํ๋ ์์ ์์ธกํ์ฌ ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์
์ ๊ตฌํ.
- ์์ธก (Prediction): ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ ์์ง์์ ์๋ฒ ์๋ต ์์ด๋ ๋ฏธ๋ฆฌ ๊ณ์ฐํ์ฌ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์.
- FPS ๊ฒ์์์ ์บ๋ฆญํฐ๊ฐ ์ฆ์ ๋ฐ์ํ๋๋ก ํด๋ผ์ด์ธํธ์์ ๋จผ์ ์ฒ๋ฆฌํ๊ณ , ๋์ค์ ์๋ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์์ ํ๋ ๋ฐฉ์.
๐ ์ง์ฐ ๋ณด์ (Lag Compensation)
- ๋คํธ์ํฌ ์ง์ฐ์ ๊ณ ๋ คํ์ฌ ์ด๊ธฐ ๋ฐ์ฌ ํ์ ์ ๋ณด์ ํ๋ ๊ธฐ์ .
- FPS ๊ฒ์์์ ๊ณผ๊ฑฐ์ ์บ๋ฆญํฐ ์์น๋ฅผ ์ ์ฅํด๋๊ณ , ์ด์์ด ๋ฐ์ฌ๋ ์์ ์ ์บ๋ฆญํฐ ์์น๋ฅผ ์๋ฒ์์ ํ์ธํ๋ ๋ฐฉ์.
4๏ธโฃ ๋คํธ์ํฌ ๋๊ธฐํ ๊ธฐ๋ฒ
๋ฉํฐํ๋ ์ด ๊ฒ์์์๋ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ธ์ , ์ด๋ป๊ฒ ๋๊ธฐํํ ๊ฒ์ธ์ง ๊ฒฐ์ ํด์ผ ํ๋ค.
๐ ์ํ ๋๊ธฐํ (State Synchronization)
- ๊ฒ์์ ํ์ฌ ์ํ(์์น, ์ฒด๋ ฅ ๋ฑ)๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํ๋ ๋ฐฉ์.
- ์: ํ๋ ์ด์ด ์ขํ๋ฅผ ์๋ฒ์์ ์ฃผ๊ธฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์ ์ก.
๐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋๊ธฐํ (Event-Based Sync)
- ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐฉ์.
- ์: ์ด์ ๋ฐ์ฌํ ๋๋ง ์ด๋ฒคํธ๋ฅผ ๋ณด๋ด๊ณ , ์ด์์ ์์น๋ ํด๋ผ์ด์ธํธ์์ ์์ฒด์ ์ผ๋ก ์ฒ๋ฆฌ.
- ํ๋ ์ด์ด์ ์
๋ ฅ์ ์๋ฒ๋ก ๋ณด๋ด๊ณ , ์๋ฒ๊ฐ ์ด๋ฅผ ๊ฒ์ฆํ ํ ๊ฒ์ ์ํ๋ฅผ ๊ฐฑ์ ํ๋ ๋ฐฉ์.
- ์ฃผ๋ก ๊ฒฉํฌ ๊ฒ์, RTS์์ ์ฌ์ฉ๋จ.
5๏ธโฃ ๊ฒ์ ๋คํธ์ํฌ ์ํคํ
์ฒ
๊ฒ์ ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
๐ ์ ์ฉ ์๋ฒ(Dedicated Server)
- ํ๋์ ์ค์ ์๋ฒ๊ฐ ๋ชจ๋ ๊ฒ์ ๋ก์ง์ ์ฒ๋ฆฌ.
- ๋ณด์์ด ๊ฐํ๊ณ ์์ ์ ์ด์ง๋ง, ์๋ฒ ๋น์ฉ์ด ๋์.
- FPS, MMORPG ๋ฑ ๋ํ ๊ฒ์์์ ์ฌ์ฉ.
๐ ๋ฆฌ์จ ์๋ฒ(Listen Server)
- ํ๋ ์ด์ด ์ค ํ ๋ช
์ด ์๋ฒ ์ญํ ์ ์ํ.
- ์น๊ตฌ๋ค๊ณผ ๊ฐ๋ณ๊ฒ ์ฆ๊ธฐ๋ P2P ๊ฒ์์์ ์ฌ์ฉ.
๐์๋ฒ ์ค๋ฉ(Server Sharding)
- ์ฌ๋ฌ ๊ฐ์ ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ ์ธ์
์ ๋ถํ .
- ์: MMORPG์์ "์๋ฒ 1, ์๋ฒ 2" ๋ฑ์ผ๋ก ๋๋ ์ ์ด์.
6๏ธโฃ ๊ฒ์ ๋คํธ์ํน ๊ตฌํ (C++ & Unreal Engine)
์ธ๋ฆฌ์ผ ์์ง์์๋ ๊ฒ์ ๋คํธ์ํน์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด ๋ง๋ค.
๐ Unreal Engine์ ๊ธฐ๋ณธ ๋คํธ์ํฌ ํด๋์ค

๐ ์ฃผ์ ๋คํธ์ํฌ ๊ธฐ๋ฅ
- Replicated โ ๋ณ์ ์๋ ๋๊ธฐํ
- Server โ ์๋ฒ์์ ์คํ๋๋ ํจ์
- Client โ ํด๋ผ์ด์ธํธ์์ ์คํ๋๋ ํจ์
- NetMulticast โ ๋ชจ๋ ํด๋ผ์ด์ธํธ์ ๋๊ธฐํ๋๋ ํจ์
๐ cpp
UFUNCTION(Server, Reliable)
void ServerDoSomething();
UFUNCTION(NetMulticast, Reliable)
void NetMulticastDoSomething();
7๏ธโฃ ๋คํธ์ํฌ ์ต์ ํ (Latency, Bandwidth)
๋คํธ์ํฌ ์ต์ ํ๋ ๊ฒ์ ์ฑ๋ฅ์ ๋์ด๋ ๋ฐ ์ค์ํ ์์.
๐ Bandwidth ์ต์ ํ (๋ฐ์ดํฐ ์ ์ก๋ ์ค์ด๊ธฐ)
- ์์ถ(Compression): ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ฉ์ ์์ถ, ํ๋กํ ์ฝ ์์ถ ์ฌ์ฉ.
- ๋ฐ์ดํฐ ์ ์ก๋ ์ค์ด๊ธฐ: ๋ถํ์ํ ์ ๋ณด๋ฅผ ๋ณด๋ด์ง ์๊ณ , ์ค์ํ ์ ๋ณด๋ง ์ ์ก.
๐ ํจํท ์์ค ์ฒ๋ฆฌ
- ํจํท ์ฌ์ ์ก: UDP๋ฅผ ์ฌ์ฉํ๋ฉด์ ํจํท ์์ค์ด ๋ฐ์ํ๋ฉด ํน์ ํจํท๋ง ๋ค์ ์ ์ก.
- ๋ณด์ ์๊ณ ๋ฆฌ์ฆ: ์์ค๋ ๋ฐ์ดํฐ๋ ์์ธกํ์ฌ ๋ณด์ .
๐ฎ ์ ๋ฆฌ
โ
์๋ฒ-ํด๋ผ์ด์ธํธ ๋ชจ๋ธ์ ์ ํํด์ผ ํจ. (P2P vs. Dedicated Server)
โ
TCP๋ ์ ๋ขฐ์ฑ, UDP๋ ์๋! (FPS ๊ฒ์์ UDP)
โ
๋คํธ์ํฌ ์ง์ฐ์ ๊ณ ๋ คํ ๋ณด๊ฐ, ์์ธก, ์ง์ฐ ๋ณด์ ๊ธฐ์ ํ์
โ
์ํ ๋๊ธฐํ / ์ด๋ฒคํธ ๋๊ธฐํ / ์
๋ ฅ ๋๊ธฐํ ์ค ์ ์ ํ ๋ฐฉ์ ์ ํ
โ
Unreal Engine์์๋ Replicated, Server, NetMulticast ๋ฑ์ ํ์ฉ
ํ์ฐฝ๋์ ์ญ์ ์ ๋ฆฌ๊ฐ ์ ๋์ด์์ ๊ฒ ๊ฐ์์ ์ ๋ณด๊ณ ๊ฐ๋๋ค~