본문 바로가기

Node.js

[Node.js] Node.js(노드) 란?

 

 

 

1. Node.js 란? 

 

노드의 공식 사이트에서는 노드를 다음과 같이 설명함

"Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다.

Node.js는 이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적입니다.

Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다."

 

 

Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다.

 

1) 서버로서의 노드

  • 노드는 서버 애플리케이션을 실행하는데 제일 많이 사용됨
  • 노드는 자바스크립트 애플리케이션이 서버로서 기능하기 위한 도구를 제공하므로 서버 역할을 수행할 수 있음
  • 노드가 싱글스레드, 논블로킹 모델을 사용하므로 노드 서버 또한 동일한 모델
  • 노드는 내장된 웹서버를 사용할 수 있음(서버 규모가 커질 시 nginx 등 웹 서버를 노드 서버와 연결)

 

① 노드의 장단점

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

 

② 서버로서 노드 사용하기

👍 네트워크나 데이터베이스, 디스크 작업 같은 I/O에 특화되어 있기 때문에 개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는데 적합

👍 실시간 채팅 애플리케이션이나 주식차트, JSON 데이터를 제공하는 API 서버가 노드를 많이 사용함

👎 이미지/비디오 처리, 대규모 데이터 처리같은 CPU를 많이 사용하는 작업을 위한 서버로는 권장하지 않음

 

③ 노드로 서비스를 운영하는 대표적인 기업

미국항공우주국(Nasa), 에어비앤비, 우버, 넷플릭스, 링크드인 등

페이팔, 월마트, 이베이 등 결제 시스템

 

 

 

2) 자바스크립트 런타임

- 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 해줌

- 노드 기반 대표적인 웹 프레임워크로 Angular, React, Vue, Meteor 등이 있음

 

 

 

 

2. Node.js 특징

 

Node.js는 이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적입니다.

 

 

노드는 V8엔진과 libuv 라이브러리를 사용함

V8과 libuv는 C와 C++로 구성되어 있음, 우리가 코딩한 자바스크립트 코드를 노드가 알아서 V8과, libuv에 연결해줌

libuv라이브러리는 노드의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현함

 

1) 이벤트 기반(event-driven)

이벤트(예: 클릭, 네트워크 요청)가 발생할 때 미리 지정해둔 작업을 수행하는 방식

 

  • 이벤트 루프

이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할 담당

노드가 종료 될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 불림

 

  • 태스크 큐

이벤트 발생 후 호출되어야 할 콜백 함수들이 기다리는 공간

콜백들이 이벤트 루프가 정한 순서대로 줄을 서 있으므로 콜백 큐라고도 부름

 

  • 백그라운드

타이머나 I/O 작업 콜백 또는 이벤트 리스너들이 대기하는 곳

 

 

 

2) 논블로킹 I/O

  • 이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있음
  • 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 그 함수가 다시 태스크 큐를 거쳐 호출 스택으로 올라오기를 기다리는 방식
  • 이전 작업이 완료될 때까지 멈추지 않고 다음 작업을 수행함을 의미
  • 하지만 싱글 스레드라는 한계 때문에 자바스크립트의 모든 코드가 이 방식으로 시간적 이득을 볼 수 있는 것은 아님
  • 파일 시스템 접근(파일 읽기/쓰기, 폴더 만들기 등)이나 네트워크 요청같은 I/O 작업 시 노드는 논블로킹 방식으로 동작함

 

 

3) 싱글스레드

  • 노드는 싱글 스레드(<-> 멀티 스레드, 여러 개의 스레드가 일을 나눠서 처리)
  • 주어진 작업을 혼자 처리해야함
  • 사실 노드 프로세스도 내부적으로는 스레드를 여러개 가지고 있지만 우리가 제어할 수 있는 스레드는 하나뿐이므로 흔히 싱글스레드라고 부름
  • 노드는 스레드를 늘리는 대신 프로세스 자체를 복사해 여러 작업을 동시에 처리하는 멀티 프로세싱 방식을 택함