OpenClaw vs GoClaw 완벽 비교 — 지피터스 4봇 운영자의 이관 후기

지피터스에서는 슬랙 봇 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 공식 specsOOM 이슈 #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인용 세팅으로는 지금도 훌륭합니다. 다만 팀 단위로 봇 여러 마리를 돌리려면 멀티테넌트 데이터베이스가 필수더라고요.

같은 고민 하시는 분 있으면 지피터스에서 편하게 얘기 나누면 좋겠습니다.

8
5개의 답글

뉴스레터 무료 구독