[nodejs] Node.js 프로세스 관리

Node.js는 비동기 이벤트 기반 아키텍처를 특징으로 하는 JavaScript 런타임 환경입니다. Node.js를 사용하면 서버 사이드 애플리케이션을 개발할 수 있고, 강력한 기능을 제공합니다. 그러나 Node.js 애플리케이션을 운영 중인 서버에서 프로세스를 관리해야 하는데, 이를 위해 몇 가지 중요한 도구와 기법이 있습니다.

PM2 (Process Manager 2)

PM2는 Node.js 애플리케이션을 관리하기 위한 강력한 프로세스 관리자입니다. PM2를 사용하면 다음과 같은 기능을 수행할 수 있습니다:

PM2는 간단한 명령어로 Node.js 애플리케이션을 시작하고 관리할 수 있어, 많은 개발자들이 선호하는 도구입니다.

# 애플리케이션 시작
pm2 start app.js

# 현재 실행 중인 애플리케이션 목록 확인
pm2 list

# 애플리케이션 모니터링
pm2 monit

Systemd

시스템에서 Node.js 애플리케이션을 백그라운드로 실행하고 관리하기 위해 Systemd를 사용할 수 있습니다. Systemd는 리눅스 시스템에서 init 프로세스의 역할을 하는 데몬입니다. Systemd를 사용하여 Node.js 애플리케이션을 시작, 중지, 모니터링하고 자동으로 재시작할 수 있습니다.

Systemd를 사용하여 Node.js 애플리케이션을 관리하려면 unit 파일을 생성해야 하며, 해당 파일에 애플리케이션 실행에 필요한 정보를 정의해야 합니다.

Process Clustering

Node.js는 클러스터링을 통해 여러 코어를 사용하여 애플리케이션의 성능을 향상시킬 수 있습니다. 클러스터링을 사용하면 단일 Node.js 프로세스보다 크기가 더 큰 작업을 처리할 수 있으며, 프로세스 간의 작업을 분산시켜 성능을 향상시킬 수 있습니다.

클러스터링을 구현하려면 Node.js의 내장 모듈 cluster를 사용하여 작업자 프로세스를 생성하고 관리해야 합니다.

// 클러스터링을 이용한 Node.js 애플리케이션 예제
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`마스터 프로세스 ${process.pid}이 시작되었습니다.`);

  // CPU 코어의 개수만큼 워커 프로세스 생성
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`워커 프로세스 ${worker.process.pid}이 종료되었습니다.`);
  });
} else {
  // 워커 프로세스가 실제 작업을 수행
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hello, World!\n');
  }).listen(8000);
}

Node.js의 프로세스 관리에 대해 알아보았습니다. PM2, Systemd 및 클러스터링을 통해 Node.js 애플리케이션을 효과적으로 운영하고 관리할 수 있습니다.