Studying/JavaScript & Frameworks

[Node.js 떠먹여 주는 남자] Node.js 의 장점

국장 지킴이 앨런 2022. 3. 20. 09:00
반응형

안녕하세요, 다시 Node.js 찍먹편으로 돌아오게 됐습니다. 그 이유는, 이 포스트에서 처음 Node.js 를 찍어 먹을 때, 장점에 대하여 간단하게 소개해 드렸지만, 정작 그 장점들이 Node.js 를 사용하게 만드는 지에 대해서는 제대로 생각을 해보지 않았기 때문이죠.

2022.03.04 - [Studying/Node.js & Express.js] - Node.js 찍먹편 (1) - Node.js 는 무엇인가?

 

[Node.js 찍먹] Node.js 는 무엇인가?

Node.js 가 뭔가요? 대체 왜 개발자들은 Node.js 에 열광하나요? 이번 포스트에서는 Node.js 를 찍먹(?) 해보려고 합니다. 최근 이직을 해야겠다 결심을 하였고, 연습 삼아 몇 군데의 회사에 지원해 보았

cre8iveallen.tistory.com

그리 하여, 이번 포스트에서 Node.js 의 장점들이 어떠한 의미를 갖는지에 대하여 조금 더 자세히 찍먹 해보려고 합니다. 그럼 시작해 보도록 하겠습니다.

Node.js 의 장점

빠른 처리 능력과 이벤트 기반의 모델

 

V8 엔진

예전 찍먹 편에서도 언급했듯이, Node.js 는 크롬의 V8 엔진이 탑재 되었습니다. V8 엔진은 C++ 언어로 개발 되었으며, 본래 크롬 브라우저를 위하여 개발 되었는데, 자바스크립트 언어로 쓰여진 펑션들을 머신 코드로 컴파일 하기 위해 사용됩니다. 구글은 V8 엔진을 개발한 이래 지속적으로 퍼포먼스 향상을 위해 노력하고 있습니다.

출처: https://v8.dev/blog/10-years

위의 차트에서 볼 수 있듯, V8 엔진의 벤치 스코어는 지속적으로 상승하는 추세를 보였고, 특히 13년도에는 엄청난 향상을 보였습니다. 이 퍼포먼스의 향상은 Node.js 의 퍼포먼스 향상에 직접적인 영향을 끼치게 됩니다.

 

논블로킹 I/O 그리고 비동기식 요청 처리 (asynchronous request handling)

비동기식으로 딜레이 없이 요청 처리가 가능합니다. 동기식 프로세싱의 경우 순차적으로 코드를 실행시키기 때문에, 각 리퀘스트에 대한 처리가 끝날 때까지 쓰레드를 차지하고 있기 때문에, 다른 리퀘스트들은 그 이전의 리퀘스트의 처리가 끝날 때까지 기다려야 합니다. 비동기식 처리 방식은 이와 반대로 각각의 리퀘스트들이 기다릴 필요 없이 처리가 되며, 이는 Non-blocking I/O 라고 합니다. 따라서, 리퀘스트가 처리 된 후, 콜백 펑션 (callback function) 을 통하여 응답 하고, 지속적으로 리퀘스트들을 처리합니다. 이러한 방식이 Node.js 가 싱글 쓰레디드방식을 활용하는 데 도움이 되므로, 짧은 응답 시간과 동시 처리가 가능하게 됩니다.

 

이벤트 기반의 모델

또 다른 측면은 이벤트 기반 모델입니다. 클라이언트/서버 측 모두에 공통 언어를 사용하는 경우 동기화가 빠르게 발생하므로 이벤트 기반 실시간 애플리케이션에 특히 유용합니다. 비동기식, non-blocking, 단일 쓰레드 특성으로 인해 Node.js는 온라인 게임, 채팅, 화상 회의 또는 지속적으로 업데이트되는 데이터가 필요한 모든 솔루션에 널리 사용됩니다.

 

마이크로서비스에 적합한 확장성

Node.js 는 가볍기 때문에, 마이크로서비스 아키텍쳐에 사용하기에 적합한 툴입니다.

(마이크로서비스 아키텍처와 모놀리틱 아키텍처에 관한 설명은 아래의 포스트에서 확인 하실 수 있습니다.)

2022.03.10 - [Studying/Cloud & Architecture] - [아키텍처 찍먹] Monolithic Architecture vs. Microservices Architecture

그렇다면 가볍다 (lightweight) 는 의미는 무엇일까요?

  • 코드 혹은 애플리케이션이 동작할 때 최소한의 메모리 리소스를 소비.
  • 웹, 모바일, 데스크탑 등과 같은 플랫폼 전반에 걸쳐 구현을 용이하게 해줌.

라고 생각할 수 있겠습니다.

 

한가지 예를 보면, 월마트는 Node.js 로 백엔드를 구성하며 마이크로서비스 아키텍처를 구현하였는데, 이를 통하여 몇가지의 즉시 이점을 얻었는데 다음과 같습니다:

  • 블랙 프라이데이에 다운 타임 없이 100% 가동 (5억 개 이상의 페이지 뷰 처리).
  • 하드웨어 비용 최대 40%, 전체 운영 비용을 20% 에서 50% 절감.

이처럼 마이크로서비스 아키텍처로의 구현이 점점 늘어감에 따라 Node.js 또한 사용 빈도가 늘어가고 있습니다.

 

리치 에코시스템

Node.js 에는 npm 이라는 기본 패키지 매니저가 설치 되어 있습니다. 이 패키지 매니저를 통하여 무수히 많은 패키지 설치가 가능하고, 제 개인적인 경험으로도 대부분의 기능들을 npm 패키지 매니저를 통하여 구현할 수 있었습니다. 

 

원활한 JSON 지원 

PHP 나 Ruby on Rails 와 같은 백엔드 테크놀러지도 통신에 JSON 형식을 사용할 수 있지만, 특히 Node.js는 바이너리 모델 간 변환 없이 이를 수행하며 JavaScript를 사용합니다. 이는 특히 NoSQL 데이터베이스 기반의 RESTful API 를 개발할 때 유용합니다.

 

이렇게 Node.js 의 장점들에 대하여 조금 더 자세하게 알아보았습니다. 마치기 전에 한가지 더 말씀 드리자면 (저 또한 오랫동안 잘못 알고 있었던 부분입니다) Node.js 는 프레임워크나 라이브러리가 아니고 크롬의 V8 자바스크립트 엔진 기반의 런타임 환경입니다.

 

모든 것에는 장점이 있으면 단점도 있을 터, 다음 포스트에서는 Node.js 의 단점에 대해서 찍먹 해보도록 하겠습니다. 그럼

이 포스트는 제가 그동안 공부했던 내용 + The Good and the Bad of Node.js Web App Development (https://www.altexsoft.com/blog/engineering/the-good-and-the-bad-of-node-js-web-app-development/) 의 내용을 참고하여 작성하였습니다.

반응형