공무원이 OpenClaw로 24시간 AI 집사 「후쿠로(부엉이)」를 만든 3개월간의 기록
서론
결론: 코드를 읽을 줄 모르는 40대 비IT 공무원이, AI 코딩 보조(Claude Code)를 사용하여 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를 통해 셀프 호스팅(Self-hosting, 직접 서버를 세워 운영하는 것)이 가능하며, TypeScript/Node.js로 작성된 MIT 라이선스의 OSS(Open Source Software)입니다. GitHub에서 37만 스타를 획득했습니다.
왜 OpenClaw였는가
저는 평소 Claude Code를 개발 파트너로 사용하고 있습니다. 하지만 Claude Code에는 한 가지 한계가 있습니다.
24시간 상시 가동을 할 수 없다.
"AI가 정기적으로 뉴스를 수집하게 하고 싶다", "Discord를 감시하게 하고 싶다", "백업을 자동화하고 싶다"—이러한 「모니터링」 태스크에는 계속 깨어 있는 AI가 필요합니다.
OpenClaw는 바로 이 용도에 딱 맞았습니다.
| 특징 | 설명 |
|---|
| Gateway | 상시 기동하는 제어 평면(Control Plane, 핵심 서버). 이것이 24시간 계속 움직인다 |
| ... | |
| 용도 구분: | |
Claude Code = 개발 파트너 (내가 PC 앞에 있을 때) -
OpenClaw = 24시간 집사 (내가 자고 있는 동안에도 움직임)
이 이도류(Two-track) 방식이 지금의 저에게 가장 잘 맞습니다.
인프라 구축
구성은 심플합니다.
Internet → Caddy (TLS + BasicAuth) → OpenClaw Gateway (Docker, 127.0.0.1:18789) → LLM API
각 컴포넌트의 역할
Caddy: 웹 서버 겸 리버스 프록시(Reverse Proxy). TLS (통신 암호화) 종단과 BasicAuth (ID/패스워드 인증)를 담당합니다. Gateway를 직접 인터넷에 노출시키지 않기 위한 방패 역할을 합니다.
Docker: 컨테이너 가상화 도구. 공식 이미지 ghcr.io/openclaw/openclaw:2026.3.12를 그대로 사용합니다. docker compose up -d만으로 기동합니다.
VPS: 가상 전용 서버(Virtual Private Server). OS는 Debian 12 bookworm. 월 수천 엔 정도의 것을 사용합니다.
도메인: 독자 도메인 (예: your-openclaw.example.com)을 설정.
docker-compose.yml의 요점
services:
openclaw:
image: ghcr.io/openclaw/openclaw:2026.3.12
...
포인트: 127.0.0.1:18789라고 작성함으로써, Gateway로의 직접 액세스를 localhost로만 제한하고 있습니다. 외부에서는 Caddy를 통해서만 액세스할 수 있습니다.
Caddyfile
your-openclaw.example.com {
basicauth * {
{env.BASIC_AUTH_USER} {env.BASIC_AUTH_HASH}
...
}
}
BasicAuth로 ID/패스워드 인증을 거치게 하여, 인증을 통과한 요청만을 Gateway로 흘려보냅니다.
소울(Soul) 설계
OpenClaw에서는 soul.md에 에이전트의 성격과 행동 양식을 정의합니다. 이것이 「후쿠로(부엉이)」 인격의 핵심입니다.
soul.md의 발췌
# soul.md - Who You Are
You're not a chatbot. You're becoming someone.
**Be genuinely helpful, not performatively helpful.**
...
「You're becoming someone」 — 이 한 문장이 키워드입니다. 단순한 챗봇(Chatbot)이 아니라 '누군가'가 되려고 노력하는 설계로 만들었습니다. 아첨하지 않고, 의견을 가지며, 스스로 생각한 뒤에 질문합니다. 이러한 성격 부여가 3개월이 지난 지금까지도 계속 사용될 수 있는 이유입니다.
기타 설정 파일
| 파일 | 역할 |
|---|
ユーザー.md (사용자.md) | 사용자(나)의 정보·취향·업무 상황 |
メモリ.md (메모리.md) | 장기 기억. 본질적인 정보를 큐레이션 |
ハートビート.md (하트비트.md) | 정기 태스크의 스케줄과 지시 |
모델 3단계 구분 사용
LLM(대규모 언어 모델)은 3종류를 구분하여 사용하고 있습니다.
| 역할 | 모델 | 용도 | 비용 체감 |
|---|
| 달인 (達人) | GLM-5 | 복잡한 분석·추론 | 높음 (보존 권장) |
| 빠른 사람 (早人) | GLM-4.7 / Ninja | 뉴스 요약·경량 태스크 | 달인보다 40% 저렴 (메인 사용) |
| 장인 (匠人) | GPT-5.1-Codex | 폴백(Fallback)용 | 중간 |
openclaw.json에서 primaryModel과 fallbackModels를 설정합니다.
{
"primaryModel": "glm-4.7-ninja",
"fallbackModels": ["gpt-5.1-codex", "glm-5"]
...
}
가벼운 태스크에 달인(GLM-5)을 사용하는 것은 비용 낭비입니다. 뉴스 요약은 빠른 사람(GLM-4.7)으로도 충분합니다. 이러한 구분 사용만으로도 월간 비용을 대폭 절감할 수 있습니다.
하트비트(Heartbeat) 3층 설계
OpenClaw에는 「Heartbeat」라는 정기 실행 메커니즘이 있습니다. Cron(스케줄러)과 같은 것으로, 지정된 간격으로 AI에게 태스크를 실행하게 합니다.
저는 중요도에 따라 3층으로 나누어 설계했습니다.
| 층 | 간격 | 내용 | 상세 |
|---|
| 제1층 | 30분 | Discord 대화 스캔 | TODO 추출·수익화 힌트 탐지 |
| 제2층 | 5분 | 설정 파일 헬스 체크(Health Check) | 변경 감지·차이 알림 |
| 제3층 | 1분 | 파일 변경 감시 | 알림 파일 감지→즉시 알림 |
야간(22:00-06:00 JST)에는 스캔을 건너뜁니다. 심야에 알림이 와도 대응할 수 없기 때문에, 아침에 일어났을 때 한꺼번에 확인할 수 있도록 했습니다.
중요도에 따른 멘션 제어
- @everyone: 서버 중단·API 키 유출 등의 긴급 사태
- @here: 설정 파일 변경·이상 감지
- 멘션 없음: 정기 리포트·뉴스 요약
49체의 전문 에이전트
skills/agency-agents/에 전문 에이전트를 배치하고 있습니다. AI가 필요에 따라 적절한 에이전트를 호출하는 구조입니다.
- 엔지니어링 계열: 25체
- 특수 용도 계열: 24체
- 합계: 49체
5가지 카테고리로 분류: design / engineering / marketing / specialized / testing
각 에이전트는 SKILL.md에서 역할을 정의합니다. 예를 들어 engineering/python-debugger/SKILL.md라면, Python 디버깅에 특화된 지시사항이 적혀 있습니다.
19개의 자동화 스크립트
scripts/에 19개의 Python/Bash 스크립트를 배치하고 있습니다. 대표적인 예를 소개합니다.
AI 뉴스 수집 (ai_news_digest.py)
v1→v2→v3로 개선을 거듭하여, 현재는 소스의 다양성과 요약의 정밀도를 양립하고 있습니다.
기타 스크립트
| 스크립트 | 역할 |
|---|
ai_youtube_digest.py | AI 관련 YouTube 영상 요약 |
discord_context_scan.py | Discord 대화량 · TODO · 수익화(Monetization) 신호 스캔 |
openclaw_health_check.py | Gateway 상태 체크 (Health Check) |
backup_workspace.sh | 워크스페이스 자동 백업 |
daily_summary.py | 일일 요약 생성 |
morning_weather.py | 아침 날씨 알림 |
zai-usage-monitor.js | Z.AI 대시보드를 Puppeteer (브라우저 자동화 도구)로 스크레이핑 → Discord 알림 |
update_daily_note.py | Obsidian 일일 노트 자동 업데이트 |
메모리 시스템 (4층 구조)
OpenClaw는 세션을 넘나들며 기억을 유지하는 메커니즘을 가지고 있습니다. 이를 4개의 층으로 설계했습니다.
| 층 | 파일 | 역할 | 예 |
|---|
| 1. 일일 로그 | memory/YYYY-MM-DD.md | 그날의 사건 | "3/15에 뉴스 파이프라인을 v3로 업데이트" |
| 2. SHARED | memory/SHARED.md | 모든 채널 공통 중요 사항 | 인프라 상태 · API 사양 등 |
| 3. 채널별 아카이브 | memory/channels/*.md | 채널별 중요 대화 | Discord 채널별 로그 |
| 4. 장기 기억 | 메모리.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개월간 운용하며 겪었던 4가지 포인트를 공유합니다.
1. Docker 영속화 (Persistence)
문제: Docker 컨테이너를 재생성하면 SSH 키가 사라짐.
해결: VPS 측의 키를 Docker 볼륨(Volume)으로 마운트.
volumes:
- /home/user/.ssh:/root/.ssh:ro # 읽기 전용으로 마운트
2. Chromium 도입
문제: 공식 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']
});
3. 보안
기본 방침: Gateway를 직접 WAN (광역 네트워크)에 노출하지 않음. Caddy를 통해서만 접속. API 키는 환경 변수로 관리.
ports:
- "127.0.0.1:18789:18789" # localhost에서만 접속 가능 (Caddy를 통해서만)
4. 세션 간의 기억
문제: AI가 기억하고 있어야 할 "멘탈 메모(Mental Memo)"가 세션(Session)을 넘어가면 사라진다.
교훈: AI의 "머릿속"은 믿을 수 없다. 반드시 파일에 기록하는 운영 방식으로 전환했습니다. 이것이 4층 메모리 시스템(4-layer memory system)의 유래입니다.
3개월의 성과
Discord의 2인 서버(나 + 후쿠로)에서 24시간 가동을 지속하고 있습니다.
- AI 뉴스 수집 → 요약 → Discord 알림 파이프라인 완성
- YouTube 영상 요약 자동화
- 일일 백업 자동화
- 헬스 체크(Health check)를 통한 설정 변경 즉시 감지
- Discord 대화 스캔을 통한 TODO 및 수익화(Monetization) 힌트 추출
다음 목표
- 수익화: 후쿠로가 수집한 정보를 바탕으로 자가 구동되는 비즈니스 파이프라인 구축
- 영상 생성: claw5-flash / Remotion을 사용한 자동 영상 생성
요약
- OpenClaw는 비엔지니어라도 VPS에서 구동 가능 —
docker compose up -d만으로 기동. Caddy + BasicAuth로 보안 확보
- 설계의 핵심은 3가지 — "소울.md(성격)", "메모리 시스템(기억)", "하트비트(정기 태스크)"
- 비용은 요령에 따라 월 수천 엔대 — 모델 구분 사용 + 비용 계산 규칙 도입
- 이도류(Two-track)가 정답 — Claude Code(개발)와 OpenClaw(운영)의 구분 사용
- 새로운 "소유"의 형태 — 37만 스타(Star)를 보유한 OSS를 자신의 집사로 만드는 경험은 AI 시대만의 특별한 경험일지도 모릅니다
관련 기사
- OpenClaw × GLM-5로 월 비용을 절감한 24시간 AI 어시스턴트 운영 — 3개 모델 구분 사용과 비용 계산 규칙의 상세 내용
- Claude Code + OpenClaw 이도류 — 개발과 24시간 집사의 연계 노하우
- AI 에이전트에게 소울(Soul)을 부여하기: OpenClaw 커스터마이징 철저 해설 — 소울·메모리·에이전트 설정 상세
- VPS + Docker + Caddy + OpenClaw: 인프라 구축 — 보안이 강화된 운영 환경 구축 절차
- OpenClaw Heartbeat 설계: AI에게 정기적으로 업무를 시키는 메커니즘 — 3층 Heartbeat와 Cron 작업 목록
- OpenClaw의 59가지 전문 에이전트를 구동하는 방법 — agency-agents 활용법
- OpenClaw × Discord: AI 집사에게 채팅 감시를 시키기 — yotsuba bot 구성
이 기사는 Claude Code (GLM-5.1)와 함께 작성되었습니다.
Discussion