๐ŸŽฏ ๊ฒŒ์ž„ ๋„คํŠธ์›Œํ‚น์€ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด ๊ฒŒ์ž„์„ ๋งŒ๋“ค ๋•Œ ํ•„์ˆ˜์ ์œผ๋กœ ์•Œ์•„์•ผ ํ•  ์š”์†Œ์ด๋‹ค. ๋„คํŠธ์›Œํ‚น ์—†์ด ์‹ฑ๊ธ€ํ”Œ๋ ˆ์ด ๊ฒŒ์ž„์„ ๋งŒ๋“ ๋‹ค๋ฉด, ๋ชจ๋“  ๊ฒŒ์ž„ ๋กœ์ง์ด ๋กœ์ปฌ(ํด๋ผ์ด์–ธํŠธ)์—์„œ๋งŒ ๋™์ž‘ํ•˜๋ฉด ๋˜์ง€๋งŒ, ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์—์„œ๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”.

๐ŸŽฎ 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)

  • ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ๋•Œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹.
  • ์˜ˆ: ์ด์„ ๋ฐœ์‚ฌํ•  ๋•Œ๋งŒ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด๊ณ , ์ด์•Œ์˜ ์œ„์น˜๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž์ฒด์ ์œผ๋กœ ์ฒ˜๋ฆฌ.

๐Ÿ“Œ ์ž…๋ ฅ ๋™๊ธฐํ™” (Input Synchronization)

  • ํ”Œ๋ ˆ์ด์–ด์˜ ์ž…๋ ฅ์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๊ฐ€ ์ด๋ฅผ ๊ฒ€์ฆํ•œ ํ›„ ๊ฒŒ์ž„ ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ์‹.
  • ์ฃผ๋กœ ๊ฒฉํˆฌ ๊ฒŒ์ž„, 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 ๋“ฑ์„ ํ™œ์šฉ

profile
Unreal 1๊ธฐ

2๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2025๋…„ 3์›” 13์ผ

ํ˜œ์ฐฝ๋‹˜์€ ์—ญ์‹œ ์ •๋ฆฌ๊ฐ€ ์ž˜ ๋˜์–ด์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ ์ž˜ ๋ณด๊ณ  ๊ฐ‘๋‹ˆ๋‹ค~

1๊ฐœ์˜ ๋‹ต๊ธ€