Introduction & Recap

์ฃผ์ƒ๋ˆยท2025๋…„ 3์›” 28์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
45/53
post-thumbnail

Server-Client ๋ชจ๋ธ๊ณผ ์ธ์Šคํ„ด์Šค ์‹คํ–‰ ๋ชจ๋“œ


๐Ÿ“š Server-Client ๋ชจ๋ธ

Unreal Engine์€ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„์—์„œ Server-Client ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ด๋Š” Server๋กœ ์ •์˜๋œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฒŒ์ž„์˜ ์ƒํƒœ์— ๋Œ€ํ•œ Authority์„ ๊ฐ€์ง€๋ฉฐ, ๋‹ค๋ฅธ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋Š” Server๋กœ๋ถ€ํ„ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›๋Š” Client ์ž„์„ ์˜๋ฏธํ•œ๋‹ค.

Client๋“ค๋ผ๋ฆฌ๋Š” ์ง์ ‘ ํ†ต์‹ ํ•˜์ง€ ์•Š๊ณ , Client๊ฐ€ ์ทจํ•˜๋Š” ๋ชจ๋“  ํ–‰๋™(e.g. ์บ๋ฆญํ„ฐ ์ด๋™, ๋ฐœ์‚ฌ ๋“ฑ)์€ ๋จผ์ € Server๋กœ ์ „์†ก๋˜๊ณ , Server๊ฐ€ ์ด๋ฅผ ๊ฒ€์ฆํ•œ ํ›„ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ Client๋“ค์—๊ฒŒ Broadcast ํ•œ๋‹ค.

Server๋Š” ๊ฒŒ์ž„์˜ ์ง„์ •ํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ๋ชจ๋“  ์ตœ์ข… ๊ฒฐ์ •์„ ๋‚ด๋ฆฐ๋‹ค.
์ด๋Ÿฐ ๋ชจ๋ธ์„ ์œ ์ง€ํ•˜๋Š” ํ•ต์‹ฌ ์ด์œ ๋Š” ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  Cheat๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋ฉฐ,
โ€œNever Trust the Clientโ€๋ผ๋Š” ๋ณดํŽธ์ ์ธ ์›์น™์œผ๋กœ ์š”์•ฝ๋œ๋‹ค.

!
๐Ÿ“šUnreal Engine์—์„œ๋Š” ์ด๋Ÿฌํ•œ Server-Client ๊ตฌ์กฐ์™€ ๊ด€๋ จํ•˜์—ฌ ์—ฌ๋Ÿฌ ์‹คํ–‰ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ์ด๋ฅผ ์ •ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ๋ชจ๋“œ์ •์˜ํŠน์ง•
Standalone๋„คํŠธ์›Œํ‚น์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ๋‹จ์ผ ์ธ์Šคํ„ด์Šคโ€ข ์‹ฑ๊ธ€ ํ”Œ๋ ˆ์ด์–ด (Local ์„ธ์…˜)
โ€ข ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค์— Replicate ํ•˜์ง€ ์•Š์Œ
โ€ข ๋ชจ๋“  Gameplay ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰
Dedicated ServerServer ์ „์šฉ ์ธ์Šคํ„ด์Šคโ€ข Local ํ”Œ๋ ˆ์ด์–ด ์—†์Œ
โ€ข ๋ Œ๋”๋ง ํ•˜์ง€ ์•Š์Œ (GPU ์—†์ด ๊ตฌ๋™ ๊ฐ€๋Šฅ)
โ€ข ๊ฒŒ์ž„ ๋กœ์ง๊ณผ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ๋งŒ ์ฒ˜๋ฆฌ
โ€ข ์›๊ฒฉ ๋จธ์‹ ์ด๋‚˜ ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌ
Listen Serverํ•œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋™์‹œ์— Server ํ˜ธ์ŠคํŠธ ์—ญํ• โ€ข Server์ด์ž Client ์—ญํ•  ์ˆ˜ํ–‰
โ€ข ํ˜ธ์ŠคํŠธ์—๊ฒŒ UI์™€ PlayerController ์กด์žฌ
โ€ข ํ˜ธ์ŠคํŠธ๊ฐ€ ๋‚˜๊ฐ€๋ฉด Server๋„ ์ข…๋ฃŒ
โ€ข P2P ์Šคํƒ€์ผ ๊ฒŒ์ž„์— ๋งŽ์ด ์‚ฌ์šฉ
Clientํ˜ธ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ดโ€ข Server๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ํ‘œ์‹œ
โ€ข ์ž์‹ ์˜ ์ž…๋ ฅ์„ Server์— ์ „์†ก
โ€ข ์ž์œจ์  (autonomous) ํ”Œ๋ ˆ์ด์–ด ์ปจํŠธ๋กค๋Ÿฌ ๋ณด์œ 
โ€ข ๊ถŒํ•œ ์žˆ๋Š” ๊ฒฐ์ •๊ณผ ๊ฒŒ์ž„ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋Š” Server์— ์˜์กด

Gameplay Framework


๐Ÿ“š Gameplay Framework

Unreal์˜ Gameplay Framework๋Š” ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„์—์„œ ๊ฐ Class๊ฐ€ ์–ด๋–ค ์ธ์Šคํ„ด์Šค(Server/Client)์— ์กด์žฌํ•˜๋Š”์ง€ ์ •์˜ํ•œ๋‹ค.

!์—…๋กœ๋“œ์ค‘..

ํด๋ž˜์Šค์กด์žฌ ์œ„์น˜์—ญํ• 
GameModeServer๊ฒŒ์ž„ ๊ทœ์น™ ์ œ์–ด
GameStateServer์™€ ๋ชจ๋“  Client๊ฒŒ์ž„์˜ ์ „์ฒด์ ์ธ ์ •๋ณด(e.g. ์ ์ˆ˜, ์‹œ๊ฐ„) ๋™๊ธฐํ™”
PlayerControllerServer์™€์ž์‹ ์„ ์†Œ์œ ํ•œ Client๊ฐ ํ”Œ๋ ˆ์ด์–ด์˜ ์ž…๋ ฅ์€ ์ž๊ธฐ Client์™€ Server์—๋งŒ ์•Œ ์ˆ˜ ์žˆ์Œ
PawnServer์™€ ๋ชจ๋“  Client๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ž์‹  ์™ธ์˜ Pawn๋„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก Server์— Replicate

๐Ÿ’ก Server-Client ์ƒํ˜ธ์ž‘์šฉ

์ด๋Ÿฌํ•œ ์—ญํ•  ๋ถ„๋‹ด์„ ํ†ตํ•ด Server๊ฐ€ Gameplay์— ๊ด€๋ จ๋œ ๊ฒฐ์ •์— ๋…์ ์ ์ธ ๊ถŒํ•œ์„ ๊ฐ–๊ณ , Client๋Š” ๊ทธ์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉฐ ์ž…๋ ฅ์„ Server์— ๋ณด๋‚ด๋Š” ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํžˆ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Client์—์„œ Pawn์„ ์ด๋™ํ•  ๋•Œ, ์ž…๋ ฅ ์ฆ‰์‹œ Pawn์˜ ์›€์ง์ž„์„ ์˜ˆ์ธก ํ›„ ๋ฐ˜์˜ํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋™์‹œ์— ์ด๋™ ์š”์ฒญ์„ Server๋กœ ๋ณด๋‚ธ๋‹ค

Server๋Š” ๊ทธ ์š”์ฒญ์„ ๋ฐ›์•„ ๊ถŒํ•œ ์žˆ๋Š” ์œ„์น˜์—์„œ ์บ๋ฆญํ„ฐ๋ฅผ ์›€์ง์ด๊ณ , ๊ทธ ์ƒˆ๋กœ์šด ์œ„์น˜/์ƒํƒœ๋ฅผ ๋ชจ๋“  Client์—๊ฒŒ Broadcast ํ•œ๋‹ค. (Client ์ž์‹ ๋„ ํฌํ•จ)

๋งŒ์•ฝ Client์˜ ์ž์ฒด์ ์ธ ์˜ˆ์ธก์ด ์ •ํ™•ํ–ˆ๋‹ค๋ฉด, ์ˆ˜์ •ํ•  ๊ฒƒ์ด ์—†์œผ๋‹ˆ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ํ”Œ๋ ˆ์ด๋ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์ฐจ์ด๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด, Server์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋‹น์‹  ์บ๋ฆญํ„ฐ์˜ ์œ„์น˜๋ฅผ ์กฐ์ •ํ•  ๊ฒƒ์ด๋‹ค. (์ด ์กฐ์ • ๊ณผ์ •์€ ๋‚˜์ค‘์— ๋‹ค๋ฃฐ โ€œ๋ณด์ •(Reconciliation)โ€์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค).

ํ•ต์‹ฌ์€ ํ•ญ์ƒ Server์˜ ์ƒํƒœ๊ฐ€ ์ตœ์ข…์œผ๋กœ ์‹ ๋ขฐํ•˜๋Š” ๊ฐ’์ด๋ผ๋Š” ๊ฒƒ.

Replication๊ณผ RPC์˜ ์ฐจ์ด


๐Ÿ“š Unreal Engine ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ํ†ต์‹ 

Unreal์—์„œ Server-Client ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด Replication๊ณผ RPC(Remote Procedure Call)์ž…๋‹ˆ๋‹ค. ์ด๋“ค์€ ๋ชฉ์ ๊ณผ ๋™์ž‘์ด ๋‹ค๋ฅด๋ฏ€๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.

1๏ธโƒฃ Replication

Replication์€ Server์—์„œ Client๋กœ ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ์ž๋™ ๋™๊ธฐํ™”ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ.
์–ด๋–ค Property๋‚˜ Actor๋ฅผ Replicates = true๋กœ ์„ค์ •ํ•˜๋ฉด, Engine์˜ ๋„คํŠธ์›Œํ‚น ์‹œ์Šคํ…œ์ด ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ จ๋œ Client๋“ค์—๊ฒŒ ๋ณด๋‚ธ๋‹ค.
๋ณ„๋„๋กœ ์ฝ”๋“œ๋ฅผ ์“ฐ์ง€ ์•Š์•„๋„ Engine์ด ์ง€์†์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๋งž์ถฐ์ฃผ๋Š” ๊ฒƒ.
์ด๋Š” ์บ๋ฆญํ„ฐ์˜ ์œ„์น˜, ์ฒด๋ ฅ, ๋ฌธ์ด ์—ด๋ ธ๋Š”์ง€/๋‹ซํ˜”๋Š”์ง€ ๋“ฑ ๊ณ„์† ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š”๋ฐ ์ ํ•ฉ.

๐Ÿ’ก ์ค‘์š”: Replication์€ ๋‹จ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค. Server -> Client๋กœ๋งŒ ๊ฐ„๋‹ค.
Client์—์„œ Server๋กœ Property๋ฅผ Replicate ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. Client๊ฐ€ ์–ด๋–ค ๊ถŒํ•œ ์žˆ๋Š” ์ •๋ณด๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด, ์ง์ ‘ ๋ฐ”๊พธ๋Š” ๋Œ€์‹  Server์— ์š”์ฒญ์„ ํ•ด์•ผ ํ•œ๋‹ค(e.g. RPC).
๋˜ํ•œ Replication์€ ๋ณดํ†ต State ๊ธฐ๋ฐ˜์ด์–ด์„œ, Property์˜ ํ˜„์žฌ ๊ฐ’์„ ๋ณด๋‚ด์ง€ โ€œ๋ณ€๊ฒฝ Eventโ€ ์ž์ฒด๋ฅผ ๋ณด๋‚ด์ง€๋Š” ์•Š๋Š”๋‹ค (๋‹ค๋งŒ RepNotify ๋“ฑ์„ ํ†ตํ•ด ๊ฐ’ ๋ณ€๊ฒฝ ์‹œ์ ์„ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค).

2๏ธโƒฃ RPC (Remote Procedure Call)

RPC (Remote Procedure Call)๋Š” ์›๊ฒฉ ๋จธ์‹ ์—์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ช…์‹œ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค.
Unreal์—์„œ RPC๋Š” UFUNCTION์— Server, Client, NetMulticast ๊ฐ™์€ ์ง€์ •์ž๋ฅผ ๋ถ™์—ฌ ๋งŒ๋“ค๋ฉฐ, ์ด๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์„ค์ •๋œ ๋Œ€์ƒ(Server ๋˜๋Š” Client๋“ค)์—์„œ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, Client์—์„œ โ€œFireWeaponโ€์ด๋ผ๋Š” Server RPC๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ๊ทธ ํ•จ์ˆ˜๊ฐ€ Server ์ธก์—์„œ ์‹คํ–‰๋˜์–ด ์ด์•Œ ๋ฐœ์‚ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. Replication์ด ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด, RPC๋Š” ํŠน์ • ์ˆœ๊ฐ„์— ์‹คํ–‰๋˜๋Š” ๋™์ž‘/Event๋ฅผ ์›๊ฒฉ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ.

๐Ÿ“š ์ฃผ์š” ์ฐจ์ด ๋ฐ ํ™œ์šฉ ์ƒํ™ฉ

๐Ÿ“Œ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ฐฉํ–ฅ

  • Replication์€ Server โ†’ Client ๋‹จ๋ฐฉํ–ฅ ์ž๋™ ๋™๊ธฐํ™”
  • RPC๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋ฐฉํ–ฅ ์ง€์ • ๊ฐ€๋Šฅ
RPC ์ข…๋ฅ˜ํ˜ธ์ถœ ๋ฐฉํ–ฅ์‹คํ–‰ ์œ„์น˜์ฃผ์š” ์šฉ๋„
Server RPCClient โ†’ ServerServer๋ฌธ ์—ด๊ธฐ, ์•„์ดํ…œ ์Šต๋“ ๋“ฑ ์œ ์ € ์š”์ฒญ ์ „๋‹ฌ
Client RPCServer โ†’ ClientํŠน์ • Client(Actor Owner)UI ์—…๋ฐ์ดํŠธ, ์•Œ๋ฆผ ๋“ฑ ๊ฐœ์ธํ™”๋œ ํ”ผ๋“œ๋ฐฑ ์ „๋‹ฌ
Multicast RPCServer โ†’ ๋ชจ๋“  Client๋ชจ๋“  Client ๋ฐ Server(Optional)์‹œ๊ฐํšจ๊ณผ, ์†Œ๋ฆฌ ๋“ฑ ๋™์‹œ multicast

๐Ÿ“Œ State vs Event
์ผ๋ฐ˜์ ์œผ๋ก  ์ง€์†์ ์ธ ์ƒํƒœ์˜ ๋™๊ธฐํ™”์—๋Š” Replication๋œ Property๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ผํšŒ์„ฑ Event์™€ ๊ฐ™์„ ๋•Œ RPC๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด FPS ๊ฒŒ์ž„์—์„œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ด์•Œ ๊ฐฏ์ˆ˜๋Š” (๊ณ„์† ๋ณ€ํ•  ์ˆ˜ ์žˆ๊ณ  ํ˜„์žฌ ๊ฐ’์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ์ •๋ณด)์€ Replicated Property๋กœ ๋งŒ๋“ค๊ณ , ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด์„ ์ˆ๋‹ค๋Š” ํ–‰์œ„๋Š” RPC๋กœ Server์— ๋ณด๋‚ด๋Š” ์‹์ด๋‹ค.

๐Ÿ“Œ Automatic vs Manual
Replication์€ Unreal Engine์ด ์•Œ์•„์„œ (ํ”„๋ ˆ์ž„๋งˆ๋‹ค ํ˜น์€ ํ•„์š”ํ•œ ์‹œ์ ๋งˆ๋‹ค) ๊ฐ’์„ ๋ณด๋‚ด์ฃผ๋ฉฐ ๋‚ด๋ถ€์ ์œผ๋กœ ์ตœ์ ํ™”๋œ๋‹ค.

RPC๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•œ ์ˆœ๊ฐ„์— ์ง์ ‘ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๊ณ , ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๋„คํŠธ์›Œํฌ Packet์„ ์ƒ์„ฑํ•œ๋‹ค .

๐Ÿ“Œ ์ˆœ์„œ์™€ Reliability

์—ฌ๋Ÿฌ ๋ณ€์ˆ˜์˜ Replication์€ ํ•œ ๋ฒˆ์— ๋ญ‰์ณ์„œ ๋ณด๋‚ด์ง€๊ณ , ํŠน์ • ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

RPC๋Š” Reliable๋กœ ๋ณด๋‚ผ์ง€ Unreliable๋กœ ๋ณด๋‚ผ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ฐ™์€ ์ข…๋ฅ˜์˜ RPC๋“ค๋ผ๋ฆฌ๋Š” ํ˜ธ์ถœ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋œ๋‹ค. (์ด ๋ถ€๋ถ„์€ ๋’ค์—์„œ ๋” ์ž์„ธํžˆ ๋‹ค๋ฃน๋‹ˆ๋‹ค.)

โ— Replication vs RPC ๊ฐœ๋… ์ •๋ฆฌ

๊ฐ„๋‹จํžˆ ๋น„์œ ํ•˜์ž๋ฉด,

โœ” Replication = ๊ฐ’ ๋™๊ธฐํ™”

โœ” RPC = ์›๊ฒฉ ํ•จ์ˆ˜ ํ˜ธ์ถœ

์ด ๋‘˜์€ ์–‘์žํƒ์ผ์ด ์•„๋‹ˆ๋ผ ํ•„์š”์— ๋”ฐ๋ผ ๋ณ‘ํ–‰ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, Client๊ฐ€ Server RPC๋กœ โ€œ์ด ๋ฌธ์„ ์—ด๊ณ  ์‹ถ์–ด์š”โ€๋ผ๊ณ  ์•Œ๋ฆฌ๋ฉด (Event ์ „๋‹ฌ), Server๋Š” ๋ฌธ์„ ์—ฌ๋Š” ๊ถŒํ•œ์ด ์žˆ์œผ๋‹ˆ ๋ฌธ์˜ State์— ๋Œ€ํ•œ Property๋ฅผ Open์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ๊ทธ Property๋ฅผ Replicationํ•˜์—ฌ ๋ชจ๋“  Client์—๊ฒŒ ์•Œ๋ฆฐ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ช…์‹ฌํ•ด์•ผ ๋  ๊ฒƒ์€ Client๋Š” Server์˜ Replicated Variable์„ ์ง์ ‘ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค
Client๊ฐ€ Local ํ™˜๊ฒฝ์—์„œ Replicated Varialbe์˜ ๊ฐ’์„ ๋ฐ”๊ฟ”๋ด์•ผ ๊ทธ๊ฒƒ์€ ์ž๊ธฐ ํ™”๋ฉด์—๋งŒ ์ผ์‹œ์ ์œผ๋กœ ๋ฐ”๋€” ๋ฟ, Server๋‚˜ ๋‹ค๋ฅธ Client์— ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š”. ๊ทธ์— ๋Œ€ํ•ด์„œ ๋ฐ˜๋“œ์‹œ Server์— ๋ณ€๊ฒฝ์„ ์š”์ฒญํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๊ฒƒ์„ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์˜ Golden Rule์ด.

์ •๋ฆฌํ•˜์ž๋ฉด Client์—์„œ Server๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ Server RPC (Run on Server) ๋ฟ์ด๋ฉฐ,
๋ชจ๋“  Client์™€ Server์— ๋ฐ˜์˜๋˜์–ด์•ผ ํ•  ๊ฒŒ์ž„ ์ƒํƒœ ๋ณ€๊ฒฝ์€ Server์—์„œ๋งŒ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค
Client๋Š” Server์— ์š”์ฒญํ•˜๊ฑฐ๋‚˜, ์ผ์‹œ์ ์œผ๋กœ ์ž๊ธฐ ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ค„ ๋‚ด์šฉ์„ ์˜ˆ์ธก๋งŒ ํ•ด์•ผํ•œ๋‹ค

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