[Node.js] 서버로서의 노드 & 서버 외의 노드

Jyunee·2023년 12월 21일
0

Node.js

목록 보기
2/6

서버로서의 노드

노드를 서버로 사용할 때의 장단점에 대해 알아보자.

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

<장점>

  • 서버에는 기본적으로 I/O 요청이 많이 발생하므로, I/O 처리를 잘하는 노드를 서버로 사용하면 좋다.
  • 노드는 (논블로킹 방식으로 코드를 작성했다는 가정 하에) libuv 라이브러리를 사용해 I/O 작업을 논블로킹 방식으로 처리한다.
  • 따라서 스레드 하나가 많은 수의 I/O를 혼자서도 감당할 수 있다.

<단점>

  • 하지만 노드는 CPU 부하가 큰 작업에는 적합하지 않다. 작성하는 코드는 모두 스레드 하나에서 처리된다.
  • 코드가 CPU 연산을 많이 요구하면 스레드 하나가 혼자서 감당하기 어렵다.

이와 같은 특성을 활용하려면 노드를 어디에 사용해야 할까?

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

노드 12 버전에서 워커 스레드 기능의 안정화로 멀티 스레드 작업을 할 수 있게 되었지만, 멀티 스레드 프로개밍을 하는 것은 싱글 스레드의 비해 난이도가 높다. 스레드가 작업을 나눠서 처리할 수 있게 직접 나눠주는 것이 상당히 어렵다. 또한, 멀티 스레드 프로그래밍을 하더라도 C, C++, Rust, Go와 같은 언어에 비해 속도가 많이 느리다.

따라서 멀티 스레드 기능이 있따고 하더라도 이미지나 비디오 처리, 대규모 데이터 처리와 같이 CPU를 많이 사용하는 작업을 위한 서버로는 권장하지 않는다. 노드보다 더 적합한 다른 언어 서버가 많다. 굳이 노드로 하고 싶다면, 요즘은 AWS 람다(AWS Lambda)나 구글 클라우드 펑션스(Google Cloud Functions) 같은 서비스에서 노드로 CPU를 많이 사용하는 작업을 처리한다는 사실을 고려해볼 필요가 있다.

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

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

노드 언어의 장단점

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

노드는 생산성을 매우 좋지만, Go처럼 비동기에 강점을 보이는 언어나 nginx처럼 정적 파일 제공, 로드 밸런싱에 특화된 웹 서버에 비해서는 속도가 느리다. 그렇긴 해도 극단적인 성능이 필요하지 않다면 이러한 단점은 노드의 생산성으로 어느 정도 극복할 수 있다.

자바 스크립트를 사용함으로써 얻을 수 있는 소소한 장점도 있다. 요즘은 XML 대신 JSON을 사용해서 데이터를 주고받는데, JSON이 자바스크립트 형식이므로 노드에서 쉽게 처리할 수 있다.

정리

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

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

안전성과 보안성 측면의 문제도 이미 충분히 검증되었다. 미국항공우주국(NASA), 에어비엔비, 우버, 넷플릭스, 링크드인 등 세계 유수의 기관과 기업에서 노드를 사용하고 있다. 페이팔, 월마트, 이베이와 같이 결제 시스템을 사용하는 대기업들도 노드로 서비스를 운영한다. 국내에서도 네이버, 카카오, 위메프, 야놀자 같은 기업들이 노드를 사용한다.

서버 외의 노드

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

노드 기반으로 돌아가는 대표적인 웹 프레임워크로는 Angular, React, Vue 등이 있다.

  • 앵귤러는 구글 진영에서 프론트엔드 앱을 만들 때 주로 사용한다.
  • 리액트는 페이스북 진영에서 주로 사용한다.

모바일 개발 도구로는 리액트 네이티브(React Native)를 많이 사용한다.

  • 페이스북, 인스타그램, 핀터레스트, 월마트, 테슬라 등이 리액트 네이티브를 사용해 모바일 앱을 운영 중이다.

데스크톱 개발 도구로는 일렉트론(Electron)이 대표적이다.

  • 일렉트론으로 만들어진 프로그램으로는 Aton, Slack, Discord 등이 있다.
  • 비주얼 스튜디오 코드도 일렉트론으로 만들어졌다.

0개의 댓글

관련 채용 정보