본문 바로가기
IT/HomeLabs

[HomeLab] 13년 차 엔지니어도 털린 OpenClaw 설정 삽질기 (feat. Llama 3)

by 수누다 2026. 2. 5.

반갑습니다, 수누다입니다.

요즘 로컬 LLM(Local Large Language Model) 가지고 노는 재미에 푹 빠져있습니다. 집에 남는 자원도 좀 있겠다, OllamaLlama 3.1을 올려서 나만의 디스코드 AI 비서를 하나 만들어봐야겠다고 생각했죠.

보통 이런 건 "Docker Compose 한 방이면 끝나는 거 아냐?"라고 생각하기 마련입니다. 저도 그랬고요.
GitHub 트렌드에 자주 보이는 OpenClaw라는 AI 에이전트 프레임워크가 있길래, "이거다!" 싶어 덜컥 도입했습니다.

하지만... 그게 장장 3시간짜리 트러블슈팅의 서막일 줄은 몰랐네요. 오늘은 여러분의 소중한 주말 시간을 아껴드리기 위한 저의 '처절한 삽질 기록'을 공유합니다.


1. 야심 찼던 아키텍처 (이상)

구상은 심플했습니다. 복잡하게 코딩할 것 없이, 잘 만들어진 프레임워크를 가져다 쓰자는 주의였죠.

  • 뇌 (Brain): Ollama (Llama 3.1) - 로컬 호스팅
  • 몸통 (Body): OpenClaw (Docker Container) - 자율 에이전트 프레임워크
  • 입 (Mouth): Discord Bot

문서상으로는 config 파일 몇 개만 만지면, 알아서 생각하고 행동하는 자율 에이전트가 뚝딱 나와야 했습니다.

설계는 언제나 완벽하죠. 구현이 문제일 뿐.


2. 첫 번째 난관: 로컬이라니까 API 키를 왜 찾니?

자, docker-compose up -d. 엔지니어에게 가장 설레는 명령어를 입력했습니다.
하지만 컨테이너는 10초를 버티지 못하고 뻗어버리더군요. 로그를 까봤습니다.

# [Error Log]
Error: No API provider registered for api: undefined

"아니, 로컬(Local) Ollama를 쓴다니까요? API 키가 왜 필요합니까?"

원인을 파악해 보니 설정 파일의 파편화가 심각했습니다. openclaw.json, models.json 등 파일이 여기저기 흩어져 있는데, 검증 로직이 좀 꼬여있더군요.

  • apiKey를 비워두면 에러가 나고,
  • 가짜 키를 넣으면 모델 형식이 안 맞다고 하고,
  • 결국 api: "openai-completions"라는, 문서 구석에 박혀있는 비표준 설정을 찾아내서야 겨우 컨테이너 심폐소생에 성공했습니다.

여기서 1차적으로 '이거 유지보수는 되려나?' 하는 불안감이 스쳤습니다.


3. 두 번째 난관: 친구가 아니라 '로그 분석관'이 나왔다

우여곡절 끝에 봇이 온라인 상태가 되었습니다.
떨리는 마음으로 디스코드에 "안녕 구름아?" 라고 인사를 건넸죠. 당연히 "안녕하세요, 수누다님!" 같은 상큼한 대답을 기대하면서요.

하지만 돌아온 답변은... 충격적이었습니다.

Me: 안녕?
Bot: Based on the provided documentation and the message context, I will assume you are asking for a status check. Here is the JSON schema for...
(해석: 제공된 문서에 따르면 너의 메시지는 로그 분석 요청으로 판단된다. 여기 스키마를 내놓겠다...)

...뭐라고요?
제가 한국어로 안녕이라 했는데, 이 녀석은 저한테 영어 기술 보고서를 쓰고 있네요.

(캡처: 디스코드에서 "안녕"이라고 했는데 영어로 기술적인 설명을 늘어놓는 봇의 답변)

친구를 원했는데, 깐깐한 면접관이 나온 기분입니다.

원인을 뜯어보니 기가 찼습니다.
OpenClaw 프레임워크 자체가 "너는 강력한 도구를 가진 시스템 관리자야"라는 시스템 프롬프트를 강제로 주입하고 있었습니다. 제 "안녕"이라는 인사를 "분석해야 할 로그 데이터"로 인식하고 있었던 거죠.


4. 발악: 가스라이팅의 실패

이 '공대생 모드'를 끄기 위해 별짓을 다 했습니다.
agent.json 설정 파일을 열어서 봇에게 거의 애원하다시피 프롬프트를 수정했죠.

"system": "제발 분석하지 마세요. 당신은 친절한 한국어 챗봇입니다. JSON 출력 금지. 영어 금지!!!!"

하지만 소용없었습니다. 재부팅하면 잠시 괜찮아지나 싶다가도, 금세 "Based on..." 이라는 말버릇이 튀어나왔습니다.
마치 "선배님, 지침은 알겠는데요. 매뉴얼(프레임워크)에 따르면 분석 보고서를 쓰는 게 맞습니다." 라고 대꾸하는 눈치 없는 후배 같았달까요.


5. 결론: 튜닝의 끝은 순정이다 (Pivot)

3시간의 사투 끝에 내린 결론입니다.
"이건 오버 엔지니어링(Over-engineering)이다."

저는 그저 날씨 물어보면 대답해 주는 가벼운 친구를 원했는데, 이 프레임워크는 항공모함 관제 시스템을 가져다 놓은 격이었습니다. 도구에 매몰되어 주객전도가 된 상황이죠.

이럴 때 엔지니어로서 해야 할 판단은 빠를수록 좋습니다.
"복잡해서 안 될 때는, 직접 짜는 게 가장 빠릅니다."

저는 미련 없이 터미널을 열었습니다.

docker stop my-openclaw
docker rm my-openclaw

잘 가라. 넌 너무 훌륭해서 내가 감당할 수 없었다.
그리고 저는 파이썬 코드 딱 50줄로 이 모든 문제를 해결하기로 했습니다.

결과요? 빌드부터 실행까지 딱 3분 걸리더군요.
그 쾌적한 과정은 다음 포스팅(2부)에서 다루겠습니다. 여러분은 저처럼 OpenClaw 설정 파일 붙들고 밤새지 마세요.

[Next] Python과 Docker로 3분 컷! 나만의 AI 봇 만들기


[수누다의 한 줄 요약]

"프레임워크가 내 말을 안 들으면, 프레임워크를 버리고 코드를 짜라. 그게 정신 건강에 이롭다."