Node.js에 맞지 않는 시나리오와 단점!
그렇다면, 이렇게 빠르게 개발이 가능한 Node.js 기반 환경에 어울리지 않는 환경은 어떠한 서비스 영역인가?
그러합니다.
서버에서 복잡한 알고리즘을 구사하거나 CPU 계산이 많거나, 메모리를 많이 사용하는 형태이거나, 문자열 처리가 많은 형태의 서비스에는 Node.js는 상당히 부적합합니다.
싱글 스레드 방식이어서... CPU의 부하가 많이 발생하면, 응답 시간도 늦어지게 되고. 전체적인 진행상 그다지 효과적이지 않게 됩니다.
일반적으로 Node.js 기반으로 개발하고 있는 환경을 조사해보면 현재 ( 2017년 5월 기준 )는 대략 이런 환경으로 사용하고 있습니다.
SPA(Single Page Application) 기반의 페이지 호출을 통해서 응답 페이지를 구성하고 이때에 템플릿과 라우팅 형태로 구현된 구성이 일반적이며.
Node.js와 MongoDB, Express, AngularJS를 대부분 사용하는 것으로 조사됩니다.
RESTFul API 게이트웨이나 호출 등을 할 수 있는 API 브릿지에도 매우 적합한 형태들이죠.
좀 더 구체적으로 세분화하면 위와 같이 정리가 됩니다.
인증 관련된 로직 구현이 패스포트 기반으로 잘되어진 모듈을 쉽게 구할 수 있기 때문에 이 기반 위에 위에 나열된 형태로 사용되는 경우가 대부분입니다.
그런데, 문제는 Node.js의 최대 단점인 '예외처리'가 부실하거나 빠져있는 경우에는 서비스 자체가 죽어버립니다. 그래서 보통은 이 서비스들을 '죽으면 다시 실행'하는 유틸리티를 사용합니다.
Forever를 주로 사용했지만, PM2가 워낙에 강력해서 현재는 대부분 PM2로 교체 운용합니다.
또한, Node.js에 적절한 OS로 우분투가 많이 사용되며, Upstart 스크립트에 이런 OS부팅후에 실행되는 형태를 정의해두고 있습니다.
기본적인 Node.js 서비스는 이 형태로 구현됩니다.