데이터·SQLby affaan-m
PM2 서비스 명령어 생성
감지된 프론트엔드, 백엔드 또는 데이터베이스 서비스에 대한 PM2 서비스 명령어를 분석 및 생성해 드립니다.
한 줄 평가 — 다음 사람 도와주세요
언제 쓰나
프로젝트의 다양한 서비스에 대한 PM2 설정이 필요할 때
SKILL.md
Lattice 한국어 번역 · 원본 affaan-m/everything-claude-code (841beea). 복사 → 저장하면 Claude Code가 인식합니다.
---
description: 프로젝트를 분석하고 감지된 프론트엔드, 백엔드 또는 데이터베이스 서비스에 대한 PM2 서비스 명령어를 생성합니다.
---
# PM2 Init
프로젝트를 자동 분석하고 PM2 서비스 명령어를 생성합니다.
**Command**: `$ARGUMENTS`
---
## Workflow
1. PM2 확인 (없을 경우 `npm install -g pm2`로 설치)
2. 프로젝트 스캔하여 서비스 식별 (프론트엔드/백엔드/데이터베이스)
3. 설정 파일과 개별 명령어 파일 생성
---
## Service Detection
| Type | Detection | Default Port |
|------|-----------|--------------|
| Vite | vite.config.* | 5173 |
| Next.js | next.config.* | 3000 |
| Nuxt | nuxt.config.* | 3000 |
| CRA | package.json 내 react-scripts | 3000 |
| Express/Node | server/backend/api 디렉터리 + package.json | 3000 |
| FastAPI/Flask | requirements.txt / pyproject.toml | 8000 |
| Go | go.mod / main.go | 8080 |
**포트 감지 우선순위**: 사용자 지정 > .env > 설정 파일 > 스크립트 인자 > 기본 포트
---
## Generated Files
```
project/
├── ecosystem.config.cjs # PM2 설정
├── {backend}/start.cjs # Python 래퍼 (해당 시)
└── .claude/
├── commands/
│ ├── pm2-all.md # 모두 시작 + 모니터
│ ├── pm2-all-stop.md # 모두 중지
│ ├── pm2-all-restart.md # 모두 재시작
│ ├── pm2-{port}.md # 단일 시작 + 로그
│ ├── pm2-{port}-stop.md # 단일 중지
│ ├── pm2-{port}-restart.md # 단일 재시작
│ ├── pm2-logs.md # 전체 로그 보기
│ └── pm2-status.md # 상태 보기
└── scripts/
├── pm2-logs-{port}.ps1 # 단일 서비스 로그
└── pm2-monit.ps1 # PM2 모니터
```
---
## Windows Configuration (중요)
### ecosystem.config.cjs
**반드시 `.cjs` 확장자 사용**
```javascript
module.exports = {
apps: [
// Node.js (Vite/Next/Nuxt)
{
name: 'project-3000',
cwd: './packages/web',
script: 'node_modules/vite/bin/vite.js',
args: '--port 3000',
interpreter: 'C:/Program Files/nodejs/node.exe',
env: { NODE_ENV: 'development' }
},
// Python
{
name: 'project-8000',
cwd: './backend',
script: 'start.cjs',
interpreter: 'C:/Program Files/nodejs/node.exe',
env: { PYTHONUNBUFFERED: '1' }
}
]
}
```
**프레임워크 스크립트 경로:**
| Framework | script | args |
|-----------|--------|------|
| Vite | `node_modules/vite/bin/vite.js` | `--port {port}` |
| Next.js | `node_modules/next/dist/bin/next` | `dev -p {port}` |
| Nuxt | `node_modules/nuxt/bin/nuxt.mjs` | `dev --port {port}` |
| Express | `src/index.js` 또는 `server.js` | - |
### Python Wrapper Script (start.cjs)
```javascript
const { spawn } = require('child_process');
const proc = spawn('python', ['-m', 'uvicorn', 'app.main:app', '--host', '0.0.0.0', '--port', '8000', '--reload'], {
cwd: __dirname, stdio: 'inherit', windowsHide: true
});
proc.on('close', (code) => process.exit(code));
```
---
## Command File Templates (최소한의 내용)
### pm2-all.md (모두 시작 + 모니터)
````markdown
모든 서비스를 시작하고 PM2 모니터를 엽니다.
```bash
cd "{PROJECT_ROOT}" && pm2 start ecosystem.config.cjs && start wt.exe -d "{PROJECT_ROOT}" pwsh -NoExit -c "pm2 monit"
```
````
### pm2-all-stop.md
````markdown
모든 서비스를 중지합니다.
```bash
cd "{PROJECT_ROOT}" && pm2 stop all
```
````
### pm2-all-restart.md
````markdown
모든 서비스를 재시작합니다.
```bash
cd "{PROJECT_ROOT}" && pm2 restart all
```
````
### pm2-{port}.md (단일 시작 + 로그)
````markdown
{name} ({port})를 시작하고 로그를 엽니다.
```bash
cd "{PROJECT_ROOT}" && pm2 start ecosystem.config.cjs --only {name} && start wt.exe -d "{PROJECT_ROOT}" pwsh -NoExit -c "pm2 logs {name}"
```
````
### pm2-{port}-stop.md
````markdown
{name} ({port})를 중지합니다.
```bash
cd "{PROJECT_ROOT}" && pm2 stop {name}
```
````
### pm2-{port}-restart.md
````markdown
{name} ({port})를 재시작합니다.
```bash
cd "{PROJECT_ROOT}" && pm2 restart {name}
```
````
### pm2-logs.md
````markdown
모든 PM2 로그를 봅니다.
```bash
cd "{PROJECT_ROOT}" && pm2 logs
```
````
### pm2-status.md
````markdown
PM2 상태를 봅니다.
```bash
cd "{PROJECT_ROOT}" && pm2 status
```
````
### PowerShell Scripts (pm2-logs-{port}.ps1)
```powershell
Set-Location "{PROJECT_ROOT}"
pm2 logs {name}
```
### PowerShell Scripts (pm2-monit.ps1)
```powershell
Set-Location "{PROJECT_ROOT}"
pm2 monit
```
---
## Key Rules
1. **설정 파일**: `ecosystem.config.cjs` (`.js` 아님)
2. **Node.js**: 직접 bin 경로 지정 + interpreter 지정
3. **Python**: Node.js 래퍼 스크립트 + `windowsHide: true`
4. **새 창 열기**: `start wt.exe -d "{path}" pwsh -NoExit -c "command"`
5. **최소한의 내용**: 각 명령어 파일은 1-2줄 설명 + bash 블록만 포함
6. **직접 실행**: AI 해석 없이 bash 명령어 바로 실행 가능
---
## Execute
`$ARGUMENTS`에 따라 초기화 실행:
1. 서비스를 위해 프로젝트 스캔
2. `ecosystem.config.cjs` 생성
3. Python 서비스가 있을 경우 `{backend}/start.cjs` 생성
4. `.claude/commands/`에 명령어 파일 생성
5. `.claude/scripts/`에 스크립트 파일 생성
6. **프로젝트 CLAUDE.md 업데이트** (아래 참조)
7. **완료 요약 출력** (터미널 명령어 포함)
---
## Post-Init: Update CLAUDE.md
파일 생성 후, 프로젝트의 `CLAUDE.md` 끝에 PM2 섹션 추가 (없을 경우 생성):
````markdown
## PM2 Services
| Port | Name | Type |
|------|------|------|
| {port} | {name} | {type} |
**Terminal Commands:**
```bash
pm2 start ecosystem.config.cjs # 처음 실행 시
pm2 start all # 처음 실행 이후
pm2 stop all / pm2 restart all
pm2 start {name} / pm2 stop {name}
pm2 logs / pm2 status / pm2 monit
pm2 save # 프로세스 목록 저장
pm2 resurrect # 저장된 목록 복원
```
````
**CLAUDE.md 업데이트 규칙:**
- PM2 섹션이 있으면 교체
- 없으면 끝에 추가
- 내용은 최소한으로 유지
---
## Post-Init: Display Summary
모든 파일 생성 후 출력:
```
## PM2 Init Complete
**Services:**
| Port | Name | Type |
|------|------|------|
| {port} | {name} | {type} |
**Claude Commands:** /pm2-all, /pm2-all-stop, /pm2-{port}, /pm2-{port}-stop, /pm2-logs, /pm2-status
**Terminal Commands:**
## 처음 실행 시 (설정 파일 사용)
pm2 start ecosystem.config.cjs && pm2 save
## 처음 실행 이후 (간소화)
pm2 start all # 모두 시작
pm2 stop all # 모두 중지
pm2 restart all # 모두 재시작
pm2 start {name} # 단일 시작
pm2 stop {name} # 단일 중지
pm2 logs # 로그 보기
pm2 monit # 모니터 패널
pm2 resurrect # 저장된 프로세스 복원
**Tip:** 처음 시작 후 `pm2 save`를 실행하여 간소화된 명령어를 사용할 수 있습니다.
```필요한 도구
호버하면 설명CC
설치 + 호출 (2단계)
Claude Code CLI 기준.
- 1
SKILL.md 저장
아래 버튼으로 복사 → 다음 경로로 저장.
~/.claude/skills/everything-claude-code-pm2/SKILL.md - 2
호출
Claude Code 채팅창에서 자연어로 부르면 자동 발동:
예) 프로젝트의 다양한 서비스에 대한 PM2 설정이 필요할 때
트리거가 안 잡히면 SKILL.md의
description줄에 더 구체적인 한국어 키워드를 추가해보세요.