[Node.js_6기 사전캠프] 게임 서버 트랙에서 자바스크립트를 학습하는 이유

2024. 6. 25. 16:24[Node.js_6기 사전캠프]

1. Node.js 란 무엇인가?

- Node.js는 Chrome의 V8 JavaScript 엔진으로 빌드된 JavaScript 런타임 플랫폼이다. 이벤트 기반, 논블로킹 I/O 모델을 사용하는 만큼 가볍고 효율적인 특징을 가진다.

 

2. Node.js의 장점

- 단일 스레드(Single-Thread)의 논 블로킹(Non-blocking I/O) 이벤트 기반 비동기 방식으로 처리되기 때문에 높은 처리 성능을 가지고 있다.

- 내장 HTTP 서버 라이브러리를 포함하고 있기 때문에 별도의 소프트웨어 없이 동작이 가능하다.

- JavaScript 언어로 프론트엔드 뿐만 아니라 백엔드 개발 환경을 구성할 수 있기 때문에 생산성이 높으며, 러닝 커브가 줄어든다.

- 다양한 패키지 매니저를 기반으로 다양한 모듈(패키지)을 제공하며, 필요 라이브러리에 대해 설치하고 사용할 수 있기 때문에 효율성이 좋은 편이다.

☆ 논 블로킹(Non-blocking I/O)란?
I/O가 동작을 하면서 request를 받으면 바로 다음 처리에 요청을 보내 놓고 다른 작업을 처리하다가 먼저 요청한 작업이 끝나면 이벤트를 받아서 응답을 보내는 것을 의미한다.

 

3. Node.js의 단점

 

- Node.js의 모든 API는 비동기 기반의 처리 방식이기 때문에, 서버의 로직이 복잡한 경우 무한 콜백에 빠질 수 있다.

- 단일 스레드이기 때문에, 하나의 작업이 오래 걸리는 웹서비스의 경우 애플리케이션 성능이 저하될 수 있다.

- 해당 코드가 수행되기 전까지는 코드에서 에러가 났는지 확인이 불가능하다. 또한 에러가 발생할 경우 프로세스 자체가 내려갈 수 있기 때문에 주의가 필요하다.

- 세션을 공유할 경우 부가적인 인프라가 필요하다.

 

4. Node.js 로 게임 서버를 만든다면 어떤류의 게임에 적합한가?

- 하나의 언어로 프론트엔드와 백엔드 개발 환경을 모두 구성하는 경우

- 간단한 로직으로 구성된 서비스를 운영하는 경우

- 입출력(I/O)이 자주 발생하는 등 작고 빈번한 요청을 처리하는 서비스를 운영하는 경우

- 비동기 방식에 어울리는 서비스를 운영하는 경우 (ex. 스트리밍 서비스, 채팅 서비스)

- 빠르게 환경을 구성하여 개발해야 하는 경우