본문 바로가기
개발/FRONT

node.js 서버로서의 노드

by 잠킴98 2024. 1. 7.
반응형

 

노드가 싱글 스레드, 논블로킹 모델을 사용하므로 노드 서버 또한 동일한 모델일 수밖에 없습니다. 따라서 노드 서버의 장단점은 싱글 스레드, 논블로킹 모델의 장단점과 크게 다르지 않습니다.

 

싱글 스레드여서 멀티 스레드 방식보다는 컴퓨터 자원을 적게 사용하는 장점이 있지만, CPU 코어를 하나밖에 사용하지 못하는 단점도 있습니다.

 

노드 서버는 I/O가 많은 작업에 적합합니다. 노드는 libuv 라이브러리를 사용하여 I/O 작업을 논블로킹 방식으로 처리해줍니다. 따라서 스레드 하나가  많은 수의 I/O를 혼자서도 감당할 수 있습니다. 하지만 CPU 부하가 큰 작업에는 적합하지 않습니다.

 

싱글 스레드 방식의 프로그래밍은 멀티 스레드 방식보다 상대적으로 쉽습니다. 서버 프로그래밍에 익숙하지 않은 사람도 쉽게 입문할 수 있습니다. 하지만 싱글 스레드이다 보니 하나뿐인 스레드가 에러로 인해 멈추지 않도록 잘 관리해야 합니다. 에러를 제대로 처리하지 못하면 서버 전체가 멈추기 때문입니다.

 

또한, 웹 서버가 내장되어 있어 입문자가 쉽게 접근할 수 있습니다. 노드 외의 서버를 개발하다 보면 Apache, nginx, IIS처럼 별도의 웹 서버를 설치해야 하는 경우가 많습니다. 심지어 Tomcat 같은 웹 애플리케이션 서버(WAS)를 추가로 설치하는 경우도 있습니다. 이 경우 프로그래밍 외에도 웹 서버와 WAS 사용법을 익혀야 합니다. 하지만 노드는 내장된 웹 서버를 사용하면 되므로 편리합니다. 하지만 나중에 서버 규모가 커지면 결국 nginx 등의 웹 서버를 노드 서버와 연결해야 합니다.

 

노드 사용자들이 말하는 가장 큰 장점은 언어로 자바스크립트를 사용한다는 것입니다.

 

웹 브라우저도 자바스크립트를 사용하므로 서버까지 노드를 사용하면 하나의 언어로 웹 사이트를 개발할 수 있습니다. 이는 개발 생산성을 획기적으로 높여주었고, 생산성이 중요한 기업이 노드를 채택하는 이유가 되었습니다.

 

노드는 생산성은 매우 좋지만, Go처럼 비동기에 강점을 보이는 언어나 nginx처럼 정적 파일 제공, 로드 밸런싱에 특화된 서버에 비해서는 속도가 느립니다. 그렇긴 해도 극단적인 성능이 필요하지 않다면 이러한 단점은 노드의 생산성으로 어느 정도 극복할 수 있습니다. 자바스크립트를 사용하기 때문에 얻을 수 있는 소소한 장점도 있습니다.

 

요즘은 XML 대신 JSON을 사용해서 데이터를 주고 받는데, JSON이 자바스크립트 형식이어서 노드에서는 쉽게 처리할 수 있습니다.

 

노드의 장단점

장점 단점
멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용
싱글 스레드라서 CPU 코어를 하나만 사용함
I/O 작업이 많은 서버로 적합  CPU 작업이 많은 서버로는 부적합
멀티 스레드 방식보다 쉬움  하나뿐인 스레드가 멈추지 않도록 관리해야 함
웹 서버가 내장되어 있음 서버 규모가 커졌을 때 서버를 관리하기 어려움
자바스크립트를 사용함 어중간한 성능
JSON 형식과 호환하기 쉬움  



이와 같은 특성을 활용하려면 노드를 어디에 사용해야 할까요? 개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는 데 적합합니다. 

 

네트워크나 데이터베이스, 디스크 작업 같은 I/O에 특화되어 있기 때문입니다. 실시간 채팅 애플리케이션이나 주식 차트, JSON 데이터를 제공하는 API 서버가 노드를 많이 사용합니다.


노드가 아무리 좋다고 하더라도 추천하지 않는 경우도 있습니다. 이미지나비디오 처리, 대규모 데이터 처리 같이 CPU를 많이 사용하는 작업을 위한서버로는 권장하지 않습니다. 노드보다 더 적합한 다른 언어 서버가 많습니다. 요즘은 AWS Lambda나 Google Cloud Functions 같은 서비스에서 노드로 CPU를 많이 사용하는 작업을 처리하는 것을 지원합니다. 


그렇다면 실생활과 밀접한 쇼핑몰, 블로그 같은 웹 사이트에는 적합할까요? 이런 사이트는 보통 기본적인 틀이 있고, 그 안의 내용물(텍스트, 이미지)만 조금씩 달라집니다. 노드가 다른 서버 언어에 비해 이러한 콘텐츠를 제공하는 데 장점이 뚜렷하지는 않습니다. 하지만 그렇다고 적합하지 않다는 것도 아닙니다. Pug나 EJS 같은 템플릿 엔진을 통해서 다른 언어와 비슷하게 콘텐츠를 제공할 수 있습니다. 

 

안정성과 보안성 측면의 문제도 이미 충분히 검증되었습니다. 규모가 큰 곳을 꼽자면 미국항공우주국(NASA), 에어비엔비, 우버, 넷플릭스, 링크드인 등에서 노드를 사용하고 있습니다. 페이팔, 월마트, 이베이 같이 결제 시스템
을 사용하는 대기업들도 노드로 서비스를 운영합니다.

 

 

서버외의 노드

 

처음에는 대부분 노드를 서버로 사용했지만, 노드는 자바스크립트 런타임이기 때문에 용도가 서버에만 한정된 것은 아닙니다. 사용 범위가 점점 늘어나 웹, 모바일, 데스크톱 애플리케이션 개발에도 사용되기 시작했습니다.


노드 기반으로 돌아가는 대표적인 웹 프레임워크로는 Angular과 React,Vue, Meteor 등이 있습니다. Angular는 구글 진영에서 프런트엔드 앱을 만들 때 주로 사용하고, React는 페이스북 진영에서 주로 사용합니다. 

 

모바일 개발 도구로는 React Native와 Ionic Framework를 많이 사용합니다. 페이스북, 인스타그램, 에어비앤비, 월마트, 테슬라 등이 React Native를 사용하여 모바일 앱을 운영 중입니다. 데스크톱 개발 도구로는 Electron이 대표적입니다.

 

Electron으로 만들어진 프로그램으로는 Atom, Slack, Discord 등이 있습니다.

 

흔히 쓰는 에디터인 비주얼 스튜디오 코드도 Electron으로 만들어졌습니다.

반응형