SHIN STORYSHIN STORY
홈포스트C#TypeScriptNext.jsNode.js시리즈
</>SHIN STORY

sdf

탐색

  • 홈
  • 모든 포스트
  • 시리즈
  • 검색

카테고리

  • C#
  • TypeScript
  • Next.js
  • Node.js
  • 알고리즘
  • 개발 도구

© 2025 Shin Blog. All rights reserved.

GitHubRSS
목록으로
Node.js#Node.js#Backend

PM2로 Node.js 프로세스 관리하기

SHIN

2026년 5월 1일1분 읽기0
📚

Node.js 실전 팁 20선

20편
  1. 3Node.js Stream으로 대용량 파일 처리하기
  2. 4Worker Threads로 CPU 집약 작업 처리하기
  3. 5cluster 모듈로 멀티코어 CPU 100% 활용하기
  4. 6child_process로 외부 명령 실행하기
  5. 7fs/promises로 파일 시스템 다루기
  6. 20Node.js Event Loop 완전 정복
  7. 20Node.js path 모듈 완전 정복
  8. 20환경 변수 관리 — .env, dotenv, 그리고 검증
  9. 20EventEmitter 패턴으로 느슨한 결합 구현하기
  10. 20Node.js crypto 모듈로 해싱과 암호화 구현하기
  11. 20Node.js 메모리 누수 찾고 수정하기
  12. 20Express 미들웨어 패턴과 에러 처리
  13. 20Node.js CJS vs ESM 모듈 시스템 완전 정리
  14. 20Node.js Buffer와 인코딩 완전 가이드
  15. PM2로 Node.js 프로세스 관리하기현재
  16. 20Node.js HTTP 서버 직접 구현하기
  17. 20Node.js 성능 프로파일링 실전 가이드
  18. 20Node.js npm 스크립트 완전 활용하기
  19. 20Node.js 보안 체크리스트 10가지
  20. 20Node.js 테스팅 전략 — 단위, 통합, E2E 테스트

PM2로 Node.js 프로세스 관리하기

PM2는 Node.js 앱을 프로덕션에서 안정적으로 운영하기 위한 프로세스 매니저입니다.

설치 및 기본 명령

CODE
npm install -g pm2

pm2 start app.js                   # 앱 시작
pm2 start app.js --name myapp      # 이름 지정
pm2 list                           # 실행 중인 프로세스 목록
pm2 stop myapp                     # 중지
pm2 restart myapp                  # 재시작
pm2 delete myapp                   # 삭제
pm2 logs myapp                     # 로그 보기
pm2 monit                          # 실시간 모니터링

ecosystem.config.js — 설정 파일

CODE
module.exports = {
  apps: [
    {
      name: 'api-server',
      script: './dist/server.js',
      instances: 'max',          // CPU 코어 수만큼
      exec_mode: 'cluster',      // 클러스터 모드
      watch: false,
      max_memory_restart: '500M',
      env: {
        NODE_ENV: 'development',
        PORT: 3000,
      },
      env_production: {
        NODE_ENV: 'production',
        PORT: 80,
      },
      log_date_format: 'YYYY-MM-DD HH:mm:ss',
      error_file: './logs/error.log',
      out_file: './logs/out.log',
      merge_logs: true,
    },
  ],
};
CODE
pm2 start ecosystem.config.js --env production

시스템 재시작 시 자동 시작

CODE
pm2 startup          # 자동 시작 설정 명령어 출력
# 출력된 명령어 실행 (sudo 포함)

pm2 save             # 현재 프로세스 목록 저장

Graceful Reload (무중단 배포)

CODE
pm2 reload myapp   # 클러스터 모드: 한 번에 하나씩 재시작
CODE
// 앱에서 SIGINT 처리
process.on('SIGINT', () => {
  server.close(() => {
    console.log('서버 정상 종료');
    process.exit(0);
  });
});

로그 관리

CODE
pm2 install pm2-logrotate   # 로그 로테이션 플러그인

pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30      # 30일 보관
pm2 set pm2-logrotate:compress true

환경별 실행

CODE
pm2 start ecosystem.config.js --env production
pm2 start ecosystem.config.js --env development

pm2 + Docker

CODE
FROM node:20-alpine
RUN npm install -g pm2
WORKDIR /app
COPY package*.json .
RUN npm ci --production
COPY . .
CMD ["pm2-runtime", "ecosystem.config.js", "--env", "production"]

pm2-runtime은 Docker 환경에서 컨테이너가 포그라운드를 유지하도록 설계된 버전입니다.

공유
S

SHIN

.NET 개발자입니다

GitHub
Node.js Buffer와 인코딩 완전 가이드

이전 포스트

Node.js Buffer와 인코딩 완전 가이드

다음 포스트

Node.js HTTP 서버 직접 구현하기

Node.js HTTP 서버 직접 구현하기

같은 카테고리 포스트

Node.js 테스팅 전략 — 단위, 통합, E2E 테스트

Node.js 테스팅 전략 — 단위, 통합, E2E 테스트

2026년 5월 6일· 2분
Node.js 보안 체크리스트 10가지

Node.js 보안 체크리스트 10가지

2026년 5월 5일· 2분
Node.js npm 스크립트 완전 활용하기

Node.js npm 스크립트 완전 활용하기

2026년 5월 4일· 1분

댓글