pm2 는 javascript 런타임 node.js 프로세스 관리자이다.
사내 서비스 중에 pm2 가 vue 프로젝트를 실행시키고, nginx 가 reverse proxy 역할만 수행하는 서비스가 있다.
node 앱은 백엔드 서비스만 의미하는 줄 알았는데, FE에서도 쓰이는 용어인지 궁금했다.
결론부터 이야기 하면 vue 로 구현된 서비스도 node 앱이 될 수 있다.
즉, node.js 환경에서 실행되는 서비스이면 node 애플리케이션이다.
라이브러리, 프레임워크와 상관이 없는 것이다.
node 앱의 의미에 대해서 알아보자.
node 앱이란?
node.js 로 실행되는 프로그램
- node.js: 브라우저 밖에서 javascript를 실행할 수 있게 만든 런타임 환경. 원래 javascript는 브라우저에서만 동작했지만, node.js는 서버나 터미날에서 js를 동작할 수 있게 한다.
node app.js를 하게 되면, app.js 의 javascript 코드가 node.js 위에서 실행된다.
pm2 실행환경으로 본 정체
pm2 자체가 node.js 에서 실행되는 프로그램, 즉 node 앱.
pm2는 여러 node 앱을 관리하는 node 앱
그렇기 때문에 시스템 내에 node.js 가 반드시 설치되어 있어야 한다.
[시스템] → [Node.js 런타임] → [PM2 CLI 스크립트] → [PM2 Daemon] → [Node.js 앱]
pm2 실행 시 내부 동작 구조
pm2 start app.js명렁어 실행- 운영체제(OS) 는 $PATH 안에 있는 pm2 실행 파일을 찾음
# pm2 실행 파일 내부
#!/usr/bin/env node
require('../lib/ProcessContainerFork.js');
이 파일은 node.js 로 만든 스크립트
#!/usr/bin/env node : node로 실행하라
즉 pm2는 node.js 인터프리터로 실행
- node.js 런타임이 pm2 스크립트 해석 -> pm2 내부에서 "app.js를 백그라운드로 실행"하라는 명령을 daemon에 전달
- node.js 는 새로운 node.js 프로세스를 fork(자식 프로세스 실행) 하여 아래와 같이 node.js 런타임 실행
node /path/to/app.js
실제 프로세스 구조 확인
pm2 start app.js
ps -ef | grep node
ubuntu 1234 1 0 pm2: God Daemon (/usr/lib/node_modules/pm2/lib/Daemon.js)
ubuntu 1250 1234 0 node /home/user/app.js
PID 1234 : pm2 daemon으로 실행 -> node로 실행 됨
PID 1250 -> pm2 가 fork한 실제 node 앱 -> node로 실행 됨
즉, node.js 가 pm2 자신과 app.js를 모두 구동
요약 구조
┌──────────────────────────────────────────┐
│ Node.js 런타임 │
│ ┌────────────────────────────────────┐ │
│ │ PM2 CLI │ │
│ │ (node로 실행됨) │ │
│ └──────────────┬────────────────────┘ │
│ │ IPC 통신 (Unix Socket)│
│ ┌──────────────▼────────────────────┐ │
│ │ PM2 Daemon(Node 앱) │ │
│ ├──────────────┬────────────────────┤ │
│ │ │ fork() │
│ └──────────────▼────────────────────┘ │
│ Node 앱들 (app.js 등) │
└──────────────────────────────────────────┘
Node.js 런타임이 PM2를 실행
PM2가 다시 Node.js를 이용해 앱들을 실행
정리
| 항목 | 내용 |
| ----------------- | ------------------------------------------- |
| **PM2 실행 기반** | Node.js 런타임 위에서 동작 |
| **Node.js 제공 방식** | 시스템에 설치된 Node.js 실행 파일(`/usr/bin/node`)을 이용 |
| **실행 명령 구조** | `#!/usr/bin/env node` 로 Node 런타임을 호출 |
| **결과** | Node.js → PM2 → (다른 Node 앱) 형태로 계층 실행 |'#개발 > node.js' 카테고리의 다른 글
| npm의 git:// 프로토콜 오류 (0) | 2025.11.09 |
|---|