본문 바로가기
내일배움 과제/아티클 스터디

게임 서버 트랙에서 자바스크립트를 학습하는 이유

by GREEN나무 2024. 10. 16.
728x90

[주제]

게임 서버 개발자가 Javascript를 학습해야하는 이유

[아티클 요약]

1. Node.js란 무엇인가요?

Node.js Chrome V8 JavaScript 엔진을 기반으로 한 자바스크립트 런타임입니다. 이로 인해 자바스크립트를 브라우저 외부 환경에서도 사용할 수 있게 되며, 주로 웹 서버 구축에 사용됩니다.

 


2. Node.js의 장점

 

- 비동기 I/O 처리 : 비동기(non-blocking) I/O 방식을 사용하여 많은 클라이언트 요청을 빠르게 처리할 수 있습니다. 시간이 오래 걸리는 작업은 다른 작업에 방해되지 않도록 보류하고, 나머지 요청들을 먼저 처리합니다.


- 이벤트 기반 구조 : 적은 자원으로도 많은 동시 연결을 처리할 수 있습니다. 이는 서버의 효율성을 높여줍니다.


- 하나의 언어로 서버와 클라이언트 개발 : 서버와 클라이언트 모두 자바스크립트를 사용하기 때문에 개발 속도가 빨라지고, 코드 재사용이 유리합니다.


- NPM을 통한 풍부한 오픈소스 : NPM(Node Package Manager)을 통해 다양한 오픈소스 라이브러리와 모듈을 손쉽게 사용할 수 있으며, 커뮤니티 지원도 활발합니다.

 


3. Node.js의 단점

 

- CPU 집약 작업에서의 성능 저하 : Node.js는 단일 스레드에서 동작하기 때문에, 대규모 연산이나 복잡한 작업에는 성능이 저하될 수 있습니다.

- 비동기 코드 가독성 문제 : 비동기 처리 방식은 성능을 높여주지만, 콜백 헬(callback hell) 문제나 복잡한 흐름 관리로 인해 코드 가독성이 떨어질 수 있습니다.

- 라이브러리 문제 : NPM에는 수많은 라이브러리가 있지만, 모든 라이브러리가 안정적이지 않거나 지속적인 유지보수가 되지 않을 수 있습니다. 신중한 선택과 관리가 필요합니다.


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


CPU 집약적인 게임이나 복잡한 연산이 필요한 게임에서는 적합하지 않습니다.
서버의 부하가 적고 실시간 상호작용을 요구하는 멀티플레이 게임에 적합합니다.


- 실시간 멀티플레이 게임 : FPS, MOBA, 실시간 전략 게임(RTS)처럼 빠른 동기화가 필요한 게임에서 Node.js의 비동기 처리와 이벤트 기반 구조는 유용합니다.

- 소셜 및 캐주얼 게임 : 대규모 사용자 트래픽을 처리하는 소셜 게임이나 서버 부담이 적은 퍼즐 게임에서 Node.js의 효율성을 극대화할 수 있습니다.

- 턴 기반 멀티플레이 게임 : 체스, 카드 게임, 보드게임 등 턴 방식의 게임에서는 실시간 처리보다 서버 부하가 적으므로, Node.js의 이벤트 기반 구조가 적합합니다.

 

[인사이트]

새롭게 알게 된 점 : Node.js는 비동기(non-blocking) I/O를 기본으로 하여 이벤트 루프 방식으로 처리해서 많은 클라이언트 요청을 빠르게 처리할 수 있다는 걸 배웠습니다.
Node.js는 단일 스레드에서 동작하기 때문에 CPU 집약적인 작업에서는 성능이 저하될 수 있어 대규모 연산이나 복잡한 작업에는 적합하지 않을 수 있지만 별도로 스레드를 처리하게 만들어 해결할 수 있다는 걸 배웠습니다.

앞으로의 방향성 : 앞으로 Node.js의 장점을 최대한 활용해 실시간 멀티플레이어 게임 서버 개발에 집중할 계획입니다. FPS, MOBA, 소셜 게임과 같은 장르를 염두에 두고, 서버의 비동기 처리와 이벤트 기반 구조를 효율적으로 설계할 것입니다. 단일 스레드 환경에서 발생할 수 있는 성능 저하 문제를 해결하기 위해 별도의 스레드 처리 방식이나 다른 서버 기술과의 혼합 사용도 고려할 예정입니다. NPM을 통한 오픈소스 활용으로 개발 속도와 효율성을 높이되, 안정적인 라이브러리 선택에 신경 써야 하겠고요. 궁극적으로, Node.js의 특성에 맞는 게임 서버를 설계하여, 다양한 유저가 원활하게 소통하고 즐길 수 있는 멀티플레이어 게임을 개발하는 것이 목표입니다.

 

팀원 전체의 인사이트

 

 

[공통 인사이트]

Node.js의 처리방식의 단점(복잡한 로직 처리 불리, 콜백 중첩과 메모리 누수등으로 인한 게임 불안정)을 보완하는 공부를 해야겠습니다.
 

[의미 있었던 의견]

많은 연산을 하면 서버가 버벅거릴 것이라고만 생각했는데 게임 실행 중에 콜백 함수 중첩, 메모리 누수, 런타임 에러 등으로 게임을 불안정하게 될 거라고 자세하게 공부하신 점을 배워야겠습니다.
게임 서버로 Node.js를 사용하는지 알 수 있는 방법이 있을까 궁금했습니다. 게임 서버를 어떻게 구현했는지 알 수는 없으나 게임사 채용사이트에서 서버 개발자 구인 공고에서 무슨 기술 요구하는지 보면 추측할 수 있습니다.

별도로 스레드를 처리하게 만들어 해결할 수 있다는 점을 생각 못 했었는데, 그렇게 할 수 있다면 싱글스레드의 장점과 멀티스레드의 장점을 모두 취할 수 있는 좋은 방법이 될 거 같다는 생각이 들었습니다.

 

 

 

 

https://teamsparta.notion.site/1102dc3ef5148065a132c7293f576455

 

게임 서버 트랙에서 자바스크립트를 학습하는 이유 | Notion

게임 서버 개발자가 Javascript를 학습해야하는 이유는 무엇일까요?

teamsparta.notion.site

https://www.notion.so/241015-120fbd856e498058bfe5d862ce9e6b30

 

[241015] 아티클 스터디 템플릿 : 게임 서버 트랙에서 자바스크립트를 학습하는 이유 | Notion

선정 아티클

marshy-warlock-62e.notion.site