# 들어가며
여러 대의 원격 서버에서 AI 워커를 운영해야 할 때, 매번 수동으로 설치하고 설정하는 것은 비효율적입니다. 특히 고객사별로 다른 설정을 적용해야 한다면 더욱 그렇죠. 이번 글에서는 PowerShell 스크립트를 활용해 Windows 환경에서 AI 워커를 자동으로 배포하고, PM2로 프로세스를 관리하는 방법을 소개합니다.
## 자동 배포 스크립트의 핵심 구조
### 1. 파라미터 기반 커스터마이징
배포 스크립트는 다음과 같은 파라미터를 받아 유연하게 동작합니다:
```powershell
.\install_worker.ps1 `
-WorkerType "production_01" `
-WorkerId "prod_worker_001" `
-OrganizationName "Example Corp" `
-BotName "AssistantBot" `
-CustomConfigPath "C:\\configs\\custom.md"
```
이 방식의 장점은:
- **재사용성**: 동일한 스크립트로 내부/외부 환경 모두 대응
- **추적성**: WorkerId로 각 워커 식별 가능
- **커스터마이징**: 고객별 설정 파일 주입 가능
### 2. 9단계 자동 설치 프로세스
#### Step 1-3: 환경 검증 및 기본 도구 설치
```powershell
# Node.js 설치 확인
if (-not (Get-Command node -ErrorAction SilentlyContinue)) {
Write-Error "Node.js not found"
exit 1
}
# PM2 글로벌 설치
npm install -g pm2
```
**핵심**: 사전 요구사항(Node.js, Python, SSH)을 먼저 검증하여 설치 실패를 조기에 방지합니다.
#### Step 4-6: 디렉토리 구조 및 설정 파일 생성
```powershell
# 표준 디렉토리 구조 생성
$baseDir = "D:\\ai_workers\\$WorkerId"
New-Item -ItemType Directory -Path "$baseDir\\workspaces" -Force
New-Item -ItemType Directory -Path "$baseDir\\scripts" -Force
New-Item -ItemType Directory -Path "$baseDir\\logs" -Force
# PM2 ecosystem 설정 파일 생성
$ecosystemConfig = @"
module.exports = {
apps: [{
name: '$WorkerId',
script: 'python',
args: 'worker.py',
cwd: '$baseDir',
instances: 1,
autorestart: true,
max_memory_restart: '1G'
}]
};
"@
$ecosystemConfig | Out-File "$baseDir\\scripts\\ecosystem.config.js"
```
**실전 팁**: 워크스페이스, 스크립트, 로그를 분리하면 유지보수가 훨씬 수월합니다.
#### Step 7-8: Python 의존성 설치 및 PM2 자동 시작 설정
```powershell
# Python 패키지 설치
pip install -r requirements.txt
# Task Scheduler로 부팅 시 PM2 자동 시작
$action = New-ScheduledTaskAction -Execute "pm2" -Argument "resurrect"
$trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName "PM2-AutoStart-$WorkerId" `
-Action $action -Trigger $trigger -RunLevel Highest
```
**주의사항**: Windows에서 PM2는 `pm2 startup` 명령이 제대로 작동하지 않으므로, Task Scheduler를 직접 사용해야 합니다.
#### Step 9: 봇별 설정 파일 생성
```powershell
# 글로벌 규칙 파일
$globalConfig = @"
## AI Worker Configuration
- Worker ID: $WorkerId
- Organization: $OrganizationName
- Bot Name: $BotName
"@
$globalConfig | Out-File "$baseDir\\CLAUDE.md"
# 봇별 메모리 파일
$botMemory = @"
## Bot Context
- Workspace: $baseDir\\workspaces\\$BotName
"@
$botMemory | Out-File "$baseDir\\workspaces\\$BotName\\CLAUDE.md"
```
## 설치 후 검증 체크리스트
### 1. 인증 확인
```powershell
claude login
```
### 2. PM2 프로세스 상태 확인
```powershell
pm2 status
# 예상 출력:
# ┌─────┬────────────┬─────────┬───────┐
# │ id │ name │ status │ cpu │
# ├─────┼────────────┼─────────┼───────┤
# │ 0 │ worker_001 │ online │ 2% │
# └─────┴────────────┴─────────┴───────┘
```
### 3. 로그 모니터링
```powershell
pm2 logs worker_001 --lines 50
```
## 아키텍처 설계 포인트
### 계층별 설정 파일 분리
1. **글로벌 규칙** (`D:\\CLAUDE.md`): 모든 워커가 공유하는 기본 규칙
2. **봇별 메모리** (`workspaces\\{bot}\\CLAUDE.md`): 각 봇의 컨텍스트와 학습 내용
3. **인프라 검증** (`scripts\\frozen_infra.py`): 설치 환경의 무결성 검증
이런 구조는 다음을 가능하게 합니다:
- **격리**: 봇별로 독립적인 작업 공간 제공
- **재사용**: 공통 규칙은 한 번만 정의
- **추적**: 각 봇의 동작 기록을 개별 관리
## 실전 활용 사례
### 내부 테스트 환경
```powershell
.\install_worker.ps1 -WorkerType "dev_test" -WorkerId "test_001"
```
→ 최소 파라미터로 빠른 설치
### 고객사 배포 환경
```powershell
.\install_worker.ps1 `
-WorkerType "client_prod" `
-WorkerId "client_a_001" `
-OrganizationName "ABC Corporation" `
-BotName "SupportBot" `
-BotKoreanName "고객지원봇" `
-CustomConfigPath "C:\\client_configs\\abc_corp.md"
```
→ 고객별 브랜딩 및 설정 적용
## 트러블슈팅 팁
### PM2가 재부팅 후 시작되지 않을 때
```powershell
# Task Scheduler 작업 확인
Get-ScheduledTask | Where-Object {$_.TaskName -like "PM2*"}
# 수동으로 pm2 저장 후 재등록
pm2 save
pm2 resurrect
```
### Python 의존성 충돌
```powershell
# 가상환경 사용 권장
python -m venv venv
.\venv\Scripts\Activate.ps1
pip install -r requirements.txt
```
## 마치며
이번 글에서는 PowerShell 스크립트를 활용한 AI 워커 자동 배포 시스템을 살펴봤습니다. 핵심은:
1. **파라미터화된 설치 스크립트**로 재사용성 확보
2. **PM2 + Task Scheduler** 조합으로 Windows 환경 안정화
3. **계층적 설정 파일**로 유연한 커스터마이징
다음 단계로는 모니터링 대시보드 구축, 로그 중앙화, 롤링 업데이트 자동화 등을 고려해볼 수 있습니다. 여러분의 배포 환경에서도 이 패턴을 응용해보시기 바랍니다.
development
Windows에서 PM2로 AI 워커 자동 배포하는 법 - PowerShell 스크립트 활용
Node.js + Python 하이브리드 환경을 PM2와 Task Scheduler로 관리하는 실전 가이드
SpacePlanning · SpacePlanning AI Team2026년 3월 25일조회 216