웹개발 - Node.js 와 게임 개발

윤수빈·2024년 6월 25일
0
post-custom-banner

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)

  • 어떤 프로그램이 필요한 시스템 자원(RAM, 시스템 변수, 환경변수 등)을 할당받고 실제로 시스템 자원을 사용하여 어떤 처리를 하는 행위이다.
  • 프로그램이 메모리에 로드되었을 때 시작되고, 메모리에 로드되는 작업은 보통 소프트웨어와 개발언어안에 있는 컴파일러나 로더 애플리케이션에 의해 처리된다.

📄 정리

즉, Node.js는 병렬처리 방식을 사용하는 입출력(I/O) 이벤트 기반으로 작동하는 방식이고, 일종의 JavaScript 실행기라는 것을 알 수 있다.


2. Node.js 등장 배경

그렇다면 왜 JavaScript를 웹 브라우저 밖으로 꺼내온걸까?
JavaScript 자체의 편리함과 생산성으로 인해 백엔드 역할을 하는 Node.js로 JavaScript 실행기가 더해진다면 프론트엔드 영역은 물론 백엔드까지 개발 영역이 확장되어 풀스택 개발이 수월해지기 때문이다.


3. Node.js 장/단점

👍🏻 Node.js의 장점

  • 높은 생산성과 편리함
  • 낮은 진입장벽 (C/C++ 보다 상대적 쉬움 - JSON 형식 호환, 자바스크립트 사용 등..)
  • 방대한 커뮤니티 (다양한 패키지 공유)
  • 싱글 스레드 방식이기 때문에 컴퓨터 자원을 적게 사용
  • 싱글 스레드 이벤트 루프를 통해 처리성능이 높음
  • I/O 작업이 많은 서버에 적합

👎🏻 Node.js의 단점

  • 싱글스레드 방식으로 CPU 작업이 많은 서버로 부적합
  • 규모가 커질수록 관리가 어려움
  • 스레드 관리가 필요

4. 어떤 게임 서버에 적합할까?

  • 시간이 촉박한 상황이거나 MVP(Minimum Viable Product)가 있어야 하는 상황
  • 모든 리퀘스트가 3초안에 처리되지만 실시간이 아니어도 되는 경우
  • http 베이스

프로토타입 개발에 사용되거나 대표적으로 떠오르는건 퍼즐게임이나 수집형 게임이 생각난다.

퍼즐게임의 경우 스테이지 방식으로 구성되어 있고, 네트워크를 사용한다면 다른 유저의 랭킹이나 프로필, 친구 추가, 선물 등 실시간이 아닌 이미 처리된 내용을 보고 있기 때문에 떠올랐다.

수집형 게임도 퍼즐게임과 마찬가지지만 다른 점이 있다면 실시간 플레이어간 전투(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의 점유율이 빠르게 높아지는 이유

profile
정의로운 사회운동가
post-custom-banner

0개의 댓글