본문으로 건너뛰기

© 2026 Molayo

Zenn헤드라인2026. 06. 07. 00:43

공무원이 OpenClaw로 24시간 AI 집사 '후쿠로(부엉이)'를 만든 3개월간의 기록

요약

비IT 개발자인 공무원이 Claude Code를 활용해 오픈소스 OpenClaw를 VPS에 구축하고 24시간 가동되는 AI 집사 '후쿠로'를 만든 과정을 기록했습니다. Docker와 Caddy를 이용해 보안과 자동화를 갖춘 개인용 AI 에이전트 인프라를 구성하는 방법을 다룹니다.

핵심 포인트

  • Claude Code(개발 파트너)와 OpenClaw(24시간 집사)의 역할 분담
  • Docker Compose와 Caddy를 활용한 안정적인 셀프 호스팅 인프라 구축
  • VPS 환경에서 뉴스 수집 및 YouTube 요약 등 자동화 태스크 구현
  • BasicAuth와 리버스 프록시를 통한 보안 설정 적용

공무원이 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에서 primaryModelfallbackModels를 설정합니다.

{
"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)

# v3 구성 예시 (간략 버전)
# 1. Brave Search API로 AI 관련 뉴스 검색
# 2. 각 기사의 본문 취득
...

v1→v2→v3로 개선을 거듭하여, 현재는 소스의 다양성과 요약의 정밀도를 양립하고 있습니다.

기타 스크립트

스크립트역할
ai_youtube_digest.pyAI 관련 YouTube 영상 요약
discord_context_scan.pyDiscord 대화량 · TODO · 수익화(Monetization) 신호 스캔
openclaw_health_check.pyGateway 상태 체크 (Health Check)
backup_workspace.sh워크스페이스 자동 백업
daily_summary.py일일 요약 생성
morning_weather.py아침 날씨 알림
zai-usage-monitor.jsZ.AI 대시보드를 Puppeteer (브라우저 자동화 도구)로 스크레이핑 → Discord 알림
update_daily_note.pyObsidian 일일 노트 자동 업데이트

메모리 시스템 (4층 구조)

OpenClaw는 세션을 넘나들며 기억을 유지하는 메커니즘을 가지고 있습니다. 이를 4개의 층으로 설계했습니다.

파일역할
1. 일일 로그memory/YYYY-MM-DD.md그날의 사건"3/15에 뉴스 파이프라인을 v3로 업데이트"
2. SHAREDmemory/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

AI 자동 생성 콘텐츠

본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0