지피터스에서는 슬랙 봇 4마리(뽀짝이/뽀야/시고르/friday)를 운영하고 있습니다. OpenClaw 시절에는 봇이 메모리를 워낙 많이 먹어서 Mac mini 한 대에 2마리 이상은 못 올렸어요. 그래서 Mac mini 2대를 굴리고 있었습니다.
GoClaw로 옮기고 나니 Mac mini 한 대에 봇 4마리가 다 올라갔습니다. 결정에는 30초 걸렸어요.
이 글은 OpenClaw vs GoClaw를 운영자 시점에서 정리하고, 왜 지피터스가 GoClaw을 선택했는지, 실제로 옮기면서 겪은 두 가지 사건을 공유하는 글입니다.
한눈에 보는 OpenClaw vs GoClaw
인프라
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[언어]
OpenClaw Node.js / TypeScript
GoClaw Go (단일 25MB 바이너리)¹
[메모리 사용량]
OpenClaw 게이트웨이 ~300MB + 채널당 ~100MB
+ 에이전트 세션 400~800MB²
GoClaw 봇 1마리당 ~38MB³
[Mac mini 1대당 가능 봇 수]
OpenClaw 2마리 (지피터스 실측)
GoClaw 4마리 이상 (여유)
[시작 시간]
OpenClaw 수 초
GoClaw 1초 미만¹
[최소 운영 비용]
OpenClaw Mac mini도 부담
GoClaw $5짜리 VPS에서도 동작¹
━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━¹ GoClaw README / ² OpenClaw 공식 specs 및 OOM 이슈 #41778 / ³ GoClaw 공식 case-study
상태 관리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[상태 저장]
OpenClaw 파일 기반
GoClaw PostgreSQL 멀티테넌트
[사용자별 세션 격리]
OpenClaw 안 됨 (메모리 공용)
GoClaw DB 레벨 per-user 격리
[자격증명 보안]
OpenClaw 평문 가능
GoClaw AES-256-GCM 암호화 강제
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━멀티 봇 운영
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[봇 추가]
OpenClaw openclaw.json 수동 편집 + 스크립트
GoClaw 대시보드 위자드 (스캔→선택→import)
[봇별 도구 권한]
OpenClaw MCP 서버 단위
GoClaw 에이전트별 allow/deny
(mcp/grant_checker.go)
[권한 승격 모델]
OpenClaw dmPolicy + allowFrom 페어링
(수평 권한)
GoClaw paired_by가 owner면
자동 슈퍼유저 승격
(loop_context.go:316)
[봇 간 협업]
OpenClaw 별도 메커니즘 없음
GoClaw Agent Teams
(sync/async/bidirectional)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━LLM/채널
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[LLM 프로바이더]
OpenClaw 제한적
GoClaw 20+ (Anthropic native +
prompt caching)
[지원 채널 수]
OpenClaw 22개 (LINE/Matrix/iMessage/
Signal/Teams 등)
GoClaw 7개 (Telegram/Discord/Slack/
Zalo×2/Feishu/WhatsApp)
[운영 UI]
OpenClaw CLI/JSON 편집
GoClaw React Web Dashboard
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━왜 지피터스는 GoClaw을 선택했나
지피터스의 운영 조건은 "봇 여러 마리 + 운영자 여러 명 + 같은 슬랙 워크스페이스"였어요. 1인용 OpenClaw 세팅으로는 풀 수 없는 4가지 문제가 있었습니다.
1. 봇 4마리에 Mac mini 2대
OpenClaw는 봇이 메모리를 많이 먹어서 Mac mini 한 대에 2마리 올리면 끝이었어요. Mac mini 2대를 따로 굴렸고, 봇이 더 늘어나면 한 대 더 사야 할 판이었습니다.
GoClaw로 옮긴 뒤로는 Mac mini 한 대에 봇 4마리가 다 올라갔습니다. Mac mini 1대 비웠어요.
2. 운영자 4명에게 자동 권한 승격
지피터스는 운영자가 4명입니다. OpenClaw도 dmPolicy/allowFrom/페어링으로 여러 사용자에게 접근 권한은 줄 수 있어요. 그런데 "페어링한 사용자가 슈퍼유저 권한까지 자동으로 받는" 메커니즘은 없습니다. 결국 운영자별 권한 분리를 위해서는 별도 코드가 필요한 구조였어요.
GoClaw은 paired_by 필드가 owner면 자동 슈퍼유저로 승격됩니다. DB 한 줄 UPDATE로 운영자 4명에게 즉시 권한 부여. 코드 수정 0줄.
3. 봇별로 다른 도구 권한
뽀짝이만 위험한 슬랙 메시지 쓰기 도구를 차단하고, 뽀야는 허용 — 이런 게 가능합니다. OpenClaw은 서버 단위 전역 권한이라 안 됐어요.
4. 보안 기본값
OpenClaw는 슬랙·AI 토큰이 openclaw.json에 평문으로 저장됩니다 (xoxb-..., xapp-... 그대로). 운영자 여럿이 파일·DB에 접근하는 환경에서는 위험해요. GoClaw은 credentials/API 키가 AES-256-GCM 암호화 (internal/crypto/aes.go, aes-gcm: 접두사 + nonce + ciphertext). 평문 INSERT하면 로그에 경고가 찍힙니다.
멀티봇 운영의 기능적 강점
봇 4마리를 동시에 운영하면서 GoClaw의 기능들이 어떻게 도움이 됐는지 정리합니다. 단순히 "여러 봇을 띄울 수 있다"가 아니라, 봇끼리 협업하고 권한을 분리하는 구조가 핵심이에요.
1. 봇마다 독립된 인격 파일 (per-agent context)
GoClaw은 봇별로 SOUL.md(인격), AGENTS.md(행동 규칙), IDENTITY.md(정체성) 같은 컨텍스트 파일을 따로 저장합니다 (agent_context_files 테이블). 뽀짝이는 명랑 발랄 톤, 뽀야는 차분한 양육자 톤, 시고르는 시니컬 톤 — 같은 워크스페이스에서 완전히 다른 인격으로 동작해요.
OpenClaw에도 워크스페이스 분리는 있지만, GoClaw처럼 DB 단위로 봇 간 컨텍스트가 격리돼서 한쪽 변경이 다른 쪽에 영향 안 가는 구조가 운영하기 훨씬 편합니다.
2. 봇마다 다른 LLM 모델·프로바이더
각 봇이 자기 LLM 프로바이더를 따로 가질 수 있어요. 뽀짝이는 Claude Opus, 뽀야는 Sonnet, 가벼운 응답 봇은 Haiku — 비용과 성능을 봇별로 최적화할 수 있습니다. GoClaw README 기준 20+개 프로바이더 (Anthropic, OpenAI, Gemini, DeepSeek, xAI, MiniMax 등) 자유 조합 가능.
3. 봇별 도구 권한 (MCP allow/deny)
이게 운영자 입장에서 진짜 큰 차이예요. MCP(외부 도구 연결) 권한을 에이전트 단위로 allow/deny 가능합니다 (internal/mcp/grant_checker.go).
지피터스에서 실제로 쓰는 예:
- 뽀짝이만 위험한 슬랙 메시지 쓰기 도구(
conversations_add_message) 차단 - 시고르만 노션 MCP 접근 허용
- 모든 봇에 검색은 허용, 특정 봇만 파일 수정 허용
OpenClaw은 MCP 서버 단위 권한이라 이런 세밀한 제어가 안 돼요.
4. 봇 간 협업 — Agent Teams
GoClaw에는 Agent Teams 기능이 있어요 (docs/11-agent-teams.md). Lead 봇이 Member 봇들에게 작업을 위임하고, 결과를 받아 종합합니다. 구체적으로:
- 공유 Task Board: 봇끼리 작업을 등록·청구·완료 (
team_tasks도구).blocked_by의존성도 표현 가능 - 공유 Mailbox: 봇 간 직접 메시지·브로드캐스트 (
message도구) - 3가지 위임 모드: sync(기다림) / async(쏘고 잊음) / bidirectional(양방향)
- 자동 완료: 위임이 끝나면 연결된 task가 자동으로 완료 처리
- 병렬 배 치: 여러 멤버가 동시 작업 시 결과를 한 번에 모아서 lead에 전달
예: 사용자가 뽀짝이에게 복잡한 리서치 요청 → 뽀짝이가 task 3개 만들어서 뽀야·시고르·friday에게 병렬 위임 → 결과 모아서 사용자에게 응답.
5. 작업 격리 — Lane-based Scheduler
봇 4마리가 동시에 일하면 자원 경쟁이 생깁니다. GoClaw은 작업을 Lane(차선)으로 분리해서 스케줄링해요 (CHANGELOG에 명시): Main lane(사용자 응답) / Subagent lane(서브 에이전트) / Team lane(팀 작업) / Cron lane(예약 작업).
같은 세션 내에서 최대 3개 봇 실행 동시 처리 + 적응형 스로틀, 히스토리 격리를 위한 deferred session writes도 검증 완료. 한 봇이 무거운 작업을 해도 다른 봇 응답이 안 막히는 구조예요.
6. 사용자별 세션 격리 (Multi-tenant PostgreSQL)
같은 봇·같은 채널이라도 사용자별로 독립 세션이 유지됩니다. A 운영자의 코드 리뷰 대화 맥락이 B 운영자의 회의록 정리 대화에 섞이지 않아요. PostgreSQL 멀티테넌트의 WHERE tenant_id = ? 격리가 항상 들어갑니다.
OpenClaw은 파일 기반 상태라서 옵션을 켜도 race condition + 메모리 공용 문제가 남는다고 GoClaw 공식 case-study에서도 지적됐습니다.
7. 봇별 자기 진화 (Self-Evolution)
이건 운영해보니 신기했는데, GoClaw 봇은 자기 사용 패턴(메트릭)을 보고 자기 행동 가이드(CAPABILITIES.md)를 스스로 업데이트할 수 있어요 (README "Self-Evolution"). 단, 이름·정체성·핵심 목적은 못 건드리도록 보호됩니다. 봇이 4마리니까 각자 다른 방향으로 성장하 는 게 보입니다.
8. 봇별 운영 메트릭 + 트레이스
대시보드에서 봇별로 LLM 호출 횟수, 토큰 사용량, prompt cache hit rate, 응답 시간을 다 볼 수 있어요. 어떤 봇이 토큰을 많이 먹는지, 어떤 봇이 자주 실패하는지 봇별로 분리해서 보입니다. OpenTelemetry OTLP export도 지원.
실제로 겪은 일 1: 봇 4마리가 무한 루프에 빠졌다
이건 진짜 예상 못 했어요. GoClaw로 옮기고 봇 4마리를 같은 슬랙 채널에 멤버로 넣었더니, 뽀짝이가 답하면서 뽀야를 멘션하면, 뽀야가 그걸 받아서 또 답하고, 그 답에 다시 다른 봇이 멘션돼서 또 답하고... 무한 루프가 돌더라고요.
원인은 GoClaw의 thread participation cache가 외부 봇 메시지에도 적용돼서, "한 번 대화에 참여한 스레드는 멘션 없어도 응답"하는 동작이 봇 간에 발동된 거였어요.
코드를 패치했습니다.
- 외부 봇 메시지일 때는 cache 무시하고 strict mention만 보도록
- 봇별로 위험한 슬랙 도구는 deny 처리
여러 AI 봇을 같은 공간에 두면 의외로 시끄러워집니다. 봇 1마리만 띄울 때는 절대 안 보이는 문제예요.
실제로 겪은 일 2: Codex로 코드 읽다가 dormant 기능 발견
운영자 4명에게 슈퍼유저 권한을 어떻게 줄지 고민하다가, Codex CLI로 GoClaw 코드를 같이 읽어봤어요.
관리자 페어링하면 자동으로 슈퍼유저로 승격되는 로직이 어디 있어?
loop_context.go 위주로 봐줘Codex가 loop_context.go:316에서 페어링 → 슈퍼유저 승격 로직을 찾아냈습니다. 이미 만들어져 있는데 paired_devices 테이블이 비어 있어서 dormant 상태였더라고요. 문서에는 한 줄도 안 적혀 있었어요.
DB에 페어링 데이터 한 줄씩 INSERT하니 운영자 4명에게 즉시 권한이 부여됐습니다. 코드 한 줄도 안 고쳤어요.
오픈소스 프로젝트 옮길 때 이미 만들어졌는데 안 쓰는 기능이 의외로 많습니다. 환경변수 한 줄, DB 한 줄로 켤 수 있는 dormant 기능을 찾는 것만으로도 큰 시간 절약이 돼요.
결과
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[봇 4마리 운영에 필요한 Mac mini]
Before 2대 (지피터스 실측)
After 1대 (지피터스 실측)
[메모리 사용량]
Before 봇 + 게이트웨이 합산 ~수백 MB ~ 1GB+
After 봇 1마리당 ~38MB
(공식 case-study 측정)
[슈퍼유저 자동 승격]
Before 별도 코드 필요
After DB 한 줄 (4명 즉시)
[봇별 도구 권한]
Before MCP 서버 단위
After 에이전트별 allow/deny
[credentials 보안]
Before 평문 저장
After AES-256-GCM 암호화
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━수치보다 체감이 더 컸어요. Mac mini 1대가 잠자기 시작했고, "어떻게 권한 줘야 하지" 같은 운영 고민이 사라졌습니다.
AI 활용 팁!
누구에게 GoClaw을 추천하나
이런 분들에게 추천합니다:
- 슬랙·디스코드·텔레그램에서 AI 봇을 여러 마리 운영하는 분
- 운영자가 여러 명이라서 권한 분리가 필요한 분
- Claude Max 구독료만으로 API 사용을 하 고 싶은 분
- 봇별로 다른 인격·모델·도구 권한을 주고 싶은 분
이런 분들은 다시 생각해보세요:
- 혼자 쓸 거면 OpenClaw로 충분합니다. 굳이 옮길 필요 없어요.
- LINE·Matrix·iMessage·Signal 같은 채널이 필수면 OpenClaw가 22개로 더 많이 지원합니다 (단, 카카오톡은 둘 다 미지원이라 별도 도구 필요).
- Docker·PostgreSQL 운영 경험이 전혀 없으면 초기 학습 비용이 큽니다.
본인만 아는 팁: fork 워크플로우로 안전한 운영
GoClaw 운영하다 보면 본인 환경에 맞는 패치가 생깁니다. 처음에는 서버에서 직접 수정하고 scp로 동기화했는데, 다음 업데이트 때 충돌나기 쉬워요.
지금은 GitHub fork를 만들어서 운영하고 있습니다. 로컬 패치는 fork에 push, 서버는 fork에서 pull. 본가(upstream)에서 새 버전 나오면 fork를 rebase로 따라가면 됩니다.
장점:
- 로컬 패치가 영구 보존됨 (서버 재설치해도 안전)
- 다음 업데이트 충돌이 git rebase로 명시적으로 해결됨
- 본가에 PR 보내기도 편함
바로 쓸 수 있는 프롬프트
오픈소스 프로젝트 옮길 때 잠자고 있는 기능 찾는 프롬프트:
[프로젝트 경로]에서 [내가 원하는 기능, 예: "관리자 권한 자동 부여", "사용자 세션 격리"]과 관련된 코드를 찾아줘.
이미 구현돼 있는데 활성화 안 된 기능이 있는지 확인해줘. 환경변수, DB 컬럼, 설정 파일 한 줄로 켤 수 있는 dormant 기능을 우선해서 찾아줘.
발견하면 1) 어떤 파일의 몇 번째 줄에 있는지, 2) 어떻게 활성화하는지, 3) 활성화하면 어떻게 동작하는지 알려줘.
[프로젝트 경로]는 본인이 분석할 코드 위치로 변경하세요.
마무리
기술 선택은 결국 "무엇을 최적화하고 싶은가"의 문제입니다. 지피터스는 "여러 봇을 운영자 여럿이 안전하게 함께 운영하는 것"을 최적화하고 싶었어요. GoClaw이 이걸 가장 잘 해줬습니다.
OpenClaw가 나쁜 도구는 아니에요. 1인용 세팅으로는 지금도 훌륭합니다. 다만 팀 단위로 봇 여러 마리를 돌리려면 멀티테넌트 데이터베이스가 필수더라고요.
같은 고민 하시는 분 있으면 지피터스에서 편하게 얘기 나누면 좋겠습니다.