[Node.js] PM2 ES6 사용

manx·2022년 4월 27일
1

Node.js

목록 보기
2/2

PM2란 ?

Node.js는 기본적으로 싱글 스레드로 동작한다. 즉, CPU의 멀티코어 시스템을 사용할 수 없다.
그러나 서버의 사양은 더 많은 코어를 제공한다면 자원을 제대로 활용하지 못하는 것이다.

Node.js는 이런 문제를 해결하기 위해 클러스터 모듈을 통해 단일 프로세스를 멀티 프로세스로 늘릴 수 있는 방법을 제공한다.
그것이 바로 PM2(Process Manager)이다.

pm2는 종료됐을 때의 이벤트도 처리할 수 있어 무중단 서비스를 제공한다.

pm2 설치

$ npm install pm2 -g

만약 permission denied가 뜬다면 sudo로 권한을 부여하면 된다.

실행

# pm2를 실행하는 명령어로 js파일을 실행하는 것과 같다
$ pm2 start app.js

실행하면 PM2는 default로 fork 모드로 애플리케이션을 실행한다.
모든 CPU를 사용하기 위해서는 애플리케이션을 cluster모드로 실행해야 한다.

설정 파일 생성

$ pm2 init

다음 코드를 실행하면 ecosystem.config.js 파일이 생성된다.
나에게 필요한 옵션은 다음과 같다.
더 자세한 옵션 : https://pm2.keymetrics.io/docs/usage/quick-start/

module.exports = {
  apps : [{
    name: 'aedo',
    script: './app.js',
    instances: 0, // 0이면 CPU 개수에 맞춰 스레드 생성
    exec_mode: 'cluster', // fork가 아닌 cluster 모드로 실행
    merge_logs: true, // 클러스터 모드 사용 시 각 클러스터에서 생성되는 로그를 한 파일로 합쳐준다.
    autorestart: true, // 프로세스 실패 시 자동으로 재시작할지 선택
    watch: false, // 파일이 변경되었을 때 재시작 할지 선택
  }]
};

그러나 ES6 모듈을 사용하고 있어 module.exports 에러가 난다.
이때, ecosystem.config.js 파일명을 ecosystem.config.cjs로 바꿔주면 된다.

cluster 모드로 실행

다시 실행해보면 cluster 모드로 실행된다.

중지

$ pm2 stop app.js

프로세스 상태 확인

$ pm2 status

프로세스 수 관리

# 프로세스 4개 늘리기
$ pm2 scale app +4

# 프로세스 4개 줄이기
$ pm2 scale app -4

# 프로세스 4개로 설정하기
$ pm2 scale app 4

그동안 배포해서도 npm start를 했는데 이 방법을 알게 되었다!
싱글 스레드의 단점을 이렇게 보완할 수 있다니 신기했다.

로그를 관리하는 방법도 더 알아 보고, 고려할 사항이 있을 경우 아래 블로그들을 참조해서 더 자세히 공부해야겠다.


References

profile
Back-end Developer

0개의 댓글