← Lab
Node.js에 대해 알아보자
스터디2024.08.07
- Node.js
- Express
- JavaScript

💡 Node.js란 무엇일까?
NodeJS는 오픈 소스 플랫폼으로 JS를 서버 측에서 실행하는 플랫폼이다.
🔥 Node.JS의 주요 특징
- 비동기 I/O 모델 : Node.js는 비동기 I/O 기반으로 사용자의 다양한 요청을 동시에 처리할 수 있다.
- 빠른 속도 :
Chrome V8엔진을 사용하여 JS 코드를 빠르게 실행할 수 있다. - 확장성 :
클러스터링방식을 통해 여러 서버에 코드를 분산할 수 있다. - 유연성 : 다양한 오픈 소스 라이브러리와 모듈을 제공하여 개발자들이 필요한 기능을 쉽게 추가하고 활용할 수 있다.
- 단일 스레드 : 단일 스레드 모델을 사용하지만 비동기 I/O 모델을 통해 여러 요청을 효율적으로 처리할 수 있다.
- JavaScript 사용 : 서버 측 개발을 자바스크립트로 수행하기에 러닝 커브가 낮다.
- NPM 패키지 관리 시스템 :
NPM은 라이브러리와 모듈을 쉽게 설치하고 관리할 수 있다.
🤔 Node.js에서 클러스터링?
Node.js에서
클러스터링(Clustering)멀티 코어 GPU를 활용하여 애플리케이션의 성능과 확장성을 향상 시키는 방법을 말한다. 이를 통하여 여러 개의 프로세스를 생성하고 요청을 분산 처리할 수 있다.
클러스터링은 아래와 같은 방식으로 구현된다.
마스터 프로세스(Master Process): 클러스터링을 관리하는 주체로서워커 프로세스(Worker Process)를 생성하고 관리한다.워커 프로세스(Worker Process): 실제 서버를 구축하는 프로세스로서,마스터 프로세스(Master Process)로부터 작업을 할당받아 요청을 처리한다.
클러스터링의 사용 예시는 아래와 같다.
const cluster = require('cluster');
const http = require('http');
const cpuNumbers = require('os').cpus().length;
// 마스터와 워커 프로세스 구분
if(cluster.isMaster){
// 마스터 프로세스 지정
console.log(`Master Process ${process.pid} is running`);
// 워커 프로세스 생성
for(let i = 0; i < cpuNumbers; i++){
cluster.fork();
}
// 이벤트 리스너
cluster.on("exit", (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died`);
});
} else {
// 워커 프로세스에 각각 HTTP 서버 실행
http.createServer((req, res) => {
res.writeHead(200);
res.end("Hello World");
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
❗ 클러스터링의 장단점
- 장점
- 성능 향상 : 여러 CPU 코어를 활용하여 동시에 여러 작업을 처리할 수 있어 애플리케이션의 성능을 향상시킬 수 있다.
- 확장성 : 서버의 트래픽이 증가하거나 부하가 높아질 때, 추가적인 워커 프로세스를 생성하여 처리할 수 있는 작업량을 늘릴 수 있다.
- 안정성 : 워커 프로세스 중 하나가 실패하더라도 다른 워커 프로세스들이 계속 동작하고 있어 안정성이 좋다. 실패한 워커 프로세스는 새로운 워커 프로세스로 대체할 수 있다.
- 단점
- 구현 복잡성 : 클러스터링을 구현하려면 마스터 프로세스와 워커 프로세스간의 상호작용을 관리하는 코드를 작성해야 한다. 이로 인해 코드가 복잡해질 수 있다.
- 상태 공유의 어려움 : 워커 프로세스는 독립적인 프로세스이므로, 서로 간의 상태를 공유하는 것이 어렵다. 이를 해결하기 위해서 외부 데이터베이스나 메시징 시스템 등을 사용해야 할 수 있다.
🔥 다른 백엔드 프레임워크와 비교한 Node.js의 장점
- Node.js는 빠른 개발 속도, 확장성, 다양한 패키지 생태계를 제공하여 웹 개발에 매우 최적화 되어있다. 특히,
Express.js는 가장 많이 사용되는 백엔드 프레임워크 중 하나로, 최소한의 코드로 웹 애플리케이션을 구축할 수 있다는 점이 있다. - 방대한 Node.js만의 커뮤니티로 문제 해결과 최신 트렌드를 공유하는데 매우 큰 도움이 된다.