노드를 서버로 사용할 때의 특징과 장단점을 알아볼 것이다.
노드가 싱글 스레드, 논블로킹 모델을 사용하므로 노드 서버 또한 동일한 모델일 수밖에 없다.
노드 서버는 I/O가 많은 작업에 적합하다. 노드는 libuv 라이브러리를 사용하여 I/O 작업을 논블로킹 방식으로 처리해준다. 따라서 스레드 하나가 많은 수의 I/O를 혼자서도 감당할 수 있다.
하지만 CPU 부하가 큰 작업에서는 적합하지 않다.
싱글 스레드 방식의 프로그래밍은 멀티 스레드 방식보다 상대적으로 쉽다. 서버 프로그래밍에 익숙하지 않은 사람도 쉽게 입문할 수가 있다. 하지만 싱글 스레드이다 보니 하나뿐인 스레드가 에러로 인해 멈추지 않도록 잘 관리해야 한다. 에러를 제대로 처리하지 못하면 서버 전체가 멈춘다.
웹 서버가 내장되어 있어 입문자가 쉽게 접근할 수 있다. 노드 외의 서버를 개발하다 보면 Apache, nginx, IIS처럼 별도의 웹 서버를 설치해야 하는 경우가 많다. 심지어 Tomcat 같은 웹 어플리케이션 서버 (WAS)를 추가로 설치하는 경우도 있다. 이 경우 프로그래밍 외에도 웹 서버와 WAS 사용법을 익혀야 한다. 하지만 노드는 내장된 웹 서버를 사용하면 되므로 편리하다. 하지만 나중에 서버 규모가 커지면 결국 nginx 등의 웹서버를 노드 서버와 연결해야 한다.
가장 큰 장점은 언어로 자바스크립트를 사용한다는 것이다. 웹 브라우저도 자바스크립트를 사용하므로, 하나의 언어로 웹사이트를 개발할 수 있다. 개발 생산성을 획기적으로 높여주었고, 생산성이 중요한 기업이 노드를 채택하는 이유가 되었다.
노드는 생산성은 매우 좋지만, Go처럼 비동기에 강점을 보이는 언어나 nginx처럼 정적 파일 제공, 로드 밸런싱에 특화된 서버에 비해서는 속도가 느리다. 하지만 극단적인 성능이 필요하지 않다면 이러한 단점은 노드의 생산성으로 어느 정도 극복할 수 있다.
자바스크립트를 사용하기 때문에, JSON이 자바스크립트 형식이어서 노드에서는 쉽게 처리할 수 있다.
장점 | 단점 |
멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함 | 싱글 스레드라서 CPU 코어를 하나만 사용함 |
I/O 작업이 많은 서버로 적합 | CPU 작업이 많은 서버로는 부적함 |
멀티 스레드 방식보다 쉬움 | 하나뿐인 스레드가 멈추지 않도록 관리해야함 |
웹 서버가 내장되어 있음 | 서버 규모가 커졌을 때 서버를 관리하기 어려움 |
자바스크립트를 사용함 | 어중간한 성능 |
JSON 형식과 호환하기 쉬움 |
이와 같은 특성을 활용하려면, 노드는 어디에 사용해야 할까. 개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는 데 적합하다. 네트워크나 데이터베이스, 디스크 작업 같은 I/O에 특화되어 있기 때문이다. 실시간 채팅 앱이나 주식 차트, JSON 데이터를 제공하는 API 서버가 노드를 많이 사용한다.
노드가 아무리 좋다고 하더라도 추천하지 않는 경우도 있다. 이미지나 비디오 처리, 대규모 데이터 처리 같이 CPU를 많이 사용하는 작업을 위한 서버로는 권장하지 않는다. 노드보다 더 적합한 다른 언어 서버가 많다. 요즘은 AWS Lambda난 Google Cloud Functions 같은 서비스에서 노드로 CPU를 많이 사용하는 작업을 처리하는 것을 지원한다.
실생활과 밀접한 쇼핑몰, 블로그와 같은 웹 사이트에는 적합할까? 이런 사이트는 보통 기본적인 틀이 있고, 그 안의 내용물(텍스트, 이미지)만 조금씩 달라진다. 노드가 다른 서버에 비해 이러한 콘텐츠를 제공하는 데 장점이 뚜렷하지는 않는다. 하지만 적합하지 않다는 것도 아니다. Pug나 EJS 같은 템플릿 엔진을 통해서 다른 언어와 비슷하게 콘텐츠를 제공할 수 있다.
안정성과 보안성 측면의 문제도 이미 충분히 검증되었다. 규모가 큰 곳을 꼽으면 NASA, 에어비엔비, 우버, 넷플릭스, 링크드인 등에서 노드를 사용하고 있다. 페이팔, 월마트, 이베이 같이 결제 시스템을 사용하는 대기업들도 노드로 서비스를 운영한다.
'👻 Review > 도서 후기' 카테고리의 다른 글
처음 배우는 ReactNative (0) | 2021.08.07 |
---|---|
[Node.js 교과서 정리] 1. 핵심 개념 (0) | 2021.05.21 |