서버/Node.js

PM2와 Node.js Cluster: 효율적인 프로세스 관리 가이드(4): PM2를 사용한 Node.js 클러스터링 설정 - 고급 기능 및 관리

JohnnyDeveloper 2024. 9. 1. 22:31

M2의 고급 기능을 활용하여 Node.js 애플리케이션의 클러스터링을 최적화하고, 로그 관리 및 세션 관리를 설정하는 방법을 다룹니다.

PM2를 사용한 Node.js 클러스터링 설정 - 고급 기능 및 관리

이전 파트에서 우리는 PM2의 기본 설치 및 클러스터링 설정에 대해 다루었습니다. 이번 파트에서는 PM2의 고급 기능을 활용하여 애플리케이션의 성능을 더욱 최적화하고, 로그 관리 및 세션 관리와 같은 중요한 기능들을 설정하는 방법을 살펴보겠습니다.

2.3 고급 기능

PM2는 기본적인 클러스터링 기능 외에도 다양한 고급 기능을 제공합니다. 이 기능들을 통해 애플리케이션의 가용성과 성능을 한층 더 강화할 수 있습니다.

2.3.1 애플리케이션 자동 재시작 및 장애 복구

PM2는 애플리케이션이 비정상적으로 종료되었을 때 자동으로 이를 재시작하는 기능을 기본적으로 제공합니다. 이 기능은 서비스의 가용성을 높이고, 예상치 못한 다운타임을 최소화하는 데 중요한 역할을 합니다.

pm2 start app.js --watch

위 명령어에서 --watch 옵션을 추가하면, 파일 시스템의 변경을 감지하여 애플리케이션을 자동으로 재시작합니다. 이 옵션은 개발 환경에서 특히 유용하며, 코드 변경 사항을 즉시 반영할 수 있습니다.

2.3.2 PM2 모니터링

PM2는 애플리케이션의 상태를 실시간으로 모니터링할 수 있는 다양한 도구를 제공합니다. 예를 들어, pm2 monit 명령어를 사용하면 CPU 및 메모리 사용량, 각 프로세스의 상태 등을 실시간으로 확인할 수 있습니다.

pm2 monit

이 명령어는 대시보드 형태로 시스템의 전반적인 상태를 보여주며, 문제가 발생할 경우 신속하게 대응할 수 있게 해줍니다.


2.4 로그 관리

애플리케이션의 로그는 서버 운영에 있어 매우 중요한 데이터를 제공합니다. PM2는 각 프로세스의 로그를 효율적으로 관리하고 분석할 수 있는 기능을 내장하고 있습니다.

2.4.1 실시간 로그 확인

실시간으로 로그를 확인하려면 다음 명령어를 사용합니다,

pm2 logs

이 명령어는 현재 실행 중인 모든 프로세스의 로그를 실시간으로 출력하며, 애플리케이션이 발생시키는 모든 로그를 모니터링할 수 있습니다.

2.4.2 로그 파일 관리

PM2는 자동으로 로그 파일을 관리하며, 일정 기간이 지나거나 파일 크기가 일정 수준을 초과하면 로그를 순환(rotate)할 수 있습니다. 이는 서버 디스크 공간을 효율적으로 사용하고, 오래된 로그가 서버 성능에 영향을 미치지 않도록 합니다.

pm2 start app.js --log-date-format="YYYY-MM-DD HH:mm Z"

위 명령어를 사용하면 로그에 날짜와 시간을 포함시켜 저장할 수 있으며, 이로 인해 나중에 로그를 분석할 때 더 유용한 정보를 얻을 수 있습니다.


2.5 세션 관리

Node.js 애플리케이션이 세션을 관리해야 하는 경우, 클러스터링된 여러 인스턴스 간에 세션을 공유하기 위한 방법이 필요합니다. PM2는 Redis와 같은 외부 스토리지와 쉽게 통합되어 클러스터 간 세션 관리를 가능하게 합니다.

2.5.1 Redis 설치 및 설정

먼저 Redis를 설치하고 Node.js 애플리케이션에서 사용할 수 있도록 설정해야 합니다. 다음 명령어를 사용하여 Redis를 설치합니다.

npm install redis

설치가 완료되면, 애플리케이션에서 Redis를 사용하여 세션을 관리할 수 있습니다.

2.5.2 Node.js에서 Redis 세션 관리 설정

애플리케이션 코드에서 Redis를 사용해 세션을 관리하도록 설정합니다. 이를 통해 클러스터링된 모든 인스턴스가 동일한 세션 데이터를 사용할 수 있습니다.

const session = require('express-session');
const RedisStore = require('connect-redis')(session);
const redis = require('redis');
const client = redis.createClient();

app.use(session({
  store: new RedisStore({ client }),
  secret: 'your-secret-key',
  resave: false,
  saveUninitialized: false
}));

이 코드는 Express.js를 사용한 예시로, 다른 프레임워크에서도 유사한 방식으로 Redis를 통해 세션을 관리할 수 있습니다.

 

다음글에서는 pm2와 세션괄리에 대해서 더 알아보겠습니다.

 

다음글:  https://johnny-developer-story.tistory.com/37