더북(TheBook)

1.2 서버로서의 노드

이 절에서는 노드를 서버로 사용할 때의 특성과 장단점을 알아보겠습니다.

노드는 기본적으로 싱글 스레드, 논블로킹 모델을 사용하므로(자바스크립트 언어의 특성이기도 합니다), 노드 서버 또한 동일한 모델일 수밖에 없습니다. 따라서 노드 서버의 장단점은 싱글 스레드, 논블로킹 모델의 장단점과 크게 다르지 않습니다.

서버에는 기본적으로 I/O 요청이 많이 발생하므로, I/O 처리를 잘하는 노드를 서버로 사용하면 좋습니다. 노드는 (여러분이 논블로킹 방식으로 코드를 작성했다는 가정하에) libuv 라이브러리를 사용해 I/O 작업을 논블로킹 방식으로 처리합니다. 따라서 스레드 하나가 많은 수의 I/O를 혼자서도 감당할 수 있습니다. 하지만 노드는 CPU 부하가 큰 작업에는 적합하지 않습니다. 여러분이 작성하는 코드는 모두 스레드 하나에서 처리됩니다. 코드가 CPU 연산을 많이 요구하면 스레드 하나가 혼자서 감당하기 어렵습니다.

이와 같은 특성을 활용하려면 노드를 어디에 사용해야 할까요? 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는 데 적합합니다. 네트워크나 데이터베이스, 디스크 작업 같은 I/O에 특화되어 있기 때문입니다. 실시간 채팅 애플리케이션이나 주식 차트, JSON 데이터를 제공하는 API 서버가 노드를 많이 사용합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.