클러스터화 가동 설정 및 디버깅

Node.js의 루트 바로 아래에 있는 인덱스 파일들은 package.json 설정 등을 통하면 멀티스레드로 실행할 수 있다.

package.json 파일 설정과 pm2를 이용하여 별개의 프로그램을 클러스터화 가동한다.

1. pm2 npm 모듈 글로벌 옵션으로 깔기(클러스터 작동 확인을 위한 도구)

1
npm install pm2 -g

2. 클러스터화 파일 작성

각 클러스터의 dev 실행 명령어 지정 및 클러스터화 시동 명령어 지정(package.json)

package.json 작성 예제. daum/blog/post는 각기 실행할 별개의 index.ts파일이라고 보면 됨.

1
2
3
4
5
6
7
8
"scripts":{
"start:cluster": "pm2-runtime pm2.config.js",
"dev:post": "nodemon --legacy-watch --watch ./ --exec 'npx' ts-node -r tsconfig-paths/register ./src/post.ts",
"dev:blog": "nodemon --legacy-watch --watch ./ --exec 'npx' ts-node -r tsconfig-paths/register ./src/blog.ts",
"dev:daum": "nodemon --legacy-watch --watch ./ --exec 'npx' ts-node -r tsconfig-paths/register ./src/daum.ts",
"dev": "npm run dev:blog & npm run dev:daum & npm run dev:post",
"build": "tsc -p tsconfig.json && tsc-alias",
}

pm2.config.js 작성 예제. 클러스터화를 할 설정파일들을 지정한다. 인스턴스 갯수만큼 생성이 됨.

1
2
3
4
5
6
7
module.exports={
apps:[
{ name: "post", script: "./dist/post.js", instances: 1, exec_mode: "cluster" },
{ name: "blog", script: "./dist/blog.js", instances: 1, exec_mode: "cluster" },
{ name: "daum", script: "./dist/daum.js", instances: 1, exec_mode: "cluster" },
]
}

3. 빌드하기

타입스크립트 파일들이 js로 빌드된다.

1
npm run build

4. 클러스터 가동

package.json에서 선제 명령어 설정을 해줘야 함

1
npm run start:cluster

5. 이후 디버깅은 pm2 에서 할 수 있음

가동되고 있는 클러스터 확인

1
pm2 list

클러스터 상세내역 확인(방향키로 조정)

1
pm2 monit

클러스터 가동 취소

npm run start:cluster 명령어를 쳤던 커맨드창 ctrl+c

이렇게 취소하면 pm2 list 했을 때 생성되었던 클러스터들이 사라진 것을 볼 수 있다.