TL;DR
Synology NAS AI 자동화는 GPU 없이 월 1만 원 미만으로 24시간 AI 파이프라인을 운영하는 현실적인 방법이다. DS923+ 기준 Docker Compose + ofelia 스케줄러로 Python AI 앱을 돌리고, NVIDIA API(DeepSeek + GLM-5.1)를 외부 추론 엔진으로 연결하면 클라우드 서버 대비 80% 이상 비용을 절감할 수 있다.
왜 NAS인가: 홈서버 AI 파이프라인의 현실적 선택
AI 파이프라인을 24시간 돌리는 데 클라우드 VM을 쓰면 월 3~5만 원 이상이 나온다. 반면 이미 구비된 Synology NAS는 상시 가동 중이고, 전력 소비는 20~40W에 불과하다. 월 전기세로 환산하면 약 2,000원이다.
Synology DS923+는 AMD Ryzen R1600, 최대 32GB RAM, Docker 완전 지원이라는 스펙을 갖춰 Python 기반 AI 자동화 앱을 구동하기에 충분하다. GPU는 없지만, LLM 추론은 NVIDIA API(DeepSeek V4 Pro, GLM-5.1)에 위임하면 된다. NAS는 오케스트레이션과 스케줄링만 담당한다.
| 항목 | Synology NAS | AWS t3.small |
|---|---|---|
| 월 인프라 비용 | ~2,000원 | ~25,000원 |
| API 비용 (LLM) | $3~5 | $3~5 |
| GPU 필요 여부 | 불필요 | 불필요 |
| 관리 복잡도 | 낮음 (DSM GUI) | 중간 |
| 데이터 주권 | 로컬 보관 | 클라우드 |
설치 및 설정
1. Container Manager 설치
Synology DSM → 패키지 센터 → Container Manager 설치. DSM 7.2 이상에서 Docker Compose v2를 기본 지원한다.
2. 볼륨 경로 준비
# NAS SSH 접속 후
mkdir -p /volume1/docker/ai-pipeline/{data,logs,posts}
NAS의 공유 폴더 /volume1/docker/를 프로젝트 루트로 사용한다. 이 경로는 DSM 파일 스테이션에서도 접근 가능해 수동 파일 관리가 편하다. 모델에 따라 volume1 대신 volume2, volume3일 수 있으니 DSM에서 실제 공유 폴더 경로를 확인한다.
3. docker-compose.yml 구성
ofelia는 scheduler.ini 마운트 방식과 docker-compose label 방식 두 가지를 지원한다. 스케줄이 고정적이고 설정 파일을 분리해 관리하고 싶다면 ini 방식이, docker-compose 한 파일로 모든 것을 관리하고 싶다면 label 방식이 낫다.
scheduler.ini 마운트 방식 (권장):
services:
pipeline:
build: .
container_name: ai-blog-pipeline
restart: unless-stopped
env_file: .env # docker-compose.yml 과 같은 디렉터리의 .env
volumes:
- /volume1/docker/ai-pipeline/data:/app/data
- /volume1/docker/ai-pipeline/logs:/app/logs
- /volume1/docker/ai-pipeline/posts:/app/posts
networks:
- blog-net
scheduler:
image: mcuadros/ofelia:latest
container_name: blog-scheduler
restart: unless-stopped
depends_on:
- pipeline
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./scheduler.ini:/etc/ofelia/config.ini
networks:
- blog-net
networks:
blog-net:
scheduler.ini:
[job-exec "daily-pipeline"]
schedule = 0 21 * * * ; UTC 21:00 = KST 06:00
container = ai-blog-pipeline
command = python -m pipeline.main
ofelia의 schedule은 표준 5필드 cron 문법(분 시 일 월 요일)이 아닌 6필드(초 분 시 일 월 요일)도 지원한다. 위 예시는 5필드(0 21 * * * = 매일 21:00 UTC)로, ofelia가 자동 감지한다.
4. .env 파일 설정
# /volume1/docker/ai-pipeline/.env
NVIDIA_API_KEY=nvapi-xxxxxxxxxxxx
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxx # NVIDIA 429 소진 시 폴백
WORDPRESS_URL=https://yourblog.com
WORDPRESS_USERNAME=admin
WORDPRESS_APP_PASSWORD=xxxx xxxx xxxx xxxx
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxx/yyy/zzz
BASE_DIR=/app
DAILY_POST_COUNT=2
AUTO_PUBLISH=false
env_file: .env의 경로는 docker compose 실행 위치 기준 상대경로다. NAS에서 DSM의 Task Scheduler로 실행할 경우 절대경로를 명시하는 편이 안전하다.
5. 빌드 및 실행
cd /volume1/docker/ai-pipeline
docker compose build
docker compose up -d
실무 패턴: 스케줄 관리와 장애 대응
로그 확인
# NAS SSH에서 실시간 로그
docker logs ai-blog-pipeline --tail 50 -f
# 또는 마운트된 볼륨에서
tail -f /volume1/docker/ai-pipeline/logs/pipeline.log
DSM의 Container Manager GUI에서도 실시간 로그를 확인할 수 있어 터미널 없이도 상태 파악이 가능하다. 아침에 일어나면 Slack으로 전날 밤 자동 작성된 포스트 결과가 전송되어 있는 구조다.
장애 대응: NVIDIA API 429
DeepSeek/GLM-5.1 NVIDIA API 한도 소진 시 Claude API(Anthropic)로 자동 폴백되도록 pipeline/llm.py에 재시도 로직이 구현되어 있다. .env에 ANTHROPIC_API_KEY를 설정해두면 NAS는 인터넷 연결만 유지되면 별도 조작 없이 복구된다.
주의사항
| 항목 | 내용 |
|---|---|
| Docker 지원 모델 | DS923+, DS720+, DS920+ 등 x86 모델 권장. 일부 ARM 모델(DS223 등)도 Container Manager 지원하나 패키지 호환성 제한 |
| 메모리 | 32GB 상한으로 로컬 LLM 실행 불가. 7B 이상 모델은 외부 API 필수 |
| env_file 경로 | docker compose 실행 디렉터리 기준 상대경로. DSM Task Scheduler 사용 시 절대경로 권장 |
| DSM 업데이트 | DSM 업데이트 시 Container Manager가 재시작될 수 있음 — restart: unless-stopped 필수 |
| 볼륨 백업 | Synology Hyper Backup으로 /volume1/docker/ai-pipeline/data 정기 백업 권장 |
| 포트포워딩 | 외부 API 호출만 하는 경우 불필요. WordPress가 외부 서버라면 아웃바운드 443만 허용하면 됨 |
결론
Synology NAS AI 자동화는 월 1만 원 미만으로 24시간 AI 파이프라인 서버를 운영하는 현실적인 선택이다. Docker Compose + ofelia로 스케줄을 관리하고, NVIDIA API로 LLM 추론을 위임하면 NAS의 CPU 한계를 우회할 수 있다. 별도 클라우드 서버 없이 집 안에서 자동화 파이프라인을 돌릴 수 있다는 것이 이 스택의 핵심 가치다.
참고: Synology DS923+ 공식 스펙 / ofelia GitHub / NVIDIA Build API