
(상황: 테크 블로그 서비스 진행 중)
PM2를 안 쓸 이유가 없었다.
- 힐러(종료시 재시작)
- 조수(변경시 재시작)
- cluster(속도개선 가능)
그외에도 장점 다수... (참고: 생활코딩)
물론 이미 배포되어 있는 서버에 적용하는 문제가 있었지만... 일단 해보자고 대뜸 npm i pm2를 해버렸다.
결론부터 말하자면, 위의 1, 2, 3 장점을 모두 취할 수 있도록 반영 완료했다.
아래는 트러블슈팅 페이지에도 작성한 기록이다.
같은 이슈를 맞이하더라도 좀 덜 주눅들고 해결할 수 있길 바란다. (미래의 나에게 하는말)
※ 아래의 넘버링된 순서대로 이슈가 발생하였기 때문에 순차적으로 읽어 내려가길 추천한다.
※ ✅로 각 문제별 해결방안을 표시해둠
#- 오작동한 커맨드
#- 이해를 위해 커맨드로 작성. 실제로는 ecosystem.config.js 파일 활용하여 `pm2 start ecosystem.config.js` 실행
pm2 start --interpreter ts-node src/app.ts --watch
pm2 start --interpreter ./node_modules/.bin/ts-node src/app.ts --watch
✅ 이에 build 후 interpreter 옵션 없이 dist 디렉토리 내 app.js로 실행
watch모드로 실행해도 수정사항이 반영되지 않는 문제✅ 이에 package.json 실행 스크립트에 build 과정 추가
rimraf 활용) 빌드 // package.json
"scripts": {
"build": "**npx rimraf dist** && npx tsc",
"dev": "**npm run build** && pm2 start ecosystem.config.js",
},
pm2 logs 확인: entity 파일이 JS로 컴파일 되지 못함
src/**/*.entity.ts를 바라보라고 만들어 놓았으니...✅이에 entity도 dist 디렉토리로 경로 설정
new DataSource({
...
**entities: ["./dist/**/*.entity.js"],**
...
});
pm2 not found: 로컬 정상작동 확인 후 배포 시 PM2 에러
✅ devDependency에 있던 pm2를 uninstall 후 dependency로 다시금 설치 후 배포

✅ 공식 문서 확인 후 package.json 실행 스크립트에 pm2가 아닌 pm2-runtime으로 수정 후 정상작동 확인
"scripts": {
"build": "npx rimraf dist && npx tsc",
"dev": "npm run build && pm2 start ecosystem.config.js",
"start": "npm run build && **pm2-runtime** start ecosystem.config.js",
},

내가 진행한 방식이 정답이라고 할 자신이 없다. (특히 interpreter부분)
그래도 빠르게 적용하고 정상 작동한다는 점에서 일단 만족한다.
좀 더 현실적인 상황에서의, 많은 코드들을 접하고 싶은데 흠 아쉽다.