## 도입: 왜 분산 워커 시스템인가?
기업이나 팀 프로젝트에서 작업량이 증가하면 서버 확장만으로는 비용 효율이 떨어질 수 있습니다. 특히 일시적으로 처리량을 늘려야 하거나, 유휴 상태의 PC 자원을 활용하고 싶을 때 **분산 워커(Distributed Worker) 시스템**이 효과적입니다.
이 글에서는 Tailscale VPN을 활용해 원격지의 PC를 안전하게 연결하고, 중앙 시스템에서 작업을 분배하는 아키텍처를 소개합니다.
## 핵심 아키텍처
### 시스템 구성도
```
원격 워커 PC (Tailscale VPN)
↓
Nginx 리버스 프록시
↓
중앙 작업 분배 서버
```
이 구조의 장점:
- **보안**: Tailscale을 통한 암호화된 Mesh VPN 연결
- **유연성**: 사무실, 재택 등 위치에 관계없이 워커 추가 가능
- **확장성**: 필요에 따라 워커 노드 증감 가능
### Tailscale을 선택한 이유
Tailscale은 WireGuard 기반의 Mesh VPN으로:
- NAT/방화벽 뒤의 PC도 설정 없이 연결 가능
- P2P 직접 연결로 낮은 지연시간 제공
- 무료 플랜으로도 소규모 팀 운영 가능
## 구현 단계
### 1단계: Tailscale 네트워크 구성
```bash
# 중앙 서버와 워커 PC 모두에 Tailscale 설치
curl -fsSL https://tailscale.com/install.sh | sh
# 인증 및 네트워크 참여
tailscale up
```
각 노드는 고유한 100.x.x.x 대역 IP를 받게 됩니다.
### 2단계: Nginx 리버스 프록시 설정
워커 PC들이 중앙 API에 접근할 수 있도록 프록시를 구성합니다.
```nginx
upstream worker_backend {
server internal-api-server:8080;
}
server {
listen 80;
server_name 100.81.210.19; # Tailscale IP 예시
location /api/tasks {
proxy_pass http://worker_backend;
proxy_set_header X-Worker-ID $http_x_worker_id;
}
}
```
### 3단계: 워커 자동 설치 스크립트
PowerShell로 워커 PC에 필요한 환경을 자동 구성:
```powershell
# install_remote_worker.ps1
param(
[string]$WorkerId,
[string]$ApiEndpoint
)
# 1. 필요한 런타임 설치 (예: Node.js)
choco install nodejs -y
# 2. 설정 파일 생성
$config = @{
workerId = $WorkerId
apiEndpoint = $ApiEndpoint
pollInterval = 5000
} | ConvertTo-Json
$config | Out-File -FilePath "./worker_config.json"
# 3. 워커 서비스 등록
nssm install RemoteWorker "node" "worker.js"
nssm start RemoteWorker
```
### 4단계: 워커 프로그램 예시
```javascript
// worker.js
const axios = require('axios');
const config = require('./worker_config.json');
async function pollAndProcess() {
try {
// 작업 요청
const response = await axios.get(
`${config.apiEndpoint}/api/tasks/next`,
{ headers: { 'X-Worker-ID': config.workerId } }
);
if (response.data.task) {
const result = await processTask(response.data.task);
// 결과 전송
await axios.post(
`${config.apiEndpoint}/api/tasks/complete`,
{ taskId: response.data.task.id, result }
);
}
} catch (error) {
console.error('작업 처리 오류:', error);
}
// 다음 폴링
setTimeout(pollAndProcess, config.pollInterval);
}
processTask(task) {
// 실제 작업 로직 (예: 데이터 처리, 이미지 변환 등)
return { status: 'success', data: task.data };
}
pollAndProcess();
```
## 운영 노하우
### 워커 식별 전략
각 워커에 명명 규칙 적용:
- `location_type_hw_number` 형식 (예: `office_desktop_00`)
- 로그 추적과 모니터링에 용이
### 설정 템플릿 관리
워커별 설정을 템플릿화하여 배포:
```json
{
"workerId": "${WORKER_ID}",
"apiEndpoint": "http://100.81.210.19",
"capabilities": ["compute", "storage"],
"maxConcurrentTasks": 3
}
```
### 모니터링 대시보드
중앙에서 워커 상태 확인:
- 연결 상태 (온라인/오프라인)
- 처리 중인 작업 수
- 성능 지표 (작업 처리 시간, 에러율)
## 보안 고려사항
1. **인증**: 워커별 고유 토큰 발급
2. **암호화**: Tailscale 자체가 WireGuard 암호화 제공
3. **접근 제한**: Tailscale ACL로 워커가 필요한 엔드포인트만 접근하도록 제한
```json
// Tailscale ACL 예시
{
"acls": [
{
"action": "accept",
"src": ["tag:worker"],
"dst": ["100.81.210.19:80"]
}
]
}
```
## 결론
Tailscale 기반 분산 워커 시스템은:
- 최소한의 네트워크 설정으로 원격 PC를 작업 환경에 통합
- 복잡한 VPN 구성 없이 안전한 연결 제공
- 필요시 워커를 동적으로 추가/제거 가능
다음 단계로는:
- 작업 큐 시스템 고도화 (우선순위, 재시도 로직)
- 워커 헬스체크 및 자동 재시작
- 로드 밸런싱 알고리즘 개선
을 고려해볼 수 있습니다.
이 아키텍처는 CI/CD 빌드 워커, 데이터 처리 파이프라인, AI 모델 추론 등 다양한 분산 작업 시나리오에 적용 가능합니다.
ai-automation
분산 워커 시스템 구축 가이드: Tailscale VPN을 활용한 원격 작업 환경
외부 PC를 안전하게 연결하여 작업을 분산 처리하는 시스템 설계와 구현 방법
SpacePlanning · SpacePlanning AI Team2026년 3월 26일조회 224