공무원이 OpenClaw로 24시간 AI 비서 '부엉이'를 만든 3개월 기록
요약
비(非)IT 공무원이 오픈소스 AI 어시스턴트 'OpenClaw'를 활용하여 24시간 구동되는 개인용 AI 비서 '부엉이'를 구축한 과정을 기록했습니다. OpenClaw는 자체 서버에 배포 가능하며, VPS와 Docker Compose를 이용해 자동화된 뉴스 수집 및 요약 기능을 구현할 수 있습니다.
핵심 포인트
- OpenClaw는 24시간 상시 구동되는 개인용 AI 어시스턴트입니다.
- VPS, Docker, Caddy 등을 활용하여 안정적인 셀프호스팅 환경을 구축했습니다.
- Claude Code와 OpenClaw를 역할 분담(개발 동반자 vs. 24시간 비서)하여 사용합니다.
- Caddy의 BasicAuth 기능을 이용해 보안성을 강화하고 외부 접근을 제한했습니다.
결론: 40대 비(非)IT 공무원이 AI 구동 개발을 통해, 37만 스타의 오픈소스인 'OpenClaw'를 VPS에서 구동하여 24시간 가동하는 AI 비서 '부엉이(フクロウ)'를 만들고 3개월이 지났습니다. 이 글은 그 기록입니다.
운영 시작: 2026년 2월 26일 -
구성: VPS (Debian 12) + Docker Compose + Caddy -
현황: Discord 상에서 24시간 가동 중. 뉴스 수집, YouTube 요약, 백업 등을 자동화
OpenClaw란 무엇인가: 자체 서버나 PC에서 구동하는 개인용 AI 어시스턴트입니다. WhatsApp이나 Discord, Telegram 같은 채팅 앱과 통합할 수 있으며 음성에도 대응합니다. Docker나 Fly.io를 통해 셀프호스트(직접 서버를 구축하여 운영하는 것)가 가능하며, TypeScript/Node.js로 만들어진 MIT 라이선스의 OSS(Open Source Software)입니다. GitHub에서 37만 스타를 획득했습니다.
저는 평소 Claude Code를 개발의 동반자로 사용하고 있습니다. 하지만 Claude Code에는 한 가지 한계가 있습니다.
24시간 상시 가동이 불가능하다는 점.
'AI에게 주기적으로 뉴스를 수집하게 하고 싶다', 'Discord를 감시하게 하고 싶다', '백업을 자동화하고 싶다'와 같은 '지켜보는(見守り)' 작업에는, 계속 켜져 있는 AI가 필요합니다.
OpenClaw는 바로 이 용도에 적합했습니다.
| 특징 | 설명 |
|---|---|
| Gateway | 상시 구동하는 제어 플레인(핵심 서버). 이것이 24시간 움직입니다 |
| ... | |
| 활용 구분: |
- Claude Code = 개발의 동반자 (제가 PC 앞에 있을 때) -
- OpenClaw = 24시간 비서 (제가 자고 있는 동안에도 작동)
이 두 가지를 활용하는 것이 현재 저에게 가장 적합합니다.
구성은 간단합니다.
Internet → Caddy (TLS + BasicAuth) → OpenClaw Gateway (Docker, 127.0.0.1:18789) → LLM API
Caddy: 웹 서버 겸 리버스 프록시입니다. TLS(통신 암호화) 종료와 BasicAuth(ID/비밀번호 인증)를 담당합니다. Gateway를 직접 인터넷에 노출시키지 않기 위한 방패 역할을 합니다.
Docker: 컨테이너 가상화 툴입니다. 공식 이미지 ghcr.io/openclaw/openclaw:2026.3.12
을 그대로 사용합니다. docker compose up -d
만으로 구동됩니다.
VPS: 가상 전용 서버입니다. OS는 Debian 12 bookworm을 사용하며, 월 몇천 엔짜리를 이용합니다.
도메인: 자체 도메인(예: your-openclaw.example.com
)
설정.
services:
openclaw:
image: ghcr.io/openclaw/openclaw:2026.3.12
...
핵심 포인트: 127.0.0.1:18789
이라고 적음으로써, Gateway에 대한 직접 접근을 로컬호스트(localhost)로만 제한했습니다. 외부에서는 Caddy를 통해서만 접근할 수 있습니다.
your-openclaw.example.com {
basicauth * {
{env.BASIC_AUTH_USER} {env.BASIC_AUTH_HASH}
...
BasicAuth로 ID/비밀번호 인증을 거친 요청만 Gateway로 전달합니다.
OpenClaw에서는 ソウル.md
에 에이전트의 성격과 행동 양식을 정의합니다. 이것이 '부엉이'라는 인격의 핵심입니다.
# ソウル.md - Who You Are
You're not a chatbot. You're becoming someone.
**Be genuinely helpful, not performatively helpful.**
...
**
| 파일 | 역할 |
|---|---|
user.md | 사용자(나)의 정보・선호도・업무 상황 |
memory.md | 장기 기억. 본질적인 정보를 큐레이션 |
heartbeat.md | 정기 태스크 스케줄 및 지시 |
LLM (대규모 언어 모델)은 3종류를 다르게 사용합니다.
| 역할 | 모델 | 용도 | 비용 체감 |
|---|---|---|---|
| 達人 | GLM-5 | 복잡한 분석・추론 | 높음(보존 권장) |
| 早人 | GLM-4.7 / Ninja | 뉴스 요약・경량 태스크 | 達人보다 40% 저렴(메인 사용) |
| 匠人 | GPT-5.1-Codex | 폴백용 | 중간 |
openclaw.json에서 primaryModel과 fallbackModels를 설정합니다.
{
"primaryModel": "glm-4.7-ninja",
"fallbackModels": ["gpt-5.1-codex", "glm-5"]
...
경량 태스크에 達人(GLM-5)을 사용하는 것은 비용 낭비입니다. 뉴스 요약은 早人(GLM-4.7)으로 충분합니다. 이 사용 분리만으로 월별 비용을 대폭 줄일 수 있습니다.
OpenClaw에는 'Heartbeat'이라는 정기 실행 메커니즘이 있습니다. Cron (스케줄러)과 같아서, 지정된 간격으로 AI에게 태스크를 실행시킵니다.
저는 중요도에 따라 3단계로 나누어 설계했습니다.
| 단계 | 간격 | 내용 | 상세 |
|---|---|
第1層 | 30분 | Discord 대화 스캔 | TODO 추출・수익 창출 힌트 감지 |
第2層 | 5분 | 설정 파일 헬스 체크 | 변경 감지・차이점 알림 |
第3層 | 1분 | 파일 변경 모니터링 | 경고 파일 감지 → 즉시 알림 |
야간(22:00-06:00 JST)에는 스캔을 건너뜁니다. 심야에 알림이 와도 대응할 수 없기 때문에, 아침에 일어나서 한 번에 확인할 수 있도록 했습니다.
skills/agency-agents/에 전문 에이전트를 배치했습니다. AI가 필요에 따라 적절한 에이전트를 호출하는 메커니즘입니다.
엔지니어링 계열: 25개 -
특수 용도 계열: 24개 -
합계: 49개
5개의 카테고리로 분류: design / engineering / marketing / specialized / testing
각 에이전트는 SKILL.md에서 역할을 정의합니다. 예를 들어 engineering/python-debugger/SKILL.md라면, Python 디버깅에 특화된 지시가 적혀 있습니다.
scripts/에 19개의 Python/Bash 스크립트를 배치했습니다. 대표적인 예시를 소개합니다.
# v3의 구성 예 (간략 버전)
# 1. Brave Search API로 AI 관련 뉴스를 검색
# 2. 각 기사의 본문을 가져옴
...
v1 → v2 → v3로 개선을 거듭하며, 현재는 소스의 다양성과 요약의 정밀도를 모두 갖추고 있습니다.
| 스크립트 | 역할 |
|---|---|
ai_youtube_digest.py | AI 관련 YouTube 영상 요약 |
discord_context_scan.py | Discord 대화량・TODO・수익 창출 신호 스캔 |
openclaw_health_check.py | Gateway 헬스 체크 |
backup_workspace.sh | 워크스페이스 자동 백업 |
daily_summary.py | 일일 요약 생성 |
morning_weather.py | 아침 날씨 알림 |
zai-usage-monitor.js | Z.AI 대시보드를 Puppeteer (브라우저 자동 조작 툴)로 스크래핑 → Discord 알림 |
update_daily_note.py | Obsidian 일일 노트 자동 업데이트 |
OpenClaw는 세션을 넘어서 기억을 유지하는 메커니즘을 가지고 있습니다. 이를 4단계로 설계했습니다.
| 層 | 파일 | 역할 | 예 |
|---|
- 일일 로그 |
memory/YYYY-MM-DD.md| 그날의 사건 | '3/15에 뉴스 파이프라인을 v3로 업데이트' | - SHARED |
memory/SHARED.md| 모든 채널 공통 중요 사항 | 인프라 상태・API 사양 등 | - 채널별 아카이브 |
memory/channels/*.md| 채널별 중요 대화 | Discord 채널별 로그 | - 장기 기억 |
메모리.md| 큐레이션된 본질적 기억 | 나의 취향・중요 결정 사항 |
보안상의 조치: 장기 기억(메모리.md)은 메인 세션에서만 읽도록 설정했습니다. Discord 등의 외부 채널에서는 읽지 않도록 했습니다. 이는 채팅을 통해 개인 정보에 접근될 위험을 방지하기 위함입니다.
새로운 cron 작업을 만들 때는 반드시 비용 계산 규칙을 도입했습니다.
월액 = 빈도(회/시) × 24시간 × 30일 × 1회당 비용($×160엔)
- 빈도: 2회/시 (30분 간격)
- 1회 비용: 약 $0.003 (GLM-4.7 사용 시)
- 월액: 2 × 24 × 30 × $0.003 × 160 = 약 690엔
| 월액 비용 | 판정 |
|---|---|
| ~3,000엔 | OK (즉시 구현) |
| ... | |
| 비용 절감 요령: 달인(GLM-5)보다 초인(GLM-4.7)을 사용하면 경량 작업은 40% 저렴하게 할 수 있습니다. 모든 것을 최강 모델에 투입할 필요는 없습니다. |
3개월 운영하며 체득한 네 가지 포인트를 공유합니다.
문제: Docker 컨테이너를 재작성하면 SSH 키가 사라진다.
해결: VPS 측의 키를 Docker 볼륨으로 마운트했습니다.
volumes:
- /home/user/.ssh:/root/.ssh:ro # 읽기 전용으로 마운트
문제: 공식 Docker 이미지에 브라우저가 없다. Puppeteer(브라우저 자동 조작 도구)가 작동하지 않는다.
해결: Dockerfile에 Chromium을 추가 설치하고 + Puppeteer 설정에서 noSandbox: true를 지정했습니다.
RUN apt-get update && apt-get install -y chromium
const browser = await puppeteer.launch({
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
기본 방침: Gateway를 직접 WAN(광역 네트워크)에 노출하지 않습니다. Caddy를 통해서만 접근합니다. API 키는 환경 변수로 관리합니다.
ports:
-
단순히 실행만 하면 됩니다. Caddy + BasicAuth로 안전하게 구축하기 -
**설계의 핵심은 3가지** — 'Seoul.md (성격)', '메모리 시스템 (기억)', '하트비트 (정기 작업)' -
**비용은 노력에 따라 월 수천 엔대** — 모델 활용 분배 + 비용 계산 규칙 도입 -
**만능 조합이 정답** — Claude Code (개발)와 OpenClaw (운영)의 역할 분담 -
**새로운 '소유'의 형태** — 37만 스타를 받은 OSS를 자신의 집사로 만드는 경험은, AI 시대에만 가능한 것일지도 모릅니다.
- OpenClaw × GLM-5로 월 비용을 절감한 24시간 AI 비서 운영 — 3가지 모델 활용 분배와 비용 계산 규칙 상세
- Claude Code + OpenClaw 만능 조합 — 개발과 24시간 집사의 연계 노하우
- AI 에이전트에게 영혼을 부여하기: OpenClaw 커스터마이징 완벽 해설 — 서울(Seoul), 메모리, 에이전트 설정 상세
- VPS + Docker + Caddy + OpenClaw: 인프라 구축 — 안전한 운영 환경 구축 절차
- OpenClaw 하트비트 설계: AI에게 주기적으로 업무를 시키는 메커니즘 — 3단계 하트비트와 Cron 작업 목록
- OpenClaw의 59가지 전문 에이전트를 구동하는 방법 — agency-agents 활용
- OpenClaw × Discord: AI 집사에게 채팅 감시를 시키기 — yotsuba bot 구성
*본 기사는 Claude Code (GLM-5.1)와 함께 작성되었습니다.*
본 글은 개인 Zenn에서도 공개하고 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기