JavaScript 알아보기(2)- 게임 서버와 JS

노승현·2024년 6월 25일

내일배움 사전캠프

목록 보기
9/38

게임 서버는 서버의 일종이기 때문에 프로그램으로 생각하면 된다.
또한 프로그램은 프로그래밍 언어와 프레임워크로 구성된다.
어떠한 언어와 프레임워크로 구성할지에 대한 선택은
프로그램의의 특성, 요구하는 성능에 따라 다를 수 있다.

이번 Node.js 트랙에서
가벼운 클라이언트와 연동해 동작하는 서버를 빠르게 만들어 보기 위해 Node.js를 학습해 볼 예정이다.

이번 트랙에선
정확히 동작하는 것에 중점을 두고 개발하는 것이 목표다.
그리고 개발과 확인의 과정을 빠르게 이터레이션 돌며 게임 서버의 여러 구색을 갖추는 것을 목표로 한다.
그러므로 Node.js의 어떤 특징들이 게임서버를 만드는데 도움이 되는지 생각해 볼 필요가 있다.


Node.js란?

먼저 Node.js에 대해 알아볼 것이다.

이전 아티클에서도 다뤘듯이 Node.js는 JavaScript의 실행환경(런타임 환경) 중 하나다.

그렇다면 Node.js는 무엇인가?
Node.js는 JavaScript의 실행환경이라고 한다. (JavaScript 코드를 브라우저 밖에서 실행하게 해주는 런타임 환경)
사실 뒤에 .js가 붙기 때문에 Node.js 든 Express.js든 Vue.js든 모두 같은 프레임워크 비스무리 한게 아닌가 라고 생각했는데, 그게 아니었던 것이다.

런타임 환경(Runtime Environment, RTE)

런타임(runtime)은 컴퓨터 과학에서 컴퓨터 프로그램이 실행되고 있는 동안의 동작을 말하는데, 구체적으로 말하면 "해당 프로그램이 필요한 시스템 자원을 할당 받고 실제로 시스템 자원을 사용해 어떤 처리를 하는 것"을 말한다. 보통 런타임을 위한 운영체제는 실행이 처음 시작될
런타임 환경은 애플리케이션이 운영체제의 '시스템 자원'에 액세스 할 수 있도록 해주는 실행 환경
애플리케이션은 런타임 환경을 통해 프로세서에 명령을 보낼 수 있고, 시스템 리소스를 접근하고 사용하는데, 이런 런타임 환경같은 매개체가 없으면 애플리케이션 프로그램은 시스템 리소스에 접근할 수 없다.

이렇게 글을 봤을 때 내가 생각하기에
컴퓨터 안에 있는 것을 애플리케이션, 런타임 환경, 시스템 자원 이 세가지로 구분한다 했을 때 사람이 창고 안에 있는 물건을 꺼내기 위해 문을 연다고 생각했을 때,
애플리케이션(사람)이 시스템 자원(창고 내 자원)을 얻기 위해 런타임 환경(창고 문)을 거쳐야 한다는 것으로 생각해볼 수 있을 것 같다.

런타임 환경에 대해 공부해 보았는데, Node.js는 가장 오래된, 인기 있는 개발 환경으로 알 수 있다.
Node.js의 사이트를 찾아가보면 "Run JavaScript EveryWhere"라는 문구가 바로 앞에 적혀 있다. JavaScript를 어디서든 실행이 가능하다는 것인데, 원래 JavaScript가 HTML 내부에서만 실행이 가능했던 것을 생각하면 되게 좋은 것으로 볼 수 있다.

Node.js 장점

1) Node.js는 모든 요구사항에 대해 새로운 쓰레드를 만들지 않고 하나의 프로세스 안에 작동한다는 것이다.

  • 이 부분은 시스템 자원을 최대한 적게 쓰면서 빠르게 애플리케이션의 리퀘스트를 받아 보내준다는 것으로 보인다.

2) Node.js는 브라우저용 JS를 작성하는 수백만명의 프론트엔드 개발자가 다른 언어를 배울 필요 없이 클라이언트 측 코드 외에 서버 측 코드로 작성 가능하다는 유니크한 이점이 있다.

  • 이전 아티클에서 적었던 Express.js와 Nest.js를 생각해보면 다른 JavaScript 런타임 환경들과 비교해보면 Node.js 환경에 맞는 웹 프레임워크와 라이브러리가 다수 존재한다. 이러한 것을 개발자 생태계가 건강하다고 하는데, 개발자들이 많은 툴, 프레임 워크, 라이브러리 및 모듈을 활용할 수 있다. 이런 생태계가 개발자 커뮤니티의 활성화를 만들어 낼 수 있다. 물론 다른 런타임 환경에서도 호환이 될 수도 있겠지만, 안되는 경우가 더 많을 거라 생각한다.

Node.js 단점

1) 단일 쓰레드 모델

  • Node.js는 CPU 집약적 작업에선 성능이 저하될 수 있다는 것을 의미한다. 애플리케이션이 CPU 집약적 작업을 수행할 경우에는 멀티쓰레드 환경이 더 적합하다.

2) 불안정성
Node.js는 상대적으로 런타임 오류가 많다.
Node.js는 비동기식 프로그래밍을 하기 때문에 콜백함수를 통해 비동기적인 프로그래밍을 컨트롤하는데, 콜백함수를 잘못 사용하거나 예외 처리를 충분히 신경쓰지 않으면 애플리케이션에서 예기치 않은 동작이 발생하기 때문에, 코드 안정성을 보장하기 위해 주의가 필요하다.

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

확실하게 어떤 게임이 적합하다고 생각하기가 어렵다. 왜냐하면 어떤 게임의 서버가 어떤 개발환경으로 만들어졌는지 잘 모르기 때문이다.
그래도 굳이 생각해보면 단일 쓰레드인 점을 생각해보면 수박 게임, 공튀기기 게임 같은 1인 퍼즐 게임에 랭킹같은 것을 만드는 식이나 It takes two 같은 2인용 퍼즐 게임도 괜찮을 것 같다고 생각한다.

참조
https://gf0308.tistory.com/13
https://pso62.tistory.com/entry/NodeJS%EC%9D%98-%EC%9E%A5%EC%A0%90%EA%B3%BC-%EB%8B%A8%EC%A0%90

0개의 댓글