지난 며칠간 개인용 AI 비서인 OpenClaw(오픈클로)를 로컬 환경(맥북/리눅스)에 직접 구축하고, 설정부터 토큰 최적화까지 샅샅이 뜯어보며 치열하게 고민했던 과정을 정리해 보았습니다.

단순한 사용기를 넘어, "이 에이전트가 도대체 어떤 녀석이고, 시스템 내에서 어떻게 살아 움직이는가?"에 대한 본질적 궁금증부터, 실제 운영 과정에서 마주친 비용 폭증 문제와 그 해결책, 그리고 향후 개발 파트너로서의 확장 가능성까지 살펴보았습니다.


1. OpenClaw란 무엇인가?:작동 원리와 아키텍처

흔히 쓰이는 ChatGPT, Gemini 같은 웹 기반 챗봇과 OpenClaw 같은 로컬 AI 에이전트의 가장 큰 차이는 물리적인 컴퓨터의 제어권자율성에 있습니다. OpenClaw는 내 컴퓨터의 백그라운드에 상주하며 시스템을 제어하고, 독립적으로 작업을 수행할 수 있는 "자율형 개인 비서(Autonomous Personal Assistant)" 프레임워크입니다.

🧠 이원화된 시스템 구조: 엔진과 자아의 분리

오픈클로의 구조를 뜯어보면 크게 두 가지 영역으로 나뉩니다.

  • 구동 엔진 (전역 node_modules): Node.js 기반의 이벤트 루프로 돌아가는 핵심 로직 꾸러미입니다. 사용자의 명령을 파싱하고, 도구를 실행하며, LLM과 통신하는 뼈대 역할을 합니다.
  • 자아와 기억 (~/.openclaw 폴더): 바로 이 부분이 오픈클로의 핵심 정체성입니다. 이 폴더 안에는 에이전트의 성격이 정의된 SOUL.md, 설정 파일인 openclaw.json, 대화 세션 기록(sessions), 그리고 각종 정보가 축적되는 memory 폴더가 격리되어 관리됩니다.

🔄 의사 학습(Pseudo-learning) 메커니즘

OpenClaw의 가장 흥미로운 점은 LLM 모델 자체를 튜닝(Fine-tuning)하지 않고도 스스로 성장하는 듯한 모습을 보인다는 것입니다. 그 비결은 바로 파일 시스템을 활용한 장기 기억(Long-term Memory) 관리에 있습니다.
대화 도중 알게 된 나의 취향이나, 에러를 경험했을 때 "아, Anthropic API 키는 이렇게 설정하면 안 되는구나"라는 깨달음을 얻으면 이를 텍스트 파일(MEMORY.md나 일일 메모)에 스스로 적어둡니다. 그리고 다음 동작 시 이 기록을 읽어들여 같은 실수를 반복하지 않는 경험적(Empirical) 행동 교정을 구현합니다.

📂 Openclaw 폴더 및 파일 구조

Openclaw를 설치하고 나면 사용자 계정 홈 디렉토리에 숨김 폴더인 .openclaw가 생성됩니다(MacOS/Linux기준). 이 폴더는 Openclaw가 동작하는데 필요한 설정, 로그, 에이전트 데이터 등을 보관하는 핵심 디렉토리입니다.

아래는 .openclaw 폴더의 전체적인 구조와 각 요소들에 대한 간단한 설명입니다.

~/.openclaw/
├── agents/
│   └── main/
│       └── sessions/
├── completions/
│   ├── openclaw.bash
│   ├── openclaw.fish
│   ├── openclaw.ps1
│   └── openclaw.zsh
├── identity/
│   └── device.json
└── logs/
    ├── gateway.err.log
    └── gateway.log

📝 주요 폴더 및 파일 설명

1. agents/ (에이전트 데이터)

AI 에이전트와 관련된 데이터와 상태가 저장되는 공간입니다.

  • main/sessions/: 메인 에이전트가 사용자와 상호작용했던 채팅 세션 내역이나 실행 상태 등을 기록하고 관리하는 폴더로 추정됩니다.

2. completions/ (터미널 자동 완성 스크립트)

터미널에서 openclaw 명령어를 입력할 때, 탭(Tab) 키를 눌러 명령어를 자동 완성할 수 있도록 돕는 쉘 스크립트 파일들이 모여있는 곳입니다.

  • 사용 중인 터미널 환경에 맞춰 Bash, Fish, PowerShell , Zsh 용 스크립트를 모두 기본적으로 제공합니다.

3. identity/ (인증 및 기기 식별)

기기 인증이나 사용자 식별과 관련된 보안 정보가 담긴 폴더입니다.

  • device.json: 현재 Openclaw가 설치된 기기의 고유 식별자나 인증 토큰 등, 시스템과 통신하는 데 필요한 디바이스 정보가 JSON 형태로 저장되어 있습니다.

4. logs/ (시스템 로그)

Openclaw가 실행되면서 발생하는 각종 시스템 로그가 평문 형태로 저장됩니다. 시스템에 문제가 생겼을 때 트러블슈팅 용도로 가장 먼저 확인해야 하는 폴더입니다.

  • gateway.log: 정상적인 동작 과정, 통신 내역 등 일반적인 시스템 실행 로그가 기록됩니다.
  • gateway.err.log: 프로그램 실행 중 발생한 오류나 예외 상황들만 따로 분리되어 기록됩니다. 빈 화면이 뜨거나 연결이 안 될 때 용하게 쓰입니다.

2. Antigravity vs OpenClaw: 두 에이전트의 결정적 차이

저에게는 개발 코파일럿인 'Antigravity(애니)'와 일상 비서인 'OpenClaw(노아)', 두 명의 강력한 로컬 에이전트가 있습니다. (일일이 풀네임으로 지칭하기 귀찮아서 이름을 붙여줬습니다.)
둘 다 제 컴퓨터의 터미널과 파일에 접근할 수 있지만, 설계 철학이 완전히 다릅니다.

특징Antigravity (애니)OpenClaw (노아)
운영 방식대화 주도형 (Interactive)
내가 부를 때만 나타나서 복잡한 미션을 깊이 있게 수행하고 종료함
이벤트 주도형 (Autonomous)
systemd 서비스로 24시간 백그라운드에 상주하며 능동적으로 알림
기억 체계프로젝트/세션 중심
현재 해결 중인 코딩이나 분석 과제의 문맥(Context)에 고도로 집중함
영구적 파일(Log) 중심
과거의 대화, 사용자의 성향, 포트폴리오 등을 파일에 영구 축적함
강점 영역복잡한 시스템 분석 및 코딩
아키텍처 설계, 대규모 리팩토링, 버그 트래킹 등 "전문 엔지니어"
개인화된 일상 자동화
뉴스 스크랩, 스케줄 모니터링, 외부 메신저(디스코드) 연동 등 "전담 비서"

결론적으로: Antigravity는 내가 코딩할 때 옆자리에 앉혀두고 자문을 구하는 '사수 개발자' 라면, OpenClaw는 내가 자는 동안에도 내 주식 포트폴리오를 모니터링하고 아침에 디스코드로 브리핑해 주는 '성실한 비서' 입니다.(실제로 그렇게 썼습니다.)


3. 그래서 OpenClaw는 어떤 용도로 사용해야 할까?

OpenClaw의 강점인 자율성과 외부 연결성을 극대화하기 위해서는 다음과 같은 정기적이고 반복적인 '모니터링 및 자동화 업무'에 투입하는 것이 가장 이상적입니다.

  1. 투자 자산 및 뉴스 모니터링:
    • 매일 아침 크론잡(Cron)을 통해 내가 보유한 주식이나 채권과 관련된 뉴스를 스크래핑하고 요약하여 디스코드로 브리핑
  2. 시스템 헬스 체크:
    • 로컬 서버나 개인용 NAS의 메모리 부족, 게이트웨이 에러 등 상태를 주기적으로 체크하고 이상 발생 시 나에게 즉각 경고
  3. 가벼운 리서치 및 개인화 비서:
    • 외부에서 폰으로 디스코드에 접속해 "내일 일정 정리해 줘", "최근에 저장한 링크 요약해 줘" 등의 일상적인 명령 수행

반면, 방대한 코드 베이스를 뒤엎거나 복잡한 디버깅 등 묵직한 작업은 이 녀석의 역할이 아님을 분명히 알아야 합니다. 그 이유는 아래에 후술합니다.


4. 토큰 폭증의 악몽: API 연동 시 왜 이런 일이 발생했고 어떻게 해결했나?

오픈클로를 디스코드에 연동하고 Anthropic(Claude) API를 물려 놓았더니, 작업 세션 하나 완료하기도 전에 TPM(Tokens Per Minute) Limit으로 에이전트가 뻗는 현상이 반복되었습니다.
일 하나 시키다 뻗고, 다시 일어나서 처리하다가 뻗고 하는게 반복되니 아무리 똑똑한 비서라도 일을 시킬 맛이 안 나더라고요...

💸 토큰 사용 폭증의 근본 원인

범인은 제가 에이전트를 너무 믿고 방치한 사이 비대해진 '세션 파일'에 있었습니다.

OpenClaw는 나를 더 잘 이해하기 위해 대화 내역을 계속 쌓아둡니다. 아직 이전 작업을 완료하기도 전에 뻗어버린 메인 세션이 캐싱한 토큰이 어느덧 153k(약 15만 토큰)까지 불어나 있을 정도로요.

근데 Claude Haiku-4.5 모델의 TPM 제한은 50,000입니다. 제가 "안녕?"이라고 한마디만 해도 오픈클로는 맥락을 유지하겠다며 153k를 한꺼번에 서버로 던졌고, 서버는 "한 번에 5만 토큰 이상은 안 받아!"라며 입구 컷을 해버린 것이죠.

심지어 접근성을 높이기 위해 설정해 둔 디스코드 봇에서 "안녕?"이라고 짧게 물어볼 때조차, 오픈클로는 지금까지 쌓아온 나의 모든 성향, 과거의 대화 기록 전체, 심지어 이전 채팅 내역까지 모조리 읽어서 LLM에게 한 번에 전송 해버렸으니 뭐 하나 시킬만하면 뻗는건 당연한 수순이었을지도 모르겠습니다.

아마 제가 설정해 둔 요금제 때문일수도 있지만 정말 이건 아니다 싶더군요.

🛠️ 해결을 위한 3단계 실험 (The A/B/C Benchmarking)

이 '무한 에러 루프'를 끊기 위해 저는 세 가지 가설을 세우고 직접 시스템을 역설계하며 테스트를 진행했습니다.

  • Test A (Full-Scan Baseline): - 기존 방식대로 세션 전체와 장기 기억을 모조리 LLM에게 전송하는 방식입니다.
    • 결과: 153k 토큰 소모. 비용 폭발은 물론, 기술적으로 더 이상 서비스 유지가 불가능함을 확인했습니다.
  • Test C (External DB Query): - 대화 로그를 Supabase 등 외부 DB로 옮겨 필요한 부분만 쿼리해오는 방식입니다.
    • 결과: 데이터 보존성은 훌륭했으나, 인프라가 복잡해지고 네트워크 딜레이가 발생했습니다. 무엇보다 DB 통신을 위한 메타데이터가 추가되면서 예상보다 토큰 절감 효과가 드라마틱하지 않았습니다.이건 장기적으로 대량의 데이터가 쌓이면 괜찮을 것 같기도 합니다.
  • Test B (Sliding Window - 최종 채택): - 가장 단순하면서도 강력한 '슬라이딩 윈도우(Sliding Window)' 로직을 도입했습니다.

최적화(Test B)의 핵심 로직:

  1. 메모리 계층화: 거대한 MEMORY.md는 평소에 절대 로드하지 못하게 강제해버렸습니다. 대신, 꼭 필요한 내용만 담은 일일 메모만 가볍게 로드하고, 깊은 과거는 에이전트가 필요할 때만 스스로 '검색'하게 만들었습니다.
  2. 윈도우 리밋 설정: 과거 기록 전체가 아닌, 가장 최근 kk개(5~6개)의 메시지만 잘라서 컨텍스트로 유지하도록 코드를 수정했습니다. 이는 O(k)O(k)의 일정한 복잡도를 유지하며 서버가 감당할 수 있는 최적의 양만 전송하게 합니다. 디스코드 봇은 더 많은 토큰을 잡아먹기 때문에 kk를 2~3개로 설정하였습니다.

놀라운 결과:
이 조치를 통해 응답 정확도는 100%에서 96%로 단 4%만 희생하면서, 입력 토큰 소모량을 114 토큰에서 22 토큰으로 약 81% 감소시킬 수 있었습니다. Agent가 나를 잘 알아주는것도 중요하지만, 큰 차이가 없다면 단순함이 최고의 최적화임을 다시금 깨달은 순간이었습니다.
또한 모델별 리밋(Haiku: 50k, Sonnet: 30k)에 따라, 평소엔 Haiku로 가성비를 챙기고 복잡한 로직이 필요할 때나 Haiku의 limit이 임박할 경우 잠시 Sonnet으로 우회하는 '듀얼 모델 전략'을 수립하여 비용과 Limit을 최소화 하였습니다.


5. 개발 파트너로써의 확장 가능성

현재 오픈클로는 가벼운 수준의 개인 비서에 특화되어 있지만(물론 LLM이 붙어서 무겁습니다만), 로컬 시스템의 제어권을 가졌다는 점에서 그 확장성은 무궁무진합니다. 특히 개발에 특화된 에이전트와의 결합을 상상해 보면 놀라운 아키텍처가 그려집니다.

  1. 자동화된 CI/CD 감시자: 오픈클로가 백그라운드에서 빌드 로그를 계속 모니터링하다가 특정 에러 패턴이 감지되면, 디스코드로 즉각 알림을 보낼 수 있습니다.
  2. 복합 에이전트 협업 시스템 (Agent-to-Agent):
    • 에러를 확인하고 오픈클로에게 "이 문제를 해결해 줘"라고 디스코드로 명령합니다.
    • 오픈클로는 자신이 직접 코딩하는 대신, 터미널을 열어 전문 개발 에이전트인 Antigravity나 다른 워크플로우를 호출(Trigger)시킵니다.
    • 전문 에이전트가 코드를 분석하고 패치 계획을 세우면, 그 작업 완료 이벤트를 다시 오픈클로가 릴레이로 받아서 "패치 초안이 작성되었습니다. 검토해 보시겠어요?"라고 모바일로 보고합니다.

이러한 마이크로 에이전트 아키텍처를 구축한다면, 비서의 신속성/모바일 연결성 + 개발 프레임워크의 전문성 등 각자의 전문성을 결합하여 로컬 개발 환경을 압도적으로 강력하게 진화시킬 수 있을 것입니다.

아직 붙여보지 않았지만 동기 중에 전직 개발자분이 만들어 주신 개발 에이전트와의 결합 가능성을 분석해 본 결과 적용 가능성이 높다는 결론이 있었기에, 결국 실제로 구현되는 것은 시간 문제라고 봅니다.


6. 마치며

3일동안 잘 가지고 놀았습니다.
OpenClaw를 써보겠다고 노트북도 하나 희생하고 토큰과의 전쟁을 치렀던 지난 며칠은 단순히 툴 하나를 써보는 것을 넘어, AI 에이전트의 '메모리 관리 체계'와 '정체성 형성 과정', 그리고 LLM 호출 시 발생하는 '비용 효율성'의 민낯을 마주할 수 있는 시간이었습니다.

이 기록이 로컬 AI 환경을 구축하려는 누군가에게 작은 영감이 되기를 바랍니다.

profile
패션 유행은 잘 모르지만 IT 유행은 다 따라가고 싶은 AI 엔지니어 지망생 -> 블로그 이전했습니다!

3개의 댓글

comment-user-thumbnail
2026년 4월 7일

안녕하세요 TPM 때문에 저도 고생하고 있는데 혹시 json 말고 md 쪽 설정으로만 TPM 설정 해결 하셨을까요??

1개의 답글