Node.js - 자바스크립트 런타임의 구조, 비동기 처리의 핵심
2025. 4. 13. 16:23ㆍLanguage/JavaScript
1. Node.js란?
: Node.js는 Chrome V8 엔진 위에서 동작하는 자바스크립트 런타임 환경이다.
- 브라우저 밖에서 자바스크립트를 실행할 수 있게 해줌
- 비동기 I/O, 이벤트 기반 구조로 고성능 서버 개발에 적합
- 단일 스레드 기반으로 동시성 처리에 유리한 구조
"Node.js는 자바스크립트를 이용해 서버를 만들 수 있게 해주는 플랫폼"
2. Node.js의 핵심 아키텍처 : 단일 스레드 & 이벤트 루프
📌 단일 스레드 모델
- Node.js는 기본적으로 싱글 스레드 구조지만, 내부적으로는 멀티스레드를 활용한다 (libuv 기반)
📌 이벤트 루프 (Event Loop)
- Node.js의 비동기 처리를 가능하게 만드는 핵심 구조
- 요청 -> 처리할 수 없으면 등록 -> 다음 요청 처리 -> 완료되면 콜백 큐에서 실행
📌 이벤트 루프 단계 (Simplified)
- Imers : setTimeout, setInerval
- Pending Callbacks : 일부 I/O 콜백
- Idle, Prepare
- Poll : I/O 이벤트 확인
- Check : setImeediate
- Close Callbacks
console.log('Start');
setTimeout(() => {
console.log('Timeout callback');
}, 0);
console.log('End');
출력 순서
Start
End
Timeout callback
3. Node.js의 런타임 구성요소
| 구성 요소 | 설명 |
| V8 엔진 | 자바스크립트 실행 (브라우저와 동일) |
| libuv | 이벤트 루프, 비동기 I/O, 스레드 풀 관리 |
| C/C++ 바인딩 | 네이티브 모듈 호출 가능 |
| Node API | fs, http, process 등 내장 API 제공 |
4. 주요 개념 정리 : Non-blocking I/O
📌 블로킹 I/O 예
const fs = require('fs');
const data = fs.readFileSync('/file.txt'); // 작업이 끝날 때까지 기다림
📌논블로킹 I/O 예
fs.readFile('/file.txt', (err, data) => {
if (err) throw err;
console.log(data.toString());
});
- Node는 I/O 요청을 스레드 풀에 던지고, 처리 완료시 콜백으로 결고 전달
5. 실무에서 자주 등장하는 개념
- Process와 Thread의 차이
- 콜백 지옥 -> Promise -> async/await 흐름
- 클러스터링 (clustor 모듈로 멀티코어 활용)
- Express 등 프레임워크 없이 순수 Node로 API 서버 만들기
- npm/yarn과 모듈 시스템 (CommonJS vs ESM)
6. 마무리 요약
- Node.js는 자바스크립트를 백엔드에서 사용할 수 있게 해주는 런타임
- 핵심은 싱글 스레드 + 논블로킹 I/O + 이벤트 루프 구조
- CPU-bound 작업보다는 I/O-bound 작업에 최적화