Node.js에 대해서 알아보고 게임 개발에서 어떻게 사용되는지 어떤 게임에 적합한지 알아보았다.
1. Node.js 는 무엇인가?
Node.js는 비동기
이벤트 기반 JavaScript 런타임
이다.
노드는 구글의 V8 JavaScript 엔진 + libuv
에 기반하여 싱글스레드
기반 비동기 이벤트 위주 IO를 사용하는 고도의 확장성을 가진 시스템이다.
비동기를 알아보기 전, 동기와 비동기에 대해 알아보자.
👉🏻 동기식 처리 모델(Synchronous Processing Model) 은직렬적으로 일을 처리
한다.
즉, 요청이 들어오면 순차적으로 작업을 수행하고, 해당 작업이 수행중이면 다음 작업은 대기한다.
👉🏻 비동기식 처리 모델(Asynchronous Processing Model or Non-Blocking Processing Model) 은 반대로 병렬적으로 일을 처리
한다.
즉, 요청이 들어오면 해당 요청에 의한 작업이 끝나지 않아도 계속 요청을 받고 작업이 끝났다는 이벤트가 오면 해당 요청을 바로 처리한다.
햄버거 가게로 비유를 하자면,
런타임(Runtime)은 '어떤 프로그램이 실행되고 있는 동안의 동작'을 가리킨다.
👉🏻 런타임(Runtime)
즉, Node.js는 병렬처리 방식을 사용하는 입출력(I/O) 이벤트 기반으로 작동하는 방식이고, 일종의 JavaScript 실행기라는 것을 알 수 있다.
2. Node.js 등장 배경
그렇다면 왜 JavaScript를 웹 브라우저 밖으로 꺼내온걸까?
JavaScript 자체의 편리함과 생산성
으로 인해 백엔드 역할을 하는 Node.js로 JavaScript 실행기가 더해진다면 프론트엔드 영역은 물론 백엔드까지 개발 영역이 확장되어 풀스택 개발이 수월해지기 때문
이다.
3. Node.js 장/단점
👍🏻 Node.js의 장점
👎🏻 Node.js의 단점
4. 어떤 게임 서버에 적합할까?
프로토타입 개발에 사용되거나 대표적으로 떠오르는건 퍼즐게임이나 수집형 게임이 생각난다.
퍼즐게임의 경우 스테이지 방식으로 구성되어 있고, 네트워크를 사용한다면 다른 유저의 랭킹이나 프로필, 친구 추가, 선물 등 실시간이 아닌 이미 처리된 내용을 보고 있기 때문에 떠올랐다.
수집형 게임도 퍼즐게임과 마찬가지지만 다른 점이 있다면 실시간 플레이어간 전투(PVP) 이다.
이 부분에서는 수집형 게임의 전투 방식에 따라 달라질 것 같지만 서머너즈워, 에픽세븐, 브라운더스트 등 턴제 형식의 게임에서 쓰일 것 같다.
참고 자료
1. Node.js의 핵심 개념과 장단점 정리
2. Node.js의 기초(내부 아키텍처, 이벤트루프와 워커, 비동기의 이해)
3. Node.js 메인 - 정보
4. 16년차 개발자가 말하는 Node.js를 선택해야 하는 이유
5. 동기와 비동기? 무슨 차이일까?
6. [OS] 런타임과 런타임 환경
7. Node.js란 무엇인가? - Javascript Runtime의 이해
7. Node.js란? Node.js의 점유율이 빠르게 높아지는 이유