장점
- 싱글 스레드 기반 비동기IO 처리로 매우 빠른 고성능 서버다.
- 브라우저 외 다른 용도의 서버로 사용이 가능하다.
- restart 시간이 1초 미만이여서 프로세스가 종료가 되어도 다시 빠르게 시작할 수 있고, 빠른 배포와 업그레이드 작업이 가능하다.
- JavaScript는 Java 같은 언어 대비 같은 서버 코드를 짜도 걸리는 시간이 적어서 생산성이 좋다.
- 싱글 스레드여서 스레드간의 동기화 처리 등 복잡한 과정을 생략할 수 있다.
- Apache나 nginx와 같은 도움 없이 HTTP 서버 라이브러리를 포함하여 웹 서버 동작이 가능하다.
- Socket.io를 통해서 싱글 스레드 멀티 플렉싱 기반으로 대량의 사용자에 대한 Push 처리를 가능하게 한다. (WAS는 스레드 수 만큼 밖에 동시 커넥션 처리를 할 수 없다.)
- npm을 통해서 어떠한 기능들을 모듈을 이용해서 구현을 할 수 있다.
단점
- 싱글 스레드 기반이기 때문에, 하나의 작업이 오래 걸리면 전체 시스템의 성능이 저하된다.
- 코드 가독성이 Java에 비해서 낮기 때문에 유지 보수가 어려울 수 있다. (CallBack지옥)
- 스크립트 특성 상 실행이 되어야만 에러가 나는지 확인을 할 수 있으며, 에러가 발생하면 서버가 죽는다.
- 멀티 코어 머신에서 CPU 사용을 최적화 할 수 없다. 설계 시 클러스터 모듈을 이용해서 하나의 서버에서 노드 프로세스를 사용하는 모델을 갖고 있어야 한다.
- 세션을 공유하려면 redis 같은 추가 인프라가 필요하다.
- V8엔진은 gc기반 메모리 관리를 하여, gc 시 CPU 사용률이 급증하여, 서버가 죽을 수 있다.
- 노드 전용 모듈의 고급 기능이 적어서 세밀한 가용성 구현이 어렵다.
- 이벤트 기반 프로그래밍으로 전환하는 데 오래걸린다.
출처: https://hyoveemo.tistory.com/33