์๋
ํ์ธ์. ์ ๋ Pixonic์ ์๋ฒ ๊ฐ๋ฐ์ Nikita Brizhak์
๋๋ค. ์ค๋์ ๋ชจ๋ฐ์ผ ๋ฉํฐํ๋ ์ด ์ ๋ ๋ณด์์ ๋ํด ๋ง์๋๋ฆฌ๊ณ ์ ํฉ๋๋ค.
๋ฌ์์์ด๋ฅผ ํฌํจํ์ฌ ์๋ฒ ์ง์ฐ ๋ณด์์ ๊ดํ ๋ง์ ๊ธฐ์ฌ๊ฐ ์์ฑ๋์์ต๋๋ค. ์ด ๊ธฐ์ ์ 90๋ ๋ ํ๋ฐ๋ถํฐ ๋ฉํฐํ๋ ์ด์ด FPS ์ ์์ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉ๋์๊ธฐ ๋๋ฌธ์ ์ด๋ ๋๋ผ์ด ์ผ์ด ์๋๋๋ค. ์๋ฅผ ๋ค์ด, ์ด ๋ชจ๋๋ฅผ ์ฒ์์ผ๋ก ์ฌ์ฉํ QuakeWorld ๋ชจ๋๋ฅผ ๊ธฐ์ตํ ์ ์์ต๋๋ค.
๋ชจ๋ฐ์ผ ๋ฉํฐํ๋ ์ด์ด ์ํ ๊ฒ์์ธ Dino Squad์์๋ ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด ๊ธฐ์ฌ์์ ๋์ ๋ชฉํ๋ ์ด๋ฏธ ์์ฑ๋ ๋ด์ฉ์ ์์ฒ ๋ฒ ๋ฐ๋ณตํ๋ ๊ฒ์ด ์๋๋ผ ๊ธฐ์ ์คํ๊ณผ ํต์ฌ ๊ฒ์ํ๋ ์ด ๊ธฐ๋ฅ์ ๊ณ ๋ คํ์ฌ ๊ฒ์์์ ์ง์ฐ ๋ณด์์ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์ค๋ช
ํ๋ ๊ฒ์
๋๋ค.
์ฐ๋ฆฌ์ ํผ์ง๊ณผ ๊ธฐ์ ์ ๋ํ ๋ช ๋ง๋.
Dino Squad๋ ๋คํธ์ํฌ ๋ชจ๋ฐ์ผ PvP ์ํ ๊ฒ์์ ๋๋ค. ํ๋ ์ด์ด๋ ๋ค์ํ ๋ฌด๊ธฐ๋ฅผ ์ฅ์ฐฉํ ๊ณต๋ฃก์ ์กฐ์ข ํ๋ฉฐ 6๋6 ํ์ผ๋ก ์๋ก ์ ํฌ๋ฅผ ํผ์นฉ๋๋ค.
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋ชจ๋ Unity๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ํ ๊ฒ์์ ์ํคํ ์ฒ๋ ๋งค์ฐ ๊ณ ์ ์ ์ ๋๋ค. ์๋ฒ๋ ๊ถ์์ฃผ์์ ์ด๋ฉฐ ํด๋ผ์ด์ธํธ ์์ธก์ ํด๋ผ์ด์ธํธ์์ ์๋ํฉ๋๋ค. ๊ฒ์ ์๋ฎฌ๋ ์ด์ ์ ์ฌ๋ด ECS๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋์์ผ๋ฉฐ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ง์ฐ ๋ณด์์ ๋ํด ์ฒ์ ๋ค์ด๋ณด์ ๊ฒฝ์ฐ, ๋ฌธ์ ์ ๋ํ ๊ฐ๋ตํ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฉํฐํ๋ ์ด์ด FPS ๊ฒ์์์ ๊ฒฝ๊ธฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์๊ฒฉ ์๋ฒ์์ ์๋ฎฌ๋ ์ด์ ๋ฉ๋๋ค. ํ๋ ์ด์ด๋ ์ ๋ ฅ(๋๋ฆฐ ํค์ ๋ํ ์ ๋ณด)์ ์๋ฒ์ ๋ณด๋ด๊ณ ์ด์ ๋ํ ์๋ต์ผ๋ก ์๋ฒ๋ ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ ๋ คํ์ฌ ์ ๋ฐ์ดํธ๋ ๊ฒ์ ์ํ๋ฅผ ํ๋ ์ด์ด์๊ฒ ๋ณด๋ ๋๋ค. ์ด ์ํธ ์์ฉ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์์ผ๋ก ํค๋ฅผ ๋๋ฅด๋ ์๊ฐ๊ณผ ํ๋ ์ด์ด ์บ๋ฆญํฐ๊ฐ ํ๋ฉด์์ ์์ง์ด๋ ์๊ฐ ์ฌ์ด์ ์ง์ฐ ์๊ฐ์ด ํญ์ ํ๋ณด๋ค ์ปค์ง๋๋ค.
๋ก์ปฌ ๋คํธ์ํฌ์์๋ ์ด ์ง์ฐ(์ผ๋ฐ์ ์ผ๋ก ์ ๋ ฅ ์ง์ฐ์ด๋ผ๊ณ ํจ)์ด ๋์ ๋์ง ์์ ์ ์์ง๋ง, ์ธํฐ๋ท์ ํตํด ํ๋ ์ดํ ๋๋ ์บ๋ฆญํฐ๋ฅผ ์ ์ดํ ๋ "์ผ์ ์์์ ๋ฏธ๋๋ฌ์ง๋" ๋๋์ ์ค๋๋ค. ์ด ๋ฌธ์ ๋ ํ๋ ์ด์ด์ ํ์ด 200ms์ธ ๊ฒฝ์ฐ๊ฐ ์ฌ์ ํ ์ฐ์ํ ์ฐ๊ฒฐ๋ก ๊ฐ์ฃผ๋๋ ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ์ ์ด์ค์ผ๋ก ๊ด๋ จ๋ฉ๋๋ค. ์ข ์ข ํ์ 350, 500 ๋๋ 1000ms์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ ๋ ฅ ์ง์ฐ์ด ์๋ ๋น ๋ฅธ ์ํ ๊ฒ์์ ํ๋ ์ดํ๋ ๊ฒ์ด ๊ฑฐ์ ๋ถ๊ฐ๋ฅํด์ง๋๋ค.
์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ํด๋ผ์ด์ธํธ ์ธก ์๋ฎฌ๋ ์ด์ ์์ธก์ ๋๋ค. ์ฌ๊ธฐ์ ํด๋ผ์ด์ธํธ ์์ฒด๋ ์๋ฒ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ํ๋ ์ด์ด ์บ๋ฆญํฐ์ ์ ๋ ฅ์ ์ ์ฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ต๋ณ์ ๋ฐ์ผ๋ฉด ๋จ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ๊ณ ์๋์ ์์น๋ฅผ โโ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ํค๋ฅผ ๋๋ฅด๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ํ์ํ๋ ๊ฒ ์ฌ์ด์ ์ง์ฐ์ ์ต์ํ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ๋์์ค๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ํญ์ ๋ง์ง๋ง ์
๋ ฅ์ ๋ฐ๋ผ ์์ ์ ๊ทธ๋ฆฌ๊ณ ์ ์ ์๋ฒ ๋ฐ์ดํฐ์ ์ด์ ์ํ์ ๋ฐ๋ผ ๋คํธ์ํฌ ์ง์ฐ์ผ๋ก ๊ทธ๋ฆฝ๋๋ค. ์ฆ, ์ ์ ํฅํด ์ด์ ์ ๋ ํ๋ ์ด์ด๋ ์์ ์ ๊ธฐ์ค์ผ๋ก ๊ณผ๊ฑฐ์ ๊ทธ๋ฅผ ๋ด
๋๋ค. ํด๋ผ์ด์ธํธ ์์ธก์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ
๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ ์์ธก์ ํ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ง ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ๋ง๋ญ๋๋ค. ํ๋ ์ด์ด๊ฐ ๊ณผ๊ฑฐ์ ์ ์ด ์์๋ ์ง์ ์์ ์ด์ ์๋ฉด ์๋ฒ์์ ๊ฐ์ ์ง์ ์์ ์ด๊ฒฉ์ ๊ฐํ ๋ ์ ์ด ๋ ์ด์ ๊ทธ ์์น์ ์์ ์ ์์ต๋๋ค. ์๋ฒ ์ง์ฐ ๋ณด์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ์๋ํฉ๋๋ค. ๋ฌด๊ธฐ๊ฐ ๋ฐ์ฌ๋๋ฉด ์๋ฒ๋ ํ๋ ์ด์ด๊ฐ ๋ฐ์ฌ ๋น์ ๋ก์ปฌ์์ ๋ณธ ๊ฒ์ ์ํ๋ฅผ ๋ณต์ํ๊ณ ์ค์ ๋ก ์ ์ ๊ณต๊ฒฉํ ์ ์์๋์ง ํ์ธํฉ๋๋ค. ๋๋ต์ด "์"์ด๋ฉด ํด๋น ์์ ์ ์ ์ด ๋ ์ด์ ์๋ฒ์ ์๋๋ผ๋ ์ ์ค ํ์๊ฐ ๊ณ์ฐ๋ฉ๋๋ค.
์ด๋ฌํ ์ง์์ ๋ฐํ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ค์ด๋ ธ์ค์ฟผ๋์์ ์๋ฒ ์ง์ฐ ๋ณด์์ ๊ตฌํํ๊ธฐ ์์ํ์ต๋๋ค. ์ฐ์ , ํด๋ผ์ด์ธํธ๊ฐ ๋ณธ ๊ฒ์ ์๋ฒ์ ๋ณต์ํ๋ ๋ฐฉ๋ฒ์ ์ดํดํด์ผ ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํํ ๋ฌด์์ ๋ณต์ํด์ผ ํฉ๋๊น? ์ฐ๋ฆฌ ๊ฒ์์์ ๋ฌด๊ธฐ์ ๋ฅ๋ ฅ์ ์ ์ค์ ๋ ์ด์บ์คํธ์ ์ค๋ฒ๋ ์ด, ์ฆ ์ ์ ๋ฌผ๋ฆฌ์ ์ถฉ๋์ฒด์์ ์ํธ ์์ฉ์ ํตํด ๊ณ์ฐ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ํ๋ ์ด์ด๊ฐ ๋ก์ปฌ๋ก "๋ณธ" ์ถฉ๋์ฒด์ ์์น๋ฅผ โโ์๋ฒ์์ ์ฌํํด์ผ ํ์ต๋๋ค. ๋น์ ์ฐ๋ฆฌ๋ Unity ๋ฒ์ 2018.x๋ฅผ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. ๋ฌผ๋ฆฌ API๋ ์ ์ ์ด๋ฉฐ ๋ฌผ๋ฆฌ์ ์ธ๊ณ๋ ๋จ์ผ ๋ณต์ฌ๋ณธ์ ์กด์ฌํฉ๋๋ค. ์ํ๋ฅผ ์ ์ฅํ ๋ค์ ์์์์ ๋ณต์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ๊ทธ๋์ ๋ญ ํ ๊น?
ํด๊ฒฐ์ฑ ์ ํ๋ฉด์ ์์๊ณ , ๊ทธ ๋ชจ๋ ์์๋ ์ด๋ฏธ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋์์ต๋๋ค.
- ๊ฐ ํด๋ผ์ด์ธํธ์ ๋ํด ํค๋ฅผ ๋๋ ์ ๋ ์๋๋ฅผ ๋ณธ ์๊ฐ์ ์์์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด ์ ๋ณด๋ฅผ ์ ๋ ฅ ํจํค์ง์ ๊ธฐ๋กํ์ผ๋ฉฐ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ ์์ธก์ ์กฐ์ ํ์ต๋๋ค.
- ๊ฒ์ ์ํ์ ๊ธฐ๋ก์ ์ ์ฅํ ์ ์์ด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์๋๋ฐฉ(๋ฐ๋ผ์ ์ถฉ๋์)์ ์์น๋ฅผ โโโโ์ ์งํ ๊ฒ์
๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์๋ฒ์ ์ํ ๊ธฐ๋ก์ ๊ฐ๊ณ ์์ผ๋ฉฐ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ํ์ต๋๋ค.
๋ธํ . ์ ์ ํ ๋๋ฅผ ์๋ฉด ์ญ์ฌ์์ ์ฌ๋ฐ๋ฅธ ์ํ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค. - ์ด์ ๊ธฐ๋ก์ ํตํด ๊ฒ์ ์ํ๋ฅผ ํ๋ณดํ์ผ๋ฏ๋ก ํ๋ ์ด์ด ๋ฐ์ดํฐ๋ฅผ ์ค์ ์ธ๊ณ์ ์ํ์ ๋๊ธฐํํ ์ ์์ด์ผ ํฉ๋๋ค. ๊ธฐ์กด ์ถฉ๋์ฒด - ์ด๋, ๋๋ฝ๋ ์ถฉ๋์ฒด - ์์ฑ, ๋ถํ์ํ ์ถฉ๋์ฒด - ํ๊ดด. ์ด ๋ก์ง ์ญ์ ์ด๋ฏธ ์์ฑ๋์ด ์ฌ๋ฌ 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;
}
}
๋จ์ ๊ฒ์ ์ด ๊ธฐ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ์ท๊ณผ ๋ฅ๋ ฅ์ ์ฝ๊ฒ ๋ณด์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ด๋ ๊ฒ๋ฟ์ด์์ต๋๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ๊ฒฝ์ฐ, ์ญํ์ด ๋จ์ผ ํํธ์ค์บ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒ์ด ๋ช ํํด ๋ณด์ ๋๋ค. ํ๋ ์ด์ด๊ฐ ์ด์ ์๊ธฐ ์ ์ ๋ฌผ๋ฆฌ์ ์ธ๊ณ๋ฅผ ์ํ๋ ์ํ๋ก ๋กค๋ฐฑํ๊ณ , ๋ ์ด์บ์คํธ๋ฅผ ์ํํ๊ณ , ํํธ ๋๋ ์คํจ๋ฅผ ๊ณ์ฐํด์ผ ํ๋ฉฐ, ์ธ์์ ์ด๊ธฐ ์ํ๋ก ๋๋๋ฆฝ๋๋ค.
ํ์ง๋ง Dino Squad์๋ ๊ทธ๋ฌํ ๋ฉ์ปค๋์ฆ์ด ๊ฑฐ์ ์์ต๋๋ค! ๊ฒ์์ ์๋ ๋๋ถ๋ถ์ ๋ฌด๊ธฐ๋ ์ฌ๋ฌ ์๋ฎฌ๋ ์ด์ ํฑ(๊ฒฝ์ฐ์ ๋ฐ๋ผ ์์ญ ํฑ) ๋์ ๋ ์๊ฐ๋ ์๋ช ์ด ๊ธด ์ด์์ธ ๋ฐ์ฌ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ๋ช ์์ ๋นํ๊ธฐ๋ฅผ ํ์ผ ํ ๊น์?
ะ
์ฐ๋ฆฌ์๊ฒ๋ ์ด ์ต์ ์ด ์์์ต๋๋ค. ๋ฐ์ฌ์ฒด ๊ธฐ๋ฐ ๋ฌด๊ธฐ๋ ๊ฒ์ ๋์์ธ์ ํต์ฌ ๊ธฐ๋ฅ์ด์์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋ญ๊ฐ๋ฅผ ์๊ฐํด๋ด์ผ ํ์ต๋๋ค. ๋ช ๊ฐ์ง ๋ธ๋ ์ธ์คํ ๋ฐ ํ์ ์ฐ๋ฆฌ๋ ํจ๊ณผ๊ฐ ์์ ๊ฒ ๊ฐ์ ๋ ๊ฐ์ง ์ต์ ์ ๊ณต์ํํ์ต๋๋ค.
1. ๋ฐ์ฌ์ฒด๋ฅผ ์์ฑํ ํ๋ ์ด์ด์ ์๊ฐ๊ณผ ์ฐ๊ฒฐํฉ๋๋ค. ์๋ฒ ์๋ฎฌ๋ ์ด์ ์ ๋ชจ๋ ํฑ, ๋ชจ๋ ํ๋ ์ด์ด์ ๋ชจ๋ ์ด์์ ๋ํด ์ฐ๋ฆฌ๋ ๋ฌผ๋ฆฌ์ ์ธ๊ณ๋ฅผ ํด๋ผ์ด์ธํธ ์ํ๋ก ๋กค๋ฐฑํ๊ณ ํ์ํ ๊ณ์ฐ์ ์ํํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ํตํด ์๋ฒ์ ๋ถํ๋ฅผ ๋ถ์ฐ์ํค๊ณ ๋ฐ์ฌ์ฒด์ ๋นํ ์๊ฐ์ ์์ธกํ ์ ์๊ฒ ๋์์ต๋๋ค. ํด๋ผ์ด์ธํธ์์ ์ ์ ๋ฐ์ฌ์ฒด๋ฅผ ํฌํจํ ๋ชจ๋ ๋ฐ์ฌ์ฒด๋ฅผ ์์ธกํ๊ธฐ ๋๋ฌธ์ ์์ธก ๊ฐ๋ฅ์ฑ์ด ํนํ ์ค์ํ์ต๋๋ค.
๊ทธ๋ฆผ์์ ํฑ 30์ ํ๋ ์ด์ด๋ ์์ํ์ฌ ๋ฏธ์ฌ์ผ์ ๋ฐ์ฌํฉ๋๋ค. ๊ทธ๋ ์ ์ด ์ด๋ ๋ฐฉํฅ์ผ๋ก ๋ฌ๋ฆฌ๊ณ ์๋์ง ํ์ธํ๊ณ ๋ฏธ์ฌ์ผ์ ๋๋ต์ ์ธ ์๋๋ฅผ ์๊ณ ์์ต๋๋ค. ๋ก์ปฌ์์ ๊ทธ๋ 33๋ฒ์งธ ํฑ์์ ๋ชฉํ๋ฌผ์ ๋ง์ถ ๊ฒ์ ํ์ธํฉ๋๋ค. ๋ ๋ณด์ ๋๋ถ์ ์๋ฒ์๋ ๋์ค๋ค์
2. ์ฒซ ๋ฒ์งธ ์ต์ ๊ณผ ๋์ผํ๊ฒ ๋ชจ๋ ์์ ์ ์ํํ์ง๋ง ์ด์ ์๋ฎฌ๋ ์ด์ ์ XNUMXํฑ์ ๊ณ์ฐํ ํ ๋ฉ์ถ์ง ์๊ณ ๋์ผํ ์๋ฒ ํฑ ๋ด์์ ๋นํ์ ๊ณ์ ์๋ฎฌ๋ ์ด์ ํ์ฌ ์๊ฐ์ด ์๋ฒ์ ๋ ๊ฐ๊น์์ง ๋๋ง๋ค ํ๋์ฉ ํฑํ๊ณ ์ถฉ๋์ฒด ์์น๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ค์ ๋ ๊ฐ์ง ์ค ํ๋๊ฐ ๋ฐ์ํ ๋๊น์ง ์ด ์์ ์ ์ํํฉ๋๋ค.
- ์ด์์ด ๋ง๋ฃ๋์์ต๋๋ค. ์ด๋ ๊ณ์ฐ์ด ๋๋ฌ์์ ์๋ฏธํ๋ฉฐ ์คํจ ๋๋ ์ ์ค์ ๊ณ์ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ด์ด ๋ฐ์ฌ๋ ๋์ผํ ํฑ์ ์์ต๋๋ค! ์ฐ๋ฆฌ์๊ฒ ์ด๊ฒ์ ํ๋ฌ์ค์ด์ ๋ง์ด๋์ค์์ต๋๋ค. ํ๋ฌ์ค - ์ํ ํ๋ ์ด์ด์ ๊ฒฝ์ฐ ์ ์ค๊ณผ ์ ์ ์ฒด๋ ฅ ๊ฐ์ ์ฌ์ด์ ์ง์ฐ์ด ํฌ๊ฒ ์ค์ด๋ค์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋จ์ ์ ์๋๋ฐฉ์ด ํ๋ ์ด์ด์๊ฒ ๋ฐ์ฌํ ๋ ๋์ผํ ํจ๊ณผ๊ฐ ๊ด์ฐฐ๋์๋ค๋ ๊ฒ์ ๋๋ค. ์ ์ ๋๋ฆฐ ๋ก์ผ๋ง ๋ฐ์ฌํ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉฐ ํผํด๋ ์ด๋ฏธ ๊ณ์ฐ๋์์ต๋๋ค.
- ์ด์์ด ์๋ฒ ์๊ฐ์ ๋๋ฌํ์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์๋ฎฌ๋ ์ด์ ์ ์ง์ฐ ๋ณด์ ์์ด ๋ค์ ์๋ฒ ํฑ์์ ๊ณ์๋ฉ๋๋ค. ๋๋ฆฐ ๋ฐ์ฌ์ฒด์ ๊ฒฝ์ฐ ์ด๋ก ์ ์ผ๋ก ์ฒซ ๋ฒ์งธ ์ต์ ์ ๋นํด ๋ฌผ๋ฆฌ ๋กค๋ฐฑ ์๊ฐ ์ค์ด๋ค ์ ์์ต๋๋ค. ๋์์ ์๋ฎฌ๋ ์ด์ ์ ๋ถ๊ท ์ผํ ๋ก๋๊ฐ ์ฆ๊ฐํ์ต๋๋ค. ์๋ฒ๊ฐ ์ ํด ์ํ์๊ฑฐ๋ ํ ์๋ฒ ํฑ์์ ์ฌ๋ฌ ์ด์์ ๋ํด XNUMX๊ฐ์ ์๋ฎฌ๋ ์ด์ ํฑ์ ๊ณ์ฐํ์ต๋๋ค.
์ด์ ๊ทธ๋ฆผ๊ณผ ๋์ผํ ์๋๋ฆฌ์ค์ด์ง๋ง ๋ ๋ฒ์งธ ๊ตฌ์ฑํ์ ๋ฐ๋ผ ๊ณ์ฐ๋์์ต๋๋ค. ๋ฏธ์ฌ์ผ์ ๋ฐ์ฌ๊ฐ ๋ฐ์ํ ๋์ผํ ํฑ์์ ์๋ฒ ์๊ฐ์ "๋ฐ๋ผ์ก์๊ณ " ํํธ๋ ๋ค์ ํฑ๋ถํฐ ๊ณ์ฐ๋ ์ ์์ต๋๋ค. 31๋ฒ์งธ ํฑ์์๋ โโ์ด ๊ฒฝ์ฐ ์ง์ฐ ๋ณด์์ด ๋ ์ด์ ์ ์ฉ๋์ง ์์ต๋๋ค.
์ฐ๋ฆฌ ๊ตฌํ์์ ์ด ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ ๋จ ๋ช ์ค์ ์ฝ๋์์๋ง ๋ฌ๋๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ๋ง๋ค์๊ณ ์ค๋ซ๋์ ๋ณ๋ ฌ๋ก ์กด์ฌํ์ต๋๋ค. ๋ฌด๊ธฐ์ ๋ฉ์ปค๋์ฆ๊ณผ ์ด์์ ์๋์ ๋ฐ๋ผ ์ฐ๋ฆฌ๋ ๊ฐ ๊ณต๋ฃก์ ๋ํด ํ๋ ๋๋ ๋ค๋ฅธ ์ต์ ์ ์ ํํ์ต๋๋ค. ์ฌ๊ธฐ์ ์ ํ์ ์ '์ด๋ฐ ์๊ฐ์ ์ ์ ์ฌ๋ฌ ๋ฒ ๋๋ฆฌ๋ฉด ์ ๋ฐ ๋ณด๋์ค๋ฅผ ๋ฐ๋๋ค' ๊ฐ์ ๋ฉ์นด๋ ๊ฒ์์ ๋ฑ์ฅ์ด๋ค. ํ๋ ์ด์ด๊ฐ ์ ์ ๊ณต๊ฒฉํ๋ ์๊ฐ์ด ์ค์ํ ์ญํ ์ ํ๋ ๋ชจ๋ ๋ฉ์ปค๋์ฆ์ ๋ ๋ฒ์งธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฑฐ๋ถํ์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๊ฒฐ๊ตญ ์ฒซ ๋ฒ์งธ ์ต์ ์ ์ ํํ๊ฒ ๋์๊ณ , ์ด์ ์ด ์ต์ ์ ๊ฒ์์ ๋ชจ๋ ๋ฌด๊ธฐ์ ๋ชจ๋ ํ์ฑ ๋ฅ๋ ฅ์ ์ ์ฉ๋ฉ๋๋ค.
์ด์ ๋ณ๋๋ก ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ด ์๋๋ฅผ ๋ฆ์ถ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค๋ฉด ์ ๋ ๊ทธ๋ ๋ค๊ณ ๋๋ตํ๊ฒ ์ต๋๋ค. Unity๋ ์ถฉ๋์ฒด๋ฅผ ์ด๋ํ๊ณ ์ผ๊ณ ๋๋ ๋ฐ ์๋นํ ๋๋ฆฝ๋๋ค. Dino Squad์์๋ "์ต์ ์" ๊ฒฝ์ฐ ์ ํฌ ์ค์ ์๋ฐฑ ๊ฐ์ ๋ฐ์ฌ์ฒด๊ฐ ๋์์ ์กด์ฌํ ์ ์์ต๋๋ค. ๊ฐ ๋ฐ์ฌ์ฒด๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๊ณ์ฐํ๊ธฐ ์ํด ์ถฉ๋๊ธฐ๋ฅผ ์ด๋ํ๋ ๊ฒ์ ๊ฐ๋นํ ์ ์๋ ์ฌ์น์ ๋๋ค. ๋ฐ๋ผ์ ๋ฌผ๋ฆฌ "๋กค๋ฐฑ" ์๋ฅผ ์ต์ํํ๋ ๊ฒ์ด ์ ๋์ ์ผ๋ก ํ์ํ์ต๋๋ค. ์ด๋ฅผ ์ํด ์ฐ๋ฆฌ๋ ํ๋ ์ด์ด์ ์๊ฐ์ ๊ธฐ๋กํ๋ ๋ณ๋์ ๊ตฌ์ฑ ์์๋ฅผ 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. ์ง์ฐ ๋ณด์์ด ์ํ๋๋ ํ๋ ์ด์ด์ ์ถฉ๋์ฒด๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ์ข์ ๋ฐฉ๋ฒ์ผ๋ก, ๊ทธ๋ค์ ์์น๋ ๊ณผ๊ฑฐ๋ก ์ด๋ํด์๋ ์ ๋ฉ๋๋ค. ํ๋ ์ด์ด๋ ์์ ์ด ํ์ฌ ์๋ฒ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ ์๊ฐ์ ์์ ์ ๋ณผ ์ ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ํ ํ๋ ์ด์ด์ ์ถฉ๋์ฒด๋ ๋กค๋ฐฑํ๋๋ฐ, ์ฌ๊ธฐ์๋ ๋ช ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค.
์ฒซ์งธ, ํด๋ฌ์คํฐ๋ง์ด ํฅ์๋ฉ๋๋ค. ํ์ด ๊ฐ๊น์ด ๋ชจ๋ ํ๋ ์ด์ด์ ๋ํด ๋์ผํ ๋ฌผ๋ฆฌ์ ์ํ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋์งธ, ๋ชจ๋ ๋ ์ด์บ์คํธ ๋ฐ ์ค๋ฒ๋ฉ์์ ์ฐ๋ฆฌ๋ ํญ์ ๋ฅ๋ ฅ์ด๋ ๋ฐ์ฌ์ฒด๋ฅผ ์์ ํ ํ๋ ์ด์ด์ ์ถฉ๋์ฒด๋ฅผ ์ ์ธํฉ๋๋ค. Dino Squad์์ ํ๋ ์ด์ด๋ ์ํ ๊ฒ์ ๊ธฐ์ค์ผ๋ก๋ ๋ค์ ๋นํ์ค์ ์ธ ๊ธฐํํ์ ๊ฐ์ง ๊ณต๋ฃก์ ์ ์ดํฉ๋๋ค. ํ๋ ์ด์ด๊ฐ ๋น์ ์์ ์ธ ๊ฐ๋๋ก ์ด์ ์๊ณ ์ด์์ ๊ถค์ ์ด ํ๋ ์ด์ด์ ๊ณต๋ฃก ์ถฉ๋๊ธฐ๋ฅผ ํต๊ณผํ๋๋ผ๋ ์ด์์ ์ด๋ฅผ ๋ฌด์ํฉ๋๋ค.
์ธ ๋ฒ์งธ๋ก, ๋ ๋ณด์์ด ์์๋๊ธฐ ์ ๋ถํฐ ECS์์ ์ป์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ๊ณต๋ฃก ๋ฌด๊ธฐ์ ์์น๋ ๋ฅ๋ ฅ ์ ์ฉ ์ง์ ์ ๊ณ์ฐํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ง์ฐ ๋ณด์๋ ํ๋ ์ด์ด์ ์ถฉ๋๊ธฐ์ ์ค์ ์์น๋ ์ฐ๋ฆฌ์๊ฒ ์ค์ํ์ง ์์ผ๋ฏ๋ก ๋ณด๋ค ์์ฐ์ ์ด๊ณ ๋์์ ๊ฐ๋จํ ๊ฒฝ๋ก๋ฅผ ํํ์ต๋๋ค.
๋คํธ์ํฌ ๋๊ธฐ ์๊ฐ์ ๋จ์ํ ์ ๊ฑฐํ ์ ์์ผ๋ฉฐ ๋ง์คํน๋ง ํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์์ฅ ๋ฐฉ๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฒ ์ง์ฐ ๋ณด์์๋ ์ฅ๋จ์ ์ด ์์ต๋๋ค. ์ด๋ ์ด์ ๋ง์ ํ๋ ์ด์ด๋ฅผ ํฌ์์ํค๋ฉด์ ์ด์ ์๋ ํ๋ ์ด์ด์ ๊ฒ์ ๊ฒฝํ์ ํฅ์์ํต๋๋ค. ๊ทธ๋ฌ๋ Dino Squad์ ๊ฒฝ์ฐ ์ฌ๊ธฐ์ ์ ํ์ ๋ถ๋ช ํ์ต๋๋ค.
๋ฌผ๋ก ์ด ๋ชจ๋ ๊ฒ์ ํ๋ก๊ทธ๋๋จธ์ ๊ฒ์ ๋์์ด๋ ๋ชจ๋์๊ฒ ์ ์ฒด์ ์ผ๋ก ์๋ฒ ์ฝ๋์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ง๋ถ๋์ด์ผ ํ์ต๋๋ค. ์ด์ ์ ์๋ฎฌ๋ ์ด์ ์ด ์์คํ ์ ๋จ์ํ ์์ฐจ์ ํธ์ถ์ด์๋ค๋ฉด ์ง์ฐ ๋ณด์์ ํตํด ์ค์ฒฉ ๋ฃจํ์ ๋ถ๊ธฐ๊ฐ ๋ํ๋ฌ์ต๋๋ค. ๋ํ ์์ ํ๊ธฐ ํธ๋ฆฌํ๋๋ก ๋ง์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์์ต๋๋ค.
2019 ๋ฒ์ (ํน์ ์กฐ๊ธ ๋ ์ด์ ๋ฒ์ )์์ Unity๋ ๋ ๋ฆฝ์ ์ธ ๋ฌผ๋ฆฌ์ ์ฅ๋ฉด์ ๋ํ ์์ ํ ์ง์์ ์ถ๊ฐํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ ๋ฐฉ์ ๊ณตํต๋ ๋ฌผ๋ฆฌ์ ์ธ๊ณ๋ฅผ ๋น ๋ฅด๊ฒ ์ ๊ฑฐํ๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์ดํธ ์งํ์ ์๋ฒ์ ์ด๋ฅผ ๊ตฌํํ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๊ฐ ๊ฒ์๋ฃธ์ ๊ณ ์ ํ ๋ฌผ๋ฆฌ์ ์ฅ๋ฉด์ ์ ๊ณตํ์ฌ ์๋ฎฌ๋ ์ด์ ์ ๊ณ์ฐํ๊ธฐ ์ ์ ์ธ์ ํ ๋ฐฉ์ ๋ฐ์ดํฐ์์ ์ฅ๋ฉด์ "์ญ์ "ํ ํ์๋ฅผ ์ ๊ฑฐํ์ต๋๋ค. ์ฒซ์งธ, ์์ฐ์ฑ์ด ํฌ๊ฒ ํฅ์๋์์ต๋๋ค. ๋์งธ, ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋ก์ด ๊ฒ์ ์์๋ฅผ ์ถ๊ฐํ ๋ ์ฅ๋ฉด ์ ๋ฆฌ ์ฝ๋์์ ์ค๋ฅ๋ฅผ ๋ฒํ๋ฉด ๋ฐ์ํ๋ ๋ชจ๋ ์ข ๋ฅ์ ๋ฒ๊ทธ๋ฅผ ์ ๊ฑฐํ ์ ์๊ฒ ๋์์ต๋๋ค. ์ด๋ฌํ ์ค๋ฅ๋ ๋๋ฒ๊ทธํ๊ธฐ ์ด๋ ค์ ์ผ๋ฉฐ ํ ๋ฐฉ์ ์ฅ๋ฉด์ ์๋ ๋ฌผ๋ฆฌ์ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ค๋ฅธ ๋ฐฉ์ผ๋ก "ํ๋ฅด๋" ๊ฒฐ๊ณผ๋ฅผ ๋ณ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค.
๋ํ ์ฐ๋ฆฌ๋ ๋ฌผ๋ฆฌ์ ์ฅ๋ฉด์ ์ฌ์ฉํ์ฌ ๋ฌผ๋ฆฌ์ ์ธ๊ณ์ ์ญ์ฌ๋ฅผ ์ ์ฅํ ์ ์๋์ง์ ๋ํด ๋ช ๊ฐ์ง ์ฐ๊ตฌ๋ฅผ ์ํํ์ต๋๋ค. ์ฆ, ์กฐ๊ฑด๋ถ๋ก ๊ฐ ๋ฐฉ์ ํ๋์ ์ฅ๋ฉด์ด ์๋ 30๊ฐ์ ์ฅ๋ฉด์ ํ ๋นํ๊ณ , ์ด๋ฅผ ์ํ ๋ฒํผ๋ก ๋ง๋ค์ด ์คํ ๋ฆฌ๋ฅผ ์ ์ฅํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด ์ต์
์ ์๋ํ๋ ๊ฒ์ผ๋ก ํ๋ช
๋์์ง๋ง ๊ตฌํํ์ง ์์์ต๋๋ค. ์์ฐ์ฑ์ด ํฌ๊ฒ ํฅ์๋์ง๋ ์์์ง๋ง ๋ค์ ์ํํ ๋ณ๊ฒฝ์ด ํ์ํ์ต๋๋ค. ๋๋ฌด ๋ง์ ์ฅ๋ฉด์ ์ฅ์๊ฐ ์์
ํ๋ฉด์ ์๋ฒ๊ฐ ์ด๋ป๊ฒ ๋์ํ ์ง ์์ธกํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ๋ฐ๋์ต๋๋ค.ํ์ฐํ์ง ์์๋ค๋ฉด ๊ณ ์น์ง ๋ง๋ผ.".
์ถ์ฒ : habr.com