Node.js에 대해 알아보자

Daehyeon Yun·2024년 8월 7일

💡 Node.js란 무엇일까?

NodeJS는 오픈 소스 플랫폼으로 JS를 서버 측에서 실행하는 플랫폼이다.

🔥 Node.JS의 주요 특징

  1. 비동기 I/O 모델 : Node.js는 비동기 I/O 기반으로 사용자의 다양한 요청을 동시에 처리할 수 있다.
  2. 빠른 속도 : Chrome V8 엔진을 사용하여 JS 코드를 빠르게 실행할 수 있다.
  3. 확장성 : 클러스터링 방식을 통해 여러 서버에 코드를 분산할 수 있다.
  4. 유연성 : 다양한 오픈 소스 라이브러리와 모듈을 제공하여 개발자들이 필요한 기능을 쉽게 추가하고 활용할 수 있다.
  5. 단일 스레드 : 단일 스레드 모델을 사용하지만 비동기 I/O 모델을 통해 여러 요청을 효율적으로 처리할 수 있다.
  6. JavaScript 사용 : 서버 측 개발을 자바스크립트로 수행하기에 러닝 커브가 낮다.
  7. NPM 패키지 관리 시스템 : NPM 은 라이브러리와 모듈을 쉽게 설치하고 관리할 수 있다.

🤔 Node.js에서 클러스터링?

Node.js에서 클러스터링(Clustering) 멀티 코어 GPU를 활용하여 애플리케이션의 성능과 확장성을 향상 시키는 방법을 말한다. 이를 통하여 여러 개의 프로세스를 생성하고 요청을 분산 처리할 수 있다.

클러스터링은 아래와 같은 방식으로 구현된다.

  1. 마스터 프로세스(Master Process) : 클러스터링을 관리하는 주체로서 워커 프로세스(Worker Process)를 생성하고 관리한다.
  2. 워커 프로세스(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만의 커뮤니티로 문제 해결과 최신 트렌드를 공유하는데 매우 큰 도움이 된다.
profile
열심히 살아야지

0개의 댓글