본문 바로가기

Node.js - PM2 본문

개발/node.js

Node.js - PM2

자전하는명왕성 2023. 4. 20. 01:29

미래의 나에게

// PM2 설치
npm install pm2@latest -g
# or
yarn global add pm2

// pm2 실행
pm2 start ecosystem.config.js

// 실행 중인 Pm2 리스트 조회
pm2 ls

// 특정 프로세스 중단
pm2 stop [id]
      
// 특정 프로세스 삭제
pm2 delete [id]
      
// 실행 중인 pm2 종료
pm2 kill

// ecosystem.config.js 설치
pm2 init 

// babel 모듈
yarn add -D @babel/register

 

먼저 PM2 는 Node.js 애플리케이션의 프로세스 관리자이며,

백그라운드에서 Node.js 애플리케이션을 실행하고 모니터링 하는 도구이다.

GCP에서 사용했던 인스턴스와 같은 역할을 하는 도구라고 볼 수 있을 것 같다.

 

먼저, 기본적인 node.js는 CommonJS 문법을 사용하지만,

그간 나는 라이브러리 'babel'을 활용해 ES6문법을 적용하여 코드를 작성해왔다.

왜 이 얘기를 하느냐면, PM2는 ES6문법을 지원하지 않는다는 것이 이번 포스팅 주제이기 때문이다.

 

 

이를 해결하기 위해서는 몇 단계를 거쳐야 한다.

 

1. babel/register 모듈을 설치한다.

해당 모듈은 node.js가 모듈을 로드하기 전에, babel 이 먼저 모듈을 변환시킴으로써,

ES6 문법으로 작성된 코드들을 CommonJS 문법으로 변환시켜주는 모듈이다.

yarn add -D @babel/register

 

2. ecosystem.config.js 를 작성한다.

아래 명령어를 사용하면, ecosystem.config.js 파일을 자동으로 설치할 수 있다.

pm2 init

 

이후, ecosystem.config.js 를 아래와 같이 작성한다.

(해당 파일은 자신의 상황에 맞게 적용하면 된다.)

// ecosystem.config.js
module.exports = {
  apps: [
    {
      name: "iwillwin", // 애플리케이션 이름, 크게 중요치 않다.
      script: "./src/server.js", // 아래에서 설명
      watch: false, // 파일 감지 여부 X, true 로 설정 시 감지 가능
      exec_mode: "cluster", // 클러스터 모드, "fork"적용 시, 포크 모드로 실행
      instances: 0, // 생성할 프로세스 갯수 / 0일 시 CPU코어에 따라 자동으로 결정
    },
  ],
  
  deploy : {
  .... // 중략
  }

 

3. PM2가 진입할 파일 설정

이는 위 apps 객체 내에 있는 script에 관한 내용이다.

주의 사항으로는

script와 일치하는 파일 이름으로 작성하여야 하며, 

babel로 모듈이 변환되기 전이니 CommonJS문법인 require로 작성해주어야 한다.

// src/server.js

require("@babel/register"); // 위에서 설명한 babel/register
require("./index.js"); // pm2가 진입할 index.js

 

이후 아래와 같은 명령어 입력 시 다음과 같이 정상 동작함을 확인할 수 있다. 

pm2 start ecosystem.config.js

 

'개발 > node.js' 카테고리의 다른 글

Nginx 사용기  (0) 2023.07.05
node.js - jwtAuth 미들웨어 구현  (0) 2023.05.01
Node.js, 미들웨어 & 라우터 핸들러  (0) 2023.04.13
node.js & graphQL  (0) 2023.04.11
ORM / Sequelize & typeORM  (0) 2023.01.29
Comments