OpenClaw·Hermes 마이그레이션 (5/13) — 동시 운영은 불필요하다: 강점 7개 이식 가능성
필수 기능 0/7, 단일 플랫폼 + 메모리 보강이 최적이라는 결론
핵심 요약
- 플랫폼 A가 플랫폼 B보다 높은 점수를 받은 7개 카테고리를 "B로 이식 가능한가?" 기준으로 분석한 결과를 정리한다.
- 측정 결과: 완전 이식 5/7, 부분 이식 2/7, A 전용 필수 기능 0/7.
- 결론: 두 시스템 동시 운영은 비용 대비 이득이 없다. 단일 플랫폼 + 메모리 레이어 보강이 최적 구성.
- 이 글에서 가져갈 것: (1) "이식 가능성"이라는 의사결정 프레임, (2) 설정/정책 이식 vs 코드 이식 구분법, (3) 동시 운영 시 발생하는 3종 비용 분석.
배경 프레임
앞선 비교 분석에서 OpenClaw(이하 OC)은 7개 카테고리에서 Hermes보다 높은 점수를 기록했다. 여기서 자연스럽게 제기되는 질문은 다음이다.
"통합하면 이 7개를 잃는가?"
이 질문은 곧 "두 시스템을 병행해야 하는가?"로 이어진다. 아키텍처 판단의 핵심이므로 7개 카테고리를 하나씩 분해해 이식 가능성을 수치화한다.
분석 방법
각 카테고리에 대해 3개 항목을 평가한다.
- 이식 단위 — 코드인가, 설정인가, 정책인가
- 이식 형태 — 1:1 매핑인가, 어댑터 필요인가, 재구현인가
- 기능 손실 — 이식 후 기능 손실이 있는가
분류 기호: 완전 이식(기능 손실 0), 부분 이식(설정 일부 추가 필요), 재구현 필수(코드 레벨 재작성).
7개 카테고리 이식 분석
1. 채널/게이트웨이 (OC 5, Hermes 4) — 부분 이식
OC는 Discord 주채널 + Telegram Forum 6 토픽을 세밀한 라우팅 정책으로 관리한다. Hermes의 gateway/ 모듈도 동일한 채널 라우팅을 지원한다. 차이점은 Telegram Forum 토픽별 정책(어떤 메시지가 어떤 토픽으로 라우팅되는가)이 9개 룰로 정의돼 있다는 점이다.
이식 단위는 정책이며 코드가 아니다. Hermes gateway config에 9개 룰을 YAML로 옮기면 된다. 예상 분량 약 20줄.
2. 에이전트 관리 (OC 5, Hermes 4) — 부분 이식
OC의 에이전트 바인딩은 8계층(도구/모델/권한/채널/격리/메모리/스킬/이름)으로 구성된다. Hermes profile은 6계층을 네이티브 지원하고, 나머지 2계층(채널 세밀 정책, 메모리 접근 레벨)은 profile 정의에 필드 2개를 추가하면 매핑된다.
이식 후 기능 손실 없음. profile YAML schema 확장으로 해결되는 부분 이식 케이스.
3. 메모리 (OC 5, Hermes 3) — 완전 이식
이미 구현된 항목이다. memcore가 OC의 4-tier 메모리 계층을 SQLite 기반으로 재구축했고, MemcoreProvider 어댑터를 통해 Hermes에 연결된다. Hermes 기본 MEMORY.md의 2,200자 한계를 memcore가 대체한다.
여기서 핵심은 어댑터 패턴이다. Hermes 코어를 수정하지 않고 provider 레이어에서 메모리 백엔드를 교체한다.
4. 스케줄링 (OC 4, Hermes 3) — 완전 이식
OC의 cron 9개 + LaunchAgent 7개는 Hermes의 cron/ 모듈 + macOS LaunchAgent 조합으로 1:1 재구성 가능하다. memcore CLI 커맨드를 cron entry로 등록하면 기존 스케줄이 그대로 동작한다.
작동 원리: cron/LaunchAgent는 OS 수준 기능이라 특정 플랫폼에 묶이지 않는다. 의존하는 건 실행 대상 CLI의 존재뿐이다.
5. 플러그인 (OC 4, Hermes 3) — 완전 이식
oMLX, Scrapling 같은 외부 통합은 본질적으로 도구 등록이다. Hermes의 optional-skills/ 디렉터리에 래퍼를 두는 방식으로 이식된다. OC 전용 프로토콜은 사용되지 않았다.
적용 가능 패턴: 외부 도구 통합은 래퍼 디렉터리 + 표준 인터페이스로 설계하면 플랫폼 이전 시 이식 비용이 최소화된다.
6. 설정 관리 (OC 4, Hermes 3) — 완전 이식
config-drift 감지기와 agent-linter는 스크립트지 플랫폼 기능이 아니다. Hermes cron payload로 그대로 이전된다.
여기서 드러나는 원리: "플랫폼 기능처럼 보이는 것"이 실제로는 스크립트 + 스케줄러 조합인 경우가 많다. 이식 비용 산정 시 이 구분이 결정적이다.
7. 컨텍스트 관리 (OC 4, Hermes 3) — 완전 이식
safeguard compaction과 softThreshold 6000 값은 Hermes context_compressor.py 설정으로 1:1 매핑된다. 알고리즘은 동일하고 파라미터 위치만 바뀐다.
이식 가능성 요약
| 카테고리 | OC 점수 | 이식 가능성 | 이식 형태 |
|---|---|---|---|
| 채널/게이트웨이 | 5 | 부분 | gateway config 약 20줄 |
| 에이전트 관리 | 5 | 부분 | profile YAML 2 필드 |
| 메모리 | 5 | 완전 | memcore (구현 완료) |
| 스케줄링 | 4 | 완전 | cron + LaunchAgent |
| 플러그인 | 4 | 완전 | optional-skills 래퍼 |
| 설정 관리 | 4 | 완전 | cron payload |
| 컨텍스트 관리 | 4 | 완전 | context_compressor 설정 |
| A 전용 필수: 0/7 |
7개 카테고리 어디에도 "A 플랫폼 없이는 불가능"한 기능은 없다. 이식 형태는 코드 레벨 재구현이 아니라 설정/정책 이전 또는 어댑터 추가에 머문다.
동시 운영의 3종 비용
이식 가능성이 확인되면 다음 질문은 "그래도 동시 운영이 안전하지 않은가?"다. 그러나 동시 운영은 3가지 비용을 구조적으로 발생시킨다.
비용 1 — 메모리 동기화 lag
두 시스템이 동일한 상태를 바라보려면 sync 레이어가 필요하다. sync는 본질적으로 비동기이므로 lag이 존재한다. lag이 있는 메모리는 "한 곳에서 쓴 내용이 다른 곳에서 즉시 보이지 않는" 상황을 만든다. 이는 에이전트 간 의사결정에서 race condition의 원인이 된다.
비용 2 — 운영 복잡도 2배
cron 엔트리 2벌, LaunchAgent plist 2벌, 로그 스트림 2곳, 알림 채널 2개. 운영 오버헤드가 선형이 아니라 상호작용 포함 O(n²)로 증가한다. 장애 시 "어느 쪽 문제인가?" 판단에 추가 시간이 든다.
비용 3 — 라우팅 인지 부하
"이 작업은 A에서 할까 B에서 할까?"를 매 작업마다 판단해야 한다. 이는 자동화의 목적(판단 부하 감소)과 정면으로 충돌한다.
한계와 적용 범위
이 분석은 단일 사용자 + 단일 호스트 환경에서 유효하다. 다음 조건에서는 결론이 달라진다.
- 지리적으로 분산된 다중 호스트 — 장애 격리 목적의 중복 운영이 정당화된다
- 이기종 환경(예: macOS + Linux) — 플랫폼별 기능 가용성이 이식 가능성 테이블을 바꾼다
- 전환 기간 병행 운영 — 일시적 동시 운영은 비용이 아니라 리스크 완화 수단
적용 가능한 프레임
다른 마이그레이션에도 재사용 가능한 의사결정 템플릿:
- 신/구 플랫폼 각 카테고리별 점수 측정
- 구 플랫폼 우세 항목을 "이식 단위(코드/설정/정책)"로 분해
- 이식 형태(1:1 / 어댑터 / 재구현) 매핑
- 기능 손실 0이 아닌 항목만 "동시 운영 근거"로 인정
- 기능 손실 0이면 단일 플랫폼 + 어댑터 구성으로 진행
이 프레임의 핵심은 "플랫폼 기능처럼 보이는 것 중 실제로는 설정/스크립트인 것"을 식별하는 것이다.
열린 질문
- memcore 같은 메모리 어댑터 패턴이 다른 백엔드(벡터 DB, 그래프 DB)에도 동일한 비용으로 적용 가능한가?
- 부분 이식 케이스(YAML 필드 추가)가 장기적으로 schema drift 비용을 만들지 않는가?
- 이식 후에도 구 플랫폼 로그/스냅샷은 얼마나 오래 보관해야 하는가?
시리즈 색인 (전체 16편)
1~6편: 인벤토리 → 매핑 → 자산 리뷰 → 5주 명세 → memcore 초기 → 누락 감사 7~13편: Tier 게이트 → Heartbeat v2 → Router_Control → 벡터 DB → 실패 교훈 → Manager/Runner → 5 미결 결정 14~16편: OC vs Hermes 비교 → memcore 완성 → 동시 운영 불필요 (이 글)
시리즈 전체 안내: 시리즈 목차
댓글
댓글 쓰기