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) 싱글스레드
- 노드는 싱글 스레드(<-> 멀티 스레드, 여러 개의 스레드가 일을 나눠서 처리)
- 주어진 작업을 혼자 처리해야함
- 사실 노드 프로세스도 내부적으로는 스레드를 여러개 가지고 있지만 우리가 제어할 수 있는 스레드는 하나뿐이므로 흔히 싱글스레드라고 부름
- 노드는 스레드를 늘리는 대신 프로세스 자체를 복사해 여러 작업을 동시에 처리하는 멀티 프로세싱 방식을 택함
'Node.js' 카테고리의 다른 글
[Node.js] SQLite 데이터를 MariaDB로 마이그레이션하기 (0) | 2023.11.06 |
---|---|
[Node.js] 노드에서 시퀄라이즈(Sequelize)로 db다루기 (0) | 2023.11.02 |
[Node.js] Express 프로젝트 만들기 (0) | 2023.10.30 |
[Node.js] http 모듈로 웹서버 만들기 (0) | 2023.10.26 |
[Node.js] 노드 내장 객체와 모듈 (0) | 2023.10.24 |