티스토리 뷰
나는 Node.js로 프로젝트를 진행중이고 pm2로 서버를 관리하고 있다.
개발 서버(dev)는 fork 모드, 운영 서버(main)는 cluster 모드로 띄우고 있는데 왜 dev, main 환경에 따라 모드를 다르게 설정했는지, 그리고 그 기반이 되는 CPU 코어는 무엇인지 정리해보려고 한다.
두 모드의 차이를 알기 위해서는 PM2가 어떤 도구인지, CPU 코어는 무엇인지 이해할 필요가 있다.
PM2란?
Node.js 앱을 백그라운드에서 계속 돌게 해주는 프로세스 관리자이다.
코드가 죽거나 에러가 나도 자동으로 재시작해주고 로그 관리, 무중단 배포, 클러스터 실행까지 도와준다.
CPU의 코어(Core)란?
CPU에서 계산을 담당하는 연산 처리 장치이다.
하나의 코어가 한 번에 1개의 일을 처리한다. 코어 갯수가 많으면 한 번에 많은 일을 수행할 수 있다.
- 코어가 1개면 → 한 번에 한 가지 일만 가능
- 코어가 4개면 → 4가지 일을 동시에 병렬로 처리 가능
"다중 코어", "멀티 코어"는 여러 코어가 있어서 병렬 계산이 가능해진다. 즉, 코어 수가 많을수록 서버가 동시에 처리할 수 있는 작업이 많아진다.
포크(Fork) 모드
포크 모드는 앱을 한 프로세스로만 실행하는 방식이다.
Node.js 자체가 싱글 스레드이기 때문에 CPU의 한 코어만 사용한다.
빠르게 실행할 수 있어 테스트에 적합하고 로그, 오류 확인도 쉽다. 그러나 하나의 코어만 쓰기 때문에 프로세스가 죽으면 서비스 전체가 중단된다는 단점이 있다.
클러스터(Cluster) 모드
클러스터 모드는 CPU 코어 수만큼 Node 프로세스를 여러 개 띄워서 병렬로 처리하는 방식이다.
요청을 각 프로세스에게 분배한다. 한 프로세스가 죽어도 나머지가 계속 돌아가기 때문에 서비스가 유지되므로 안정적이다.
그렇다고 여러 프로세스가 메모리를 공유하지는 않는다.
코드 변경시 동작 차이
PM2의 Fork vs Cluster 모드는 코드가 변경됐을 때 reload/restart 동작도 다르다.
- Fork 모드
단일 프로세스이기 때문에 pm2 restart하거나 --watch 옵션을 사용하여 재시작한다.
--watch 옵션이 없는 경우 pm2는 코드 변경을 인식하지 않는다. - Cluster 모드
여러 프로세스가 병렬로 돌고 있어서 단순 restart는 잠깐의 다운타임이 생긴다.
그래서 무중단 재시작을 위해 pm2 reload 명령어를 사용한다.
pm2 restart와 reload 명령어 비교
| 명령어 | 대상 | 다운타임 | 설명 |
| pm2 restart | fork, cluster | 있음 | 프로세스를 모두 종료 후 다시 실행 |
| pm2 reload | cluster | 없음 | 프로세스를 하나씩 재시작해서 무중단 배포 가능 |
참고
'그외 기록 > 운영 및 설정' 카테고리의 다른 글
| [FileZilla] 파일질라 설치 및 AWS 서버 연결 (0) | 2025.09.01 |
|---|---|
| [Git] 프로젝트 GitHub으로 연결하기 (2) | 2025.07.11 |
| Google Play Console 한국어 설정하기 (0) | 2025.03.31 |
| [Zoho Mail] 무료로 도메인 이메일 설정하기 (0) | 2025.03.11 |
| Google Play 개발자 계정 등록비 환불 요청하기 (0) | 2025.02.28 |
- Total
- Today
- Yesterday