๋„คํŠธ์›Œํฌ ์ง€์—ฐ ๋ณด์ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ฐ”์ผ ์ŠˆํŒ… ๊ฒŒ์ž„์˜ ํƒ„๋„ ๊ณ„์‚ฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฐ•ํ™”ํ•œ ๋ฐฉ๋ฒ•

๋„คํŠธ์›Œํฌ ์ง€์—ฐ ๋ณด์ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ฐ”์ผ ์ŠˆํŒ… ๊ฒŒ์ž„์˜ ํƒ„๋„ ๊ณ„์‚ฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฐ•ํ™”ํ•œ ๋ฐฉ๋ฒ•

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” Pixonic์˜ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž Nikita Brizhak์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ๋ชจ๋ฐ”์ผ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด์˜ ์ง€์—ฐ ๋ณด์ƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ง€์—ฐ ๋ณด์ƒ์— ๋Œ€ํ•œ ๊ธฐ์‚ฌ๋Š” ๋Ÿฌ์‹œ์•„์–ด๋ฅผ ํฌํ•จํ•˜์—ฌ ๋งŽ์ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋†€๋ผ์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ ์€ 90๋…„๋Œ€ ํ›„๋ฐ˜๋ถ€ํ„ฐ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด FPS ์ œ์ž‘์— ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด ์™”๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๋„์ž…ํ•œ ๋ชจ๋“œ ์ค‘ ํ•˜๋‚˜์ธ QuakeWorld ๋ชจ๋“œ๋ฅผ ๋– ์˜ฌ๋ ค ๋ณด์„ธ์š”.

๋ชจ๋ฐ”์ผ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ์ŠˆํŒ… ๊ฒŒ์ž„์ธ Dino Squad์—์„œ๋„ ์ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ ์ œ๊ฐ€ ๋งํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์€ ์ด๋ฏธ ์ฒœ ๋ฒˆ์ด๋‚˜ ์“ฐ์—ฌ์ง„ ๋‚ด์šฉ์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ธฐ์ˆ  ์Šคํƒ๊ณผ ํ•ต์‹ฌ ๊ฒŒ์ž„ํ”Œ๋ ˆ์ด์˜ ํŠน์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ๊ฒŒ์ž„์— ์ง€์—ฐ ๋ณด์ƒ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ์„ค๋ช…ํ•˜๋ ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹น์‚ฌ์˜ ํ•ต์‹ฌ๊ณผ ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹ค์ด๋…ธ ์Šค์ฟผ๋“œ๋Š” ์˜จ๋ผ์ธ ๋ชจ๋ฐ”์ผ PvP ์ŠˆํŒ… ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด์–ด๋Š” ๋‹ค์–‘ํ•œ ๋ฌด๊ธฐ๋ฅผ ์žฅ์ฐฉํ•œ ๊ณต๋ฃก์„ ์กฐ์ข…ํ•˜๊ณ  6๋Œ€ 6 ํŒ€์œผ๋กœ ์ „ํˆฌ๋ฅผ ๋ฒŒ์ž…๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๋ชจ๋‘ Unity์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์•„ํ‚คํ…์ฒ˜๋Š” ์ŠˆํŒ… ๊ฒŒ์ž„์˜ ์ „ํ˜•์ ์ธ ์˜ˆ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๊ถŒ์œ„์ ์ด๊ณ  ํด๋ผ์ด์–ธํŠธ ์˜ˆ์ธก์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ์ž์ฒด ECS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ง€์—ฐ ๋ณด์ƒ์— ๋Œ€ํ•ด ์ฒ˜์Œ ๋“ค์–ด๋ณด์…จ๋‹ค๋ฉด, ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์†Œ๊ฐœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด FPS ๊ฒŒ์ž„์—์„œ ๊ฒฝ๊ธฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์›๊ฒฉ ์„œ๋ฒ„์—์„œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜๋ฉ๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด์–ด๋Š” ์ž…๋ ฅ ๋‚ด์šฉ(๋ˆŒ๋Ÿฌ์ง„ ํ‚ค์— ๋Œ€ํ•œ ์ •๋ณด)์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๋Š” ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ˆ˜์‹ ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋œ ๊ฒŒ์ž„ ์ƒํƒœ๋ฅผ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ˜ธ์ž‘์šฉ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ž์œผ๋กœ ํ‚ค๋ฅผ ๋ˆ„๋ฅธ ์ˆœ๊ฐ„๊ณผ ํ”Œ๋ ˆ์ด์–ด์˜ ์บ๋ฆญํ„ฐ๊ฐ€ ํ™”๋ฉด์—์„œ ์›€์ง์ด๋Š” ์ˆœ๊ฐ„ ์‚ฌ์ด์˜ ์ง€์—ฐ ์‹œ๊ฐ„์ด ํ•ญ์ƒ ํ•‘๋ณด๋‹ค ์ปค์ง‘๋‹ˆ๋‹ค.

๋กœ์ปฌ ๋„คํŠธ์›Œํฌ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ง€์—ฐ(์ผ๋ฐ˜์ ์œผ๋กœ ์ž…๋ ฅ ์ง€์—ฐ์ด๋ผ๊ณ  ํ•จ)์ด ๋ˆˆ์— ๋„์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ธํ„ฐ๋„ท์œผ๋กœ ํ”Œ๋ ˆ์ดํ•  ๊ฒฝ์šฐ ์บ๋ฆญํ„ฐ๋ฅผ ์กฐ์ข…ํ•  ๋•Œ "์–ผ์Œ ์œ„๋ฅผ ๋ฏธ๋„๋Ÿฌ์ง€๋Š”" ๋“ฏํ•œ ๋А๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋ชจ๋ฐ”์ผ ๋„คํŠธ์›Œํฌ์—์„œ ํŠนํžˆ ์ค‘์š”ํ•œ๋ฐ, ํ”Œ๋ ˆ์ด์–ด์˜ ping์ด 200ms๋ผ๋„ ์—ฌ์ „ํžˆ ์šฐ์ˆ˜ํ•œ ์—ฐ๊ฒฐ๋กœ ๊ฐ„์ฃผ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ping์€ ๋Œ€๊ฐœ 350, 500, 1000ms์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ž…๋ ฅ ์ง€์—ฐ์œผ๋กœ ์ธํ•ด ๋น ๋ฅธ ์ŠˆํŒ… ๊ฒŒ์ž„์„ ํ•˜๋Š” ๊ฒŒ ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ํด๋ผ์ด์–ธํŠธ ์ธก ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์˜ˆ์ธก์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ํ”Œ๋ ˆ์ด์–ด์˜ ์บ๋ฆญํ„ฐ์— ์ž…๋ ฅ์„ ์ง์ ‘ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ต๋ณ€์„ ๋ฐ›์œผ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์ƒ๋Œ€๋ฐฉ์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ‚ค๋ฅผ ๋ˆ„๋ฅธ ํ›„ ํ™”๋ฉด์— ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋  ๋•Œ๊นŒ์ง€์˜ ์ง€์—ฐ์€ ์ตœ์†Œํ™”๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ญ์ƒ ๋งˆ์ง€๋ง‰ ์ž…๋ ฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์‹ ์„ ๊ทธ๋ฆฌ๊ณ , ์ ๊ตฐ์€ ๋„คํŠธ์›Œํฌ ์ง€์—ฐ์„ ์ ์šฉํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ์˜ ์ด์ „ ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. ์ฆ‰, ์ ์„ ๊ณต๊ฒฉํ•  ๋•Œ ํ”Œ๋ ˆ์ด์–ด๋Š” ์ž์‹ ๊ณผ ์ƒ๋Œ€์ ์ธ ๊ณผ๊ฑฐ๋ฅผ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์˜ˆ์ธก์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ ์šฐ๋ฆฌ๋Š” ์ด์ „์— ์ผ๋‹ค.

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

์ด๋Ÿฌํ•œ ์ง€์‹์„ ๋ฐ”ํƒ•์œผ๋กœ ์šฐ๋ฆฌ๋Š” Dino Squad์— ์„œ๋ฒ„ ์ธก ์ง€์—ฐ ๋ณด์ƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณธ ๋‚ด์šฉ์„ ์„œ๋ฒ„์— ๋ณต์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ๋ณต์›ํ•ด์•ผ ํ• ๊นŒ์š”? ์šฐ๋ฆฌ ๊ฒŒ์ž„์—์„œ๋Š” ๋ฌด๊ธฐ์™€ ๋Šฅ๋ ฅ์˜ ์ ์ค‘๋ฅ ์ด ๋ ˆ์ด์บ์ŠคํŠธ์™€ ์˜ค๋ฒ„๋žฉ์„ ํ†ตํ•ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ ์˜ ๋ฌผ๋ฆฌ์  ์ถฉ๋Œ์ฒด์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ†ตํ•ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋กœ์ปฌ์—์„œ "๋ณธ" ์ด๋Ÿฌํ•œ ์ถฉ๋Œ์ฒด์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์„œ๋ฒ„์—์„œ ์žฌํ˜„ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹œ ์šฐ๋ฆฌ๋Š” Unity 2018.x ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ณณ์˜ ๋ฌผ๋ฆฌ API๋Š” ์ •์ ์ด๊ณ , ๋ฌผ๋ฆฌ์  ์„ธ๊ณ„๋Š” ๋‹จ์ผ ์‚ฌ๋ณธ์œผ๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์ƒ์ž์—์„œ ๋ณต์›ํ•˜๊ธฐ ์œ„ํ•ด ์ƒํƒœ๋ฅผ ์ €์žฅํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

ํ•ด๊ฒฐ์ฑ…์€ ๋ช…ํ™•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์š”์†Œ๋Š” ์ด๋ฏธ ์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ฐ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•ด ํ‚ค๋ฅผ ๋ˆ„๋ฅผ ๋•Œ ์ƒ๋Œ€๋ฐฉ์„ ๋ณธ ์‹œ๊ฐ„์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ด ์ •๋ณด๋ฅผ ์ž…๋ ฅ ํŒจํ‚ค์ง€์— ๊ธฐ๋กํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์˜ˆ์ธก ์ž‘์—…์„ ์กฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ๊ฒŒ์ž„ ์ƒํƒœ์˜ ๊ธฐ๋ก์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ณณ์€ ์šฐ๋ฆฌ๊ฐ€ ์ƒ๋Œ€๋ฐฉ(๊ทธ๋ฆฌ๊ณ  ์ถฉ๋Œ์ž)์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹๊ณ ์ˆ˜ํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์„œ๋ฒ„์— ์ƒํƒœ ๊ธฐ๋ก์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๊ณ  ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ธํƒ€. ์˜ฌ๋ฐ”๋ฅธ ์‹œ๊ธฐ๋ฅผ ์•Œ๋ฉด ์—ญ์‚ฌ์ƒ ์˜ฌ๋ฐ”๋ฅธ ์ƒํƒœ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  3. ์ด์ œ ์šฐ๋ฆฌ๋Š” ๊ณผ๊ฑฐ๋กœ๋ถ€ํ„ฐ ๊ฒŒ์ž„ ์ƒํƒœ๋ฅผ ์†์— ๋„ฃ์—ˆ์œผ๋ฏ€๋กœ ํ”Œ๋ ˆ์ด์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์  ์„ธ๊ณ„์˜ ์ƒํƒœ์™€ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์ถฉ๋Œ์ฒด๋Š” ์˜ฎ๊ฒจ์•ผ ํ•˜๊ณ , ์—†๋Š” ์ถฉ๋Œ์ฒด๋Š” ๋งŒ๋“ค์–ด์•ผ ํ•˜๋ฉฐ, ๋ถˆํ•„์š”ํ•œ ์ถฉ๋Œ์ฒด๋Š” ํŒŒ๊ดดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ด ๋…ผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด ๋‘์—ˆ๊ณ , ์ด๋Š” ์—ฌ๋Ÿฌ ECS ์‹œ์Šคํ…œ์œผ๋กœ ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฒŒ์ž„๋ฃธ์„ ํ•˜๋‚˜์˜ Unity ํ”„๋กœ์„ธ์Šค๋กœ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์„ธ์Šค๋‹น ๋ฌผ๋ฆฌ์  โ€‹โ€‹์„ธ๊ณ„๊ฐ€ ํ•˜๋‚˜๋ฟ์ด๋ฏ€๋กœ ๋ฐฉ ์‚ฌ์ด์—์„œ ์žฌ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ‹ฑ ์ „์— ์šฐ๋ฆฌ๋Š” ๋ฌผ๋ฆฌ ์„ธ๊ณ„์˜ ์ƒํƒœ๋ฅผ "์žฌ์„ค์ •"ํ•˜๊ณ  ํ˜„์žฌ ๋ฐฉ์˜ ๋ฐ์ดํ„ฐ๋กœ ๋‹ค์‹œ ์ดˆ๊ธฐํ™”ํ–ˆ์œผ๋ฉฐ, ๋˜‘๋˜‘ํ•œ ํ’€๋ง ์‹œ์Šคํ…œ์„ ํ†ตํ•ด Unity์˜ ๊ฒŒ์ž„ ๊ฐ์ฒด๋ฅผ ์ตœ๋Œ€ํ•œ ์žฌ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚จ์€ ๊ฒƒ์€ ๊ณผ๊ฑฐ์˜ ๊ฒŒ์ž„ ์ƒํƒœ์— ๋Œ€ํ•ด ๋™์ผํ•œ ๋…ผ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋ฟ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ์š”์†Œ๋ฅผ โ€‹โ€‹ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋ฉด, ์šฐ๋ฆฌ๋Š” ๋ฌผ๋ฆฌ์  ์„ธ๊ณ„์˜ ์ƒํƒœ๋ฅผ ์›ํ•˜๋Š” ์ˆœ๊ฐ„์œผ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋Š” "ํƒ€์ž„๋จธ์‹ "์„ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ๊ฐ„๋‹จํ•œ ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค.

public class TimeMachine : ITimeMachine
{
     //ะ˜ัั‚ะพั€ะธั ะธะณั€ะพะฒั‹ั… ัะพัั‚ะพัะฝะธะน
     private readonly IGameStateHistory _history;

     //ะขะตะบัƒั‰ะตะต ะธะณั€ะพะฒะพะต ัะพัั‚ะพัะฝะธะต ะฝะฐ ัะตั€ะฒะตั€ะต
     private readonly ExecutableSystem[] _systems;

     //ะะฐะฑะพั€ ัะธัั‚ะตะผ, ั€ะฐััั‚ะฐะฒะปััŽั‰ะธั… ะบะพะปะปะฐะนะดะตั€ั‹ ะฒ ั„ะธะทะธั‡ะตัะบะพะผ ะผะธั€ะต 
     //ะฟะพ ะดะฐะฝะฝั‹ะผ ะธะท ะธะณั€ะพะฒะพะณะพ ัะพัั‚ะพัะฝะธั
     private readonly GameState _presentState;

     public TimeMachine(IGameStateHistory history, GameState presentState, ExecutableSystem[] timeInitSystems)
     {
         _history = history; 
         _presentState = presentState;
         _systems = timeInitSystems;  
     }

     public GameState TravelToTime(int tick)
     {
         var pastState = tick == _presentState.Time ? _presentState : _history.Get(tick);
         foreach (var system in _systems)
         {
             system.Execute(pastState);
         }
         return pastState;
     }
}

์ด ๊ธฐ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒท๊ณผ ๋Šฅ๋ ฅ์˜ ์ง€์—ฐ์„ ๋ณด์™„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„์ง ์•Œ๋ ค์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ, ์ฆ‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋‹จ์ผ ํžˆํŠธ์Šค์บ” ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด์„ ์˜๊ธฐ ์ „์— ๋ฌผ๋ฆฌ์  ์„ธ๊ณ„๋ฅผ ์›ํ•˜๋Š” ์ƒํƒœ๋กœ ๋˜๋Œ๋ ค์•ผ ํ•˜๊ณ , ๋ ˆ์ด์บ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋ฉฐ, ๋ช…์ค‘ ๋˜๋Š” ๋ฏธ์Šค๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๊ณ , ์„ธ๊ณ„๋ฅผ ์ดˆ๊ธฐ ์ƒํƒœ๋กœ ๋˜๋Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ค์ด๋…ธ ์Šค์ฟผ๋“œ์—์„œ๋Š” ์ด๋Ÿฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค! ๊ฒŒ์ž„์— ๋‚˜์˜ค๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฌด๊ธฐ๋Š” ๋ฐœ์‚ฌ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ฐœ์‚ฌ์ฒด๋Š” ์—ฌ๋Ÿฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ‹ฑ(์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์ˆ˜์‹ญ ํ‹ฑ) ๋™์•ˆ ๋‚ ์•„๊ฐ€๋Š” ์žฅ์ˆ˜๋ช… ์ด์•Œ์ž…๋‹ˆ๋‹ค. ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ? ๋ช‡ ์‹œ์— ๋น„ํ–‰๊ธฐ๋ฅผ ํƒ€์•ผ ํ• ๊นŒ?

ะ’ ๊ณ ๋Œ€ ๊ธฐ์‚ฌ Valve์—์„œ๋„ Half-Life ๋„คํŠธ์›Œํฌ ์Šคํƒ์— ๋Œ€ํ•ด ๊ฐ™์€ ์งˆ๋ฌธ์„ ํ–ˆ๋Š”๋ฐ, ๊ทธ๋“ค์˜ ๋‹ต๋ณ€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฐœ์‚ฌ์ฒด์˜ ์ง€์—ฐ ๋ณด์ƒ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ , ์ด๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์—๊ฒŒ๋Š” ์ด๋Ÿฐ ์˜ต์…˜์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ํˆฌ์‚ฌ์ฒด ๊ธฐ๋ฐ˜ ๋ฌด๊ธฐ๋Š” ๊ฒŒ์ž„ ๋””์ž์ธ์˜ ํ•ต์‹ฌ ํŠน์ง•์ด์—ˆ๊ฑฐ๋“ ์š”. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋ญ”๊ฐ€๋ฅผ ์ƒ๊ฐํ•ด๋‚ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ์„ ํ•œ ํ›„, ์šฐ๋ฆฌ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š” ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์„ ์ƒ๊ฐํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค.

1. ์šฐ๋ฆฌ๋Š” ํˆฌ์‚ฌ์ฒด๋ฅผ ๊ทธ๊ฒƒ์„ ๋งŒ๋“  ํ”Œ๋ ˆ์ด์–ด์˜ ์‹œ๊ฐ„๊ณผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์˜ ๋ชจ๋“  ํ‹ฑ, ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด์˜ ๋ชจ๋“  ์ด์•Œ์— ๋Œ€ํ•ด ์šฐ๋ฆฌ๋Š” ๋ฌผ๋ฆฌ์  ์„ธ๊ณ„๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋กœ ๋กค๋ฐฑํ•˜๊ณ  ํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ค๊ณ  ๋ฐœ์‚ฌ์ฒด์˜ ๋น„ํ–‰ ์‹œ๊ฐ„์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์€ ์šฐ๋ฆฌ์—๊ฒŒ ํŠนํžˆ ์ค‘์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ชจ๋“  ๋ฐœ์‚ฌ์ฒด, ์ƒ๋Œ€๋ฐฉ์˜ ๋ฐœ์‚ฌ์ฒด๊นŒ์ง€ ๋ชจ๋‘ ํด๋ผ์ด์–ธํŠธ์—์„œ ์˜ˆ์ธก๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ์ง€์—ฐ ๋ณด์ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ฐ”์ผ ์ŠˆํŒ… ๊ฒŒ์ž„์˜ ํƒ„๋„ ๊ณ„์‚ฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฐ•ํ™”ํ•œ ๋ฐฉ๋ฒ•
๊ทธ๋ฆผ์—์„œ ํ‹ฑ 30์˜ ํ”Œ๋ ˆ์ด์–ด๋Š” ์˜ˆ์ƒ์— ๋”ฐ๋ผ ๋ฏธ์‚ฌ์ผ์„ ๋ฐœ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Š” ์ ์ด ๋‹ฌ๋ ค๊ฐ€๋Š” ๋ฐฉํ–ฅ์„ ๋ณด๊ณ  ๋ฏธ์‚ฌ์ผ์˜ ๋Œ€๋žต์ ์ธ ์†๋„๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ์ ์œผ๋กœ ๊ทธ๋Š” ํ‹ฑ 33์—์„œ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ง€์—ฐ ๋ณด์ƒ ๋•๋ถ„์— ์„œ๋ฒ„์—๋„ ๋„๋‹ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2. ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜๊ณผ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ์ด์•Œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์˜ ํ•œ ํ‹ฑ์„ ๊ณ„์‚ฐํ•œ ํ›„์—๋Š” ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๊ฐ™์€ ์„œ๋ฒ„ ํ‹ฑ ๋‚ด์—์„œ ์ด์•Œ ๋น„ํ–‰ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ๋•Œ๋งˆ๋‹ค ์ด์•Œ ์‹œ๊ฐ„์„ ์„œ๋ฒ„ ์‹œ๊ฐ„์— ํ•œ ํ‹ฑ์”ฉ ๋” ๊ฐ€๊น๊ฒŒ ๋งŒ๋“ค๊ณ  ์ถฉ๋Œ์ฒด์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ผ์–ด๋‚  ๋•Œ๊นŒ์ง€ ์ด ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

  • ์ด์•Œ์˜ ์ˆ˜๋ช…์ด ๋งŒ๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ณ„์‚ฐ์ด ๋๋‚ฌ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์šฐ๋ฆฌ๋Š” ๋งž์€ ๊ฒƒ๊ณผ ํ‹€๋ฆฐ ๊ฒƒ์„ ์…€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Š” ์ด์ด ๋ฐœ์‚ฌ๋œ ์‹œ์ ๊ณผ ๊ฐ™์€ ์‹œ์ ์— ์ผ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค! ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ์ด๊ฒƒ์ด ์žฅ์ ์ด๊ธฐ๋„ ํ•˜๊ณ  ๋‹จ์ ์ด๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์žฅ์  - ์‚ฌ๊ฒฉํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ๊ฒฝ์šฐ ์ ์˜ ์ฒด๋ ฅ์ด ๊ฐ์†Œํ•˜๋Š” ์ˆœ๊ฐ„๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋งˆ์ด๋„ˆ์Šค - ์ ์ด ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ด์„ ์˜์•˜์„ ๋•Œ๋„ ๊ฐ™์€ ํšจ๊ณผ๊ฐ€ ๊ด€์ฐฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ ์€ ๋А๋ฆฐ ๋กœ์ผ“์„ ์˜์•˜์„ ๋ฟ์ด์ง€๋งŒ, ๋ฐ๋ฏธ์ง€๋Š” ์ด๋ฏธ ๊ณ„์‚ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์•Œ์ด ์„œ๋ฒ„ ์‹œ๊ฐ„์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์ง€์—ฐ ๋ณด์ƒ ์—†์ด ๋‹ค์Œ ์„œ๋ฒ„ ํ‹ฑ์—์„œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. ๋А๋ฆฐ ๋ฐœ์‚ฌ์ฒด์˜ ๊ฒฝ์šฐ ์ด๋ก ์ ์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์— ๋น„ํ•ด ๋ฌผ๋ฆฌ์  ๋กค๋ฐฑ ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ถ€ํ•˜์˜ ๋ถˆ๊ท ํ˜•๋„ ์ปค์กŒ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์œ ํœด ์ƒํƒœ์ด๊ฑฐ๋‚˜, ํ•œ ์„œ๋ฒ„ ํ‹ฑ์—์„œ ์—ฌ๋Ÿฌ ์ด์•Œ์— ๋Œ€ํ•œ 10ํ‹ฑ์˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๊ณ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ์ง€์—ฐ ๋ณด์ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ฐ”์ผ ์ŠˆํŒ… ๊ฒŒ์ž„์˜ ํƒ„๋„ ๊ณ„์‚ฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฐ•ํ™”ํ•œ ๋ฐฉ๋ฒ•
์ด์ „ ๊ทธ๋ฆผ๊ณผ ๋™์ผํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์ด์ง€๋งŒ, ๋‘ ๋ฒˆ์งธ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๊ณ„์‚ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ์‚ฌ์ผ์€ ๋ฐœ์‚ฌ๋œ ์ˆœ๊ฐ„๊ณผ ๊ฐ™์€ ํ‹ฑ์—์„œ ์„œ๋ฒ„ ์‹œ๊ฐ„์„ "๋”ฐ๋ผ์žก์•˜๊ณ ", ๋‹ค์Œ ํ‹ฑ๋ถ€ํ„ฐ ๋ช…์ค‘์ด ๊ณ„์‚ฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 31๋ฒˆ์งธ ํ‹ฑ์—์„œ๋Š” โ€‹โ€‹์ด ๊ฒฝ์šฐ ์ง€์—ฐ ๋ณด์ƒ์ด ๋” ์ด์ƒ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ˜„ํ•œ ๋ฐฉ์‹์—์„œ๋Š” ์ด ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋ช‡ ์ค„์˜ ์ฝ”๋“œ ์ฐจ์ด๋กœ ๋‹ฌ๋ž๊ธฐ ๋•Œ๋ฌธ์— ๋‘˜ ๋‹ค ์ž‘์„ฑํ–ˆ๊ณ , ์˜ค๋žซ๋™์•ˆ ์ด ๋‘˜์€ ๋ณ‘ํ–‰ํ•ด์„œ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌด๊ธฐ์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์ด์•Œ ์†๋„์— ๋”ฐ๋ผ ์šฐ๋ฆฌ๋Š” ๊ฐ ๊ณต๋ฃก์— ๋Œ€ํ•ด ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์˜ต์…˜์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ „ํ™˜์ ์€ "์ ์„ ํŠน์ • ์‹œ๊ฐ„ ๋™์•ˆ ํŠน์ • ํšŸ์ˆ˜๋งŒํผ ๊ณต๊ฒฉํ•˜๋ฉด ํŠน์ • ๋ณด๋„ˆ์Šค๋ฅผ ์–ป๋Š”๋‹ค"์™€ ๊ฐ™์€ ๊ฒŒ์ž„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋„์ž…ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ ์„ ๊ณต๊ฒฉํ•˜๋Š” ํƒ€์ด๋ฐ์ด ์ค‘์š”ํ•œ ๋ชจ๋“  ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋‘ ๋ฒˆ์งธ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ์ž˜ ์–ด์šธ๋ฆฌ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๋Š” ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์„ ์„ ํƒํ–ˆ๊ณ , ์ด์ œ ์ด ์˜ต์…˜์€ ๊ฒŒ์ž„ ๋‚ด ๋ชจ๋“  ๋ฌด๊ธฐ์™€ ๋ชจ๋“  ๋Šฅ๋™ ๋Šฅ๋ ฅ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ƒ์‚ฐ์„ฑ ๋ฌธ์ œ๋Š” ๋ณ„๋„๋กœ ์ œ๊ธฐํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด ๋ชจ๋“  ๊ฒƒ์ด ์†๋„๋ฅผ ๋Šฆ์ถœ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค๋ฉด, ๋‚˜๋Š” ์ด๋ ‡๊ฒŒ ๋‹ตํ•  ๊ฒƒ์ด๋‹ค. ์‚ฌ์‹ค์€ ๋ฐ”๋กœ ๊ทธ๊ฒƒ์ด๋‹ค. ์œ ๋‹ˆํ‹ฐ๋Š” ์›€์ง์ด๋Š” ์ฝœ๋ผ์ด๋”๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์ผœ๊ณ  ๋„๋Š” ์†๋„๊ฐ€ ๋งค์šฐ ๋А๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค์ด๋…ธ ์Šค์ฟผ๋“œ์—์„œ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ํˆฌ์‚ฌ์ฒด๊ฐ€ ๋™์‹œ์— ์ „ํˆฌ์— ์ฐธ์—ฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ฐœ์‚ฌ์ฒด๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์„ธ๊ธฐ ์œ„ํ•ด ์ถฉ๋Œ๊ธฐ๋ฅผ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์€ ๊ฐ๋‹นํ•  ์ˆ˜ ์—†๋Š” ์‚ฌ์น˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ฌผ๋ฆฌ์  ๋กค๋ฐฑ์˜ ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชฉ์ ์„ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ECS์— ํ”Œ๋ ˆ์ด์–ด์˜ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•˜๋Š” ๋ณ„๋„์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ง€์—ฐ ๋ณด์ƒ์ด ํ•„์š”ํ•œ ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ(ํˆฌ์‚ฌ์ฒด, ๋Šฅ๋ ฅ ๋“ฑ)์— ์ด๋ฅผ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „์—, ์šฐ๋ฆฌ๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ด ์‹œ์ ๊นŒ์ง€ ํด๋Ÿฌ์Šคํ„ฐ๋งํ•˜๊ณ  ํ•จ๊ป˜ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด ๋ฌผ๋ฆฌ ์„ธ๊ณ„๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋กค๋ฐฑํ•ฉ๋‹ˆ๋‹ค.

์ด ๋‹จ๊ณ„์—์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ์‹œ์Šคํ…œ์ด ๊ฐ–์ถ”์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์•ฝ๊ฐ„ ๋‹จ์ˆœํ™”๋œ ํ˜•ํƒœ์˜ ์ฝ”๋“œ:

public sealed class LagCompensationSystemGroup : ExecutableSystem
{
     //ะœะฐัˆะธะฝะฐ ะฒั€ะตะผะตะฝะธ
     private readonly ITimeMachine _timeMachine;

     //ะะฐะฑะพั€ ัะธัั‚ะตะผ ะปะฐะณะบะพะผะฟะตะฝัะฐั†ะธะธ
     private readonly LagCompensationSystem[] _systems;
     
     //ะะฐัˆะฐ ั€ะตะฐะปะธะทะฐั†ะธั ะบะปะฐัั‚ะตั€ะธะทะฐั‚ะพั€ะฐ
     private readonly TimeTravelMap _travelMap = new TimeTravelMap();

    public LagCompensationSystemGroup(ITimeMachine timeMachine, 
        LagCompensationSystem[] lagCompensationSystems)
     {
         _timeMachine = timeMachine;
         _systems = lagCompensationSystems;
     }

     public override void Execute(GameState gs)
     {
         //ะะฐ ะฒั…ะพะด ะบะปะฐัั‚ะตั€ะธะทะฐั‚ะพั€ ะฟั€ะธะฝะธะผะฐะตั‚ ั‚ะตะบัƒั‰ะตะต ะธะณั€ะพะฒะพะต ัะพัั‚ะพัะฝะธะต,
         //ะฐ ะฝะฐ ะฒั‹ั…ะพะด ะฒั‹ะดะฐะตั‚ ะฝะฐะฑะพั€ ยซะบะพั€ะทะธะฝยป. ะ’ ะบะฐะถะดะพะน ะบะพั€ะทะธะฝะต ะปะตะถะฐั‚ ัะฝั‚ะธั‚ะธ,
         //ะบะพั‚ะพั€ั‹ะผ ะดะปั ะปะฐะณะบะพะผะฟะตะฝัะฐั†ะธะธ ะฝัƒะถะฝะพ ะพะดะฝะพ ะธ ั‚ะพ ะถะต ะฒั€ะตะผั ะธะท ะธัั‚ะพั€ะธะธ.
         var buckets = _travelMap.RefillBuckets(gs);

         for (int bucketIndex = 0; bucketIndex < buckets.Count; bucketIndex++)
         {
             ProcessBucket(gs, buckets[bucketIndex]);
         }

         //ะ’ ะบะพะฝั†ะต ะปะฐะณะบะพะผะฟะตะฝัะฐั†ะธะธ ะผั‹ ะฒะพััั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ั„ะธะทะธั‡ะตัะบะธะน ะผะธั€ 
         //ะฒ ะธัั…ะพะดะฝะพะต ัะพัั‚ะพัะฝะธะต
         _timeMachine.TravelToTime(gs.Time);
     }

     private void ProcessBucket(GameState presentState, TimeTravelMap.Bucket bucket)
     {
         //ะžั‚ะบะฐั‚ั‹ะฒะฐะตะผ ะฒั€ะตะผั ะพะดะธะฝ ั€ะฐะท ะดะปั ะบะฐะถะดะพะน ะบะพั€ะทะธะฝั‹
         var pastState = _timeMachine.TravelToTime(bucket.Time);

         foreach (var system in _systems)
         {
               system.PastState = pastState;
               system.PresentState = presentState;

               foreach (var entity in bucket)
               {
                   system.Execute(entity);
               }
          }
     }
}

์ด์ œ ๋‚จ์€ ๊ฒƒ์€ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ๋ฟ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

1. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ตœ๋Œ€ ์ด๋™ ๋ฒ”์œ„๋ฅผ ์–ผ๋งˆ๋‚˜ ์ œํ•œํ•ด์•ผ ํ•˜๋Š”์ง€ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

์ €ํฌ๋Š” ๋ชจ๋ฐ”์ผ ๋„คํŠธ์›Œํฌ๊ฐ€ ์ข‹์ง€ ์•Š์€ ํ™˜๊ฒฝ์—์„œ๋„ ๊ฒŒ์ž„์— ์ตœ๋Œ€ํ•œ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ† ๋ฆฌ์— 30ํ‹ฑ(ํ‹ฑ ๋ ˆ์ดํŠธ๋Š” 20Hz)์˜ ์—ฌ์œ ๋ฅผ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ”Œ๋ ˆ์ด์–ด๋Š” ๋งค์šฐ ๋†’์€ ํ•‘์—์„œ๋„ ์ƒ๋Œ€๋ฐฉ์„ ๊ณต๊ฒฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ์‹œ๊ฐ„ ๋‚ด์— ์–ด๋–ค ๋ฌผ์ฒด๋ฅผ ์›€์ง์ผ ์ˆ˜ ์žˆ๊ณ  ์–ด๋–ค ๋ฌผ์ฒด๋ฅผ ์›€์ง์ผ ์ˆ˜ ์—†๋Š”์ง€ ํŒ๋ณ„ํ•˜์„ธ์š”.

๋ฌผ๋ก , ์šฐ๋ฆฌ๋Š” ์ƒ๋Œ€๋ฅผ ์›€์ง์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์„ค์น˜๋œ ์—๋„ˆ์ง€ ์‹ค๋“œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์˜จ๋ผ์ธ ์ŠˆํŒ… ๊ฒŒ์ž„์—์„œ ์ข…์ข… ๊ทธ๋ ‡๋“ฏ์ด ์—ฌ๊ธฐ์„œ๋„ ๋ฐฉ์–ด ๋Šฅ๋ ฅ์„ ์šฐ์„ ์‹œํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ˜„์žฌ ๋ฐฉํŒจ๋ฅผ ์ด๋ฏธ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ, ๊ณผ๊ฑฐ์˜ ์ง€์—ฐ ๋ณด์ • ์ด์•Œ์€ ๋ฐฉํŒจ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3. ๊ณต๋ฃก์˜ ๋Šฅ๋ ฅ(๋ฌผ๊ธฐ, ๊ผฌ๋ฆฌ ๊ณต๊ฒฉ ๋“ฑ)์— ๋Œ€ํ•œ ์ง€์—ฐ ๋ณด์ƒ์„ ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฒฐ์ •ํ–ˆ๊ณ , ์ด์•Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์— ๋”ฐ๋ผ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

4. ์ง€์—ฐ ๋ณด์ƒ์ด ์ˆ˜ํ–‰๋˜๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ์ถฉ๋Œ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š”, ํ”Œ๋ ˆ์ด์–ด์˜ ์œ„์น˜๊ฐ€ ๊ณผ๊ฑฐ๋กœ ์ด๋™ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด์–ด๋Š” ํ˜„์žฌ ์„œ๋ฒ„์— ์žˆ๋Š” ์‹œ๊ฐ„๊ณผ ๋™์ผํ•œ ์‹œ๊ฐ„์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์‚ฌ๊ฒฉํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ์ถฉ๋Œ์ฒด๋„ ๋กค๋ฐฑํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ์งธ, ํด๋Ÿฌ์Šคํ„ฐ๋ง์ด ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๊นŒ์šด ํ•‘์„ ๊ฐ€์ง„ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ๋™์ผํ•œ ๋ฌผ๋ฆฌ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ๋กœ, ๋ชจ๋“  ๋ ˆ์ด์บ์ŠคํŠธ์™€ ์˜ค๋ฒ„๋žฉ์—์„œ ์šฐ๋ฆฌ๋Š” ํ•ญ์ƒ ๋Šฅ๋ ฅ์ด๋‚˜ ๋ฐœ์‚ฌ์ฒด๋ฅผ ์†Œ์œ ํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ถฉ๋Œ์ฒด๋ฅผ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์ด๋…ธ ์Šค์ฟผ๋“œ์—์„œ ํ”Œ๋ ˆ์ด์–ด๋Š” ์ŠˆํŒ… ๊ฒŒ์ž„์˜ ๊ธฐ์ค€์œผ๋กœ ๋ณด๋ฉด ์ƒ๋‹นํžˆ ํŠน์ดํ•œ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ๊ณต๋ฃก์„ ์กฐ์ข…ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํŠน์ดํ•œ ๊ฐ๋„๋กœ ์ด์„ ์˜๊ณ  ์ด์•Œ์˜ ๊ถค์ ์ด ํ”Œ๋ ˆ์ด์–ด์˜ ๊ณต๋ฃก ์ถฉ๋Œ๊ธฐ๋ฅผ ํ†ต๊ณผํ•˜๋”๋ผ๋„ ์ด์•Œ์€ ์ด๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

์…‹์งธ, ์ง€์—ฐ ๋ณด์ƒ์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์—๋„ ECS์—์„œ ์–ป์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ฃก ๋ฌด๊ธฐ์˜ ์œ„์น˜๋‚˜ ๋Šฅ๋ ฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์ ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์ง€์—ฐ์ด ๋ณด์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ฝœ๋ผ์ด๋”์˜ ์‹ค์ œ ์œ„์น˜๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์šฐ๋ฆฌ๋Š” ๋” ์ƒ์‚ฐ์ ์ด๊ณ  ๋™์‹œ์— ๋” ๊ฐ„๋‹จํ•œ ๊ธธ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ์ง€์—ฐ์€ ๊ฐ„๋‹จํžˆ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋งˆ์Šคํฌ๋กœ๋งŒ ๊ฐ€๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋งˆ์Šคํ‚น ๋ฐฉ๋ฒ•๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„œ๋ฒ„ ์ง€์—ฐ ๋ณด์ƒ์—๋„ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์„ ๋งž๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ๊ฒฝํ—˜์€ ํ–ฅ์ƒ๋˜์ง€๋งŒ, ์ด์„ ๋งž๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ๊ฒฝํ—˜์€ ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋””๋…ธ ์Šค์ฟผ๋“œ์˜ ๊ฒฝ์šฐ ์„ ํƒ์€ ๋ช…ํ™•ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก , ์ด ๋ชจ๋“  ๊ฒƒ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์™€ ๊ฒŒ์ž„ ๋””์ž์ด๋„ˆ ๋ชจ๋‘์—๊ฒŒ ์„œ๋ฒ„ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ์ด์ „ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์‹œ์Šคํ…œ์˜ ๋‹จ์ˆœํ•œ ์ˆœ์ฐจ์  ํ˜ธ์ถœ์ด์—ˆ๋‹ค๋ฉด, ์ง€์—ฐ ๋ณด์ƒ์„ ํ†ตํ•ด ์ค‘์ฒฉ ๋ฃจํ”„์™€ ๋ถ„๊ธฐ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์šฐ๋ฆฌ๋Š” ์ž‘์—…ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋งŽ์€ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์˜€์Šต๋‹ˆ๋‹ค.

2019 ๋ฒ„์ „(์•„๋‹ˆ๋ฉด ์กฐ๊ธˆ ๋” ์ด์ „ ๋ฒ„์ „)์—์„œ Unity๋Š” ๋…๋ฆฝ์ ์ธ ๋ฌผ๋ฆฌ์  ์žฅ๋ฉด์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์ง€์›์„ ๋ฐ›๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ๋ชจ๋“  ๊ฐ์‹ค์˜ ๊ณตํ†ต๋œ ๋ฌผ๋ฆฌ์  ์„ธ๊ณ„๋ฅผ ์—†์• ๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—…๋ฐ์ดํŠธ ์งํ›„์— ์„œ๋ฒ„์— ์ด๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ๊ฒŒ์ž„๋ฐฉ์— ๊ณ ์œ ํ•œ ๋ฌผ๋ฆฌ ์žฅ๋ฉด์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์ „์— ์ฃผ๋ณ€ ๋ฐฉ์˜ ๋ฐ์ดํ„ฐ์—์„œ ์žฅ๋ฉด์„ "์ •๋ฆฌ"ํ•  ํ•„์š”์„ฑ์„ ์—†์•ด์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, ์ƒ์‚ฐ์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ๋กœ, ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ƒˆ๋กœ์šด ๊ฒŒ์ž„ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์žฅ๋ฉด ์ •๋ฆฌ ์ฝ”๋“œ์—์„œ ์‹ค์ˆ˜๋ฅผ ํ•˜๋ฉด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฒ„๊ทธ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฒ„๊ทธ๋Š” ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์–ด๋ ค์› ๊ณ , ์ข…์ข… ํ•œ ๋ฐฉ์˜ ์žฅ๋ฉด์— ์žˆ๋Š” ๋ฌผ๋ฆฌ์  ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅธ ๋ฐฉ์œผ๋กœ "ํ˜๋Ÿฌ๋“ค์–ด๊ฐ€๋Š”" ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ์šฐ๋ฆฌ๋Š” ๋ฌผ๋ฆฌ์  ์žฅ๋ฉด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌผ๋ฆฌ์  ์„ธ๊ณ„์˜ ์—ญ์‚ฌ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์—ฐ๊ตฌ๋„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์กฐ๊ฑด๋ถ€๋กœ ๊ฐ ๋ฐฉ์— ํ•˜๋‚˜์˜ ์žฅ๋ฉด์ด ์•„๋‹Œ 30๊ฐœ์˜ ์žฅ๋ฉด์„ ํ• ๋‹นํ•˜๊ณ  ์ด๋ฅผ ์ˆœํ™˜ ๋ฒ„ํผ๋กœ ๋งŒ๋“ค์–ด์„œ ๊ธฐ๋ก์„ ์ €์žฅํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ „๋ฐ˜์ ์œผ๋กœ ์ด ์˜ต์…˜์€ ํšจ๊ณผ์ ์ธ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒ์‚ฐ์„ฑ์ด ์—„์ฒญ๋‚˜๊ฒŒ ์ฆ๊ฐ€ํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, ์˜คํžˆ๋ ค ์œ„ํ—˜ํ•œ ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋งŽ์€ ์žฅ๋ฉด์„ ์˜ค๋žซ๋™์•ˆ ์ž‘์—…ํ•˜๋‹ค ๋ณด๋ฉด ์„œ๋ฒ„๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ์ง€ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ ๊ทœ์น™์„ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค.ํŒŒ์‚ฐํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ณ ์น˜์ง€ ๋งˆ๋ผ.".

์ถœ์ฒ˜ : habr.com

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster