특성
1. Single Thread
✅ 노드 프로세스는 멀티 스레드지만 사용자가 직접 제어할 수 있는 스레드는 하나이기 때문에 싱글 스레드.
- Single Thread라 주어진 일을 하나밖에 처리하지 못한다.
- 대신 Non-blocking I/O 기능으로 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능하다.
- Single Thread 모델은 에러를 처리하지 못하는 경우 멈춘다.
- 프로그래밍 난이도가 쉽고, CPU, 메모리 자원을 적게 사용한다.
✅ 멀티 스레드 활용 가능(Node 14ver.)
- 멀티 스레드를 사용할 수 있도록 worker_threads 모듈 도입
- CPU를 많이 사용하는 작업인 경우에 활용 가능
2. Non-blocking I/O - 비동기 방식

- Blocking(= Synchronous): 이전 작업이 끝나야만 다음 작업을 수행
- Non-blocking(= Asynchronous): 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행
- Node.js 표준 라이브러리의 모든 I/O 메서드를 Non-blocking인 비동기 방식을 제공
3. Event-Driven
✅ 이벤트가 발생할 때 미리 지정해 둔 작업을 수행하는 방식
- Event e.g. 클릭, 네트워크 요청, 타이머 등
- Event listener: 이벤트를 등록하는 함수
- Callback function: 이벤트가 발생했을 때 실행될 함수
function first() {
second();
console.log('first');
}
function second() {
third();
console.log('second');
}
function third() {
console.log('third');
}
first();
// 결과
// third
// second
// first
3-1. Event Loop
✅ Event Loop
- 이벤트 발생 시 호출할 콜백 함수들을 관리하고 호출할 순서를 결정
- 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복
✅ Thread-Pool(Background threads)
- 타이머나 I/O 작업(DB, File System, Network) 콜백, 이벤트 리스너들이 대기하는 공간
- 여러 작업이 동시에 실행될 수 있음
✅ Task queue
- 이벤트 완료 후 콜백 함수들이 순서대로 기다리는 공간

역할
1. 서버로서의 노드
✅ 노드는 서버를 구성할 수 있게 하는 모듈을 제공
✅ 노드 서버의 장점
- I/O 작업이 많은 서버에 적합하다. (빠른 실행 가능)
- 실시간 SNS 서비스, 데이터 중심의 서비스 등에 적합하다.
- Multi Thread 방식보다 쉽고 컴퓨터 자원을 적게 사용한다.
✅ 노드 서버의 단점
- CPU 작업이 많은 서버로는 부적합하다. but, 노드 14부터 멀티 스레드를 사용할 수 있도록 모듈 도입.
- 싱글 스레드로 만들어졌기 때문에 멈추지 않도록 잘 관리해야 한다.
>> 페이팔, 넷플릭스, 나사, 월마트, 링크드인, 우버 등에서 메인 또는 서브 서버로 사용중.
2. 서버 외의 노드
✅ 자바스크립트 런타입이기 때문에 용도가 서버에만 한정되지 않는다.
✅ 웹, 모바일, 데스크탑 애플리케이션에도 사용 가능
- 웹 프레임워크: Angular, React, Vue, Meteor
- 모바일 앱 프레임워크: React Native
- 데스크탑 개발 도구: Electron(Atom, Slcak, VSCod, Discord 등 제작)
'Dev > Node.js' 카테고리의 다른 글
| [Node.js] 06 - REPL/JS 파일 사용법 (0) | 2024.04.22 |
|---|---|
| [Node.js] 05 - AJAX / JSON (1) | 2024.04.22 |
| [Node.js] 04 - async/await (0) | 2024.04.22 |
| [Node.js] 03 - Promise (1) | 2024.04.22 |
| [Node.js] 02 - Callback (3) | 2024.04.22 |