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