PM2 무중단 서비스 /클러스터

Rudy·2022년 11월 21일
0

Node.js 싱글 스레드

Node.js는 기본적으로 싱글 스레드(thread)로 돌아간다.

Node.js 애플리케이션은 단일 CPU 코어에서 실행되기 때문에 CPU의 멀티코어 시스템은 사용할 수 없다.

그래서 만약 서버의 사양이 8코어이며 16쓰레드면, 프로그램을 돌리는데 최대 16개 코어를 사용 할 수 있지만, 노드는 싱글 스레드 이기 때문에 모든 코어를 사용하지 못해 최대 성능을 내지 못하는, 즉 자원을 제대로 활용하지 못한다.

그래서 Node.js는 이런 문제를 해결하기 위해 클러스터(Cluster) 모듈Visit Website을 통해 단일 프로세스를 멀티 프로세스(Worker)로 늘릴 수 있는 방법을 제공한다. 개발자는 클러스터 모듈을 사용해서 마스터 프로세스에서 코어 수만큼 워커 프로세스를 생성해서 모든 코어를 사용하게끔 로직을 짜면, 자원 낭비 없이 서버를 돌릴수 있다.

PM2 모듈

PM2는 P(Process) M(Manager) 2의 약자로 NodeJS 프로세서를 관리하는 원활한 서버 운영을 위한 패키지 이다.

  • 서비스를 제공하고 있는 도중 갑자기 서버가 중지되도 서버를 다시 켜준다
  • Node.js는 싱글 스레드 기반이지만, 멀티 코어 혹은 하이퍼 스레딩을 사용할수 있게 해준다
  • 클라이언트로부터 요청이 올 때 알아서 요청을 여러 노드 프로세스에 고르게 분배한다. (로드 밸런싱)

개발할 떄 우리가 자주쓰는 Nodemon 사용한다면 배포할 떄는 pm2 사용한다.

설치

$ npm install -g pm2 # pm2 설치
$ yarn add -g pm2 # pm2 설치

module.exports = {
 
   /* apps 항목은 우리가 pm2에 사용할 옵션을 기재 */
   apps: [
      {
         name: 'projectName', // app이름
         script: './index.js', // 실행할 스크립트 파일
         instances: 2, // cpu 코어수 만큼 프로세스 생성 (instance 항목값을 ‘0’으로 설정하면 CPU 코어 수 만큼 프로세스를 생성)
         exec_mode: 'cluster', // 클러스터 모드
         max_memory_restart: '300M', // 프로세스의 메모리가 300MB에 도달하면 reload 실행
         
         watch: ['bin', 'routes'], //bin폴더, routes폴더를 감시해서 변경사항 실행
         ignore_watch: ['node_modules'], // 반대로 해당폴더의 파일변경은 무시
         
         env: {
            // 환경변수 지정
            Server_PORT: 4000,
            NODE_ENV: 'development',
            Redis_HOST: 'localhost',
            Redis_PORT: 6379,
         },
         
         output: '~/logs/pm2/console.log', // 로그 출력 경로 재설정
         error: '~/logs/pm2/onsoleError.log', // 에러 로그 출력 경로 재설정
      },
   ],
 
   /* deploy는 원격 서버와 git을 연동해서 배포하는 방식 */
   deploy: {
      production: {
         user: 'SSH_USERNAME',
         host: 'SSH_HOSTMACHINE',
         ref: 'origin/master',
         repo: 'GIT_REPOSITORY',
         path: 'DESTINATION_PATH',
         'pre-deploy-local': '',
         'post-deploy': 'npm install && pm2 reload ecosystem.config.js --env production',
         'pre-setup': '',
      },
   },
};

PM2 무중단 서비스

서비스를 오픈 이후에도 여러 상황 변화에 따라 지속적으로 업데이트를 해줘야 한다.

만약 애플리케이션에 새로운 기능을 추가했거나 발견된 버그를 수정했다면, 이를 서비스에 반영하기 위해선 다시 배포해야 할 것이다.

즉, 수정 사항을 반영하기 위해 기존 프로세스를 재시작 해야 한다는 소리이다.

profile
주니어 개발자

0개의 댓글