지인에게 화장품 쇼핑몰 구축 의뢰를 받았다. 직장에서 C만 쓰다 보니 새 기술스택을 써볼 기회였다. 결제는 토스페이먼츠, 프론트는 React. “금융권 차세대가 전부 React로 간다"는 말이 마음에 걸렸고, 토스페이먼츠는 Node 친화적이었다. 방향은 금방 잡혔다.
당연히 이 스택을 써본 적이 없었다. 욕심은 있지만 공부하고 나서 만들 만한 납기일이 아니었다. 그래서 바이브코딩을 한 번 써봤다.
“화장품을 판매하기 위한 쇼핑몰을 만들어줘, 레퍼런스 홈페이지 주소는 ~야.” 가 전부였는데 혼자 뚝딱뚝딱거리더니 생각지 못한 부분까지 설계한 mockup이 만들어졌다. 아, 바이브코딩이 나온 지 1년이 넘었는데, 나는 완전히 뒤쳐졌구나.
Claude가 만들어주는 코드를 토대로 신규 스택을 익히겠다는 계획은 어리석기 짝이 없었다. 내가 코드를 읽는 속도보다 Claude가 생산해내는 속도가 월등히 빨랐다. 그래서 내가 검토하는 게 아니라 스스로 검토하도록 요청했다. (인간 시대의 끝이 도래하는 것만 같다.)
그렇게 쓰다 보니 Claude가 앞 내용을 못 끌고 가는 현상이 생겼다. “context"라는 단어를 구글링하다가 원인을 알게 됐다. 서브에이전트로 역할을 나누면 된다는 것도 거기서 찾았다. pm, dba, back, front, qa — 5개 구조를 세팅했다. CLAUDE.md에 경로 규칙부터 세션 운영 가이드까지 전부 정의했다. 사용량은 10% 중반대. 이 정도면 충분하지 않나, 싶었다.
그로부터 세 시간 뒤, You've hit your limit · resets 3am 을 봤다.
오전 3시 리셋이라는 문구는 이해됐다. 근데 이해가 되지 않았다. 왜 세 시간 만에?
처음부터 단추가 잘못 끼워졌다
5개 에이전트를 세팅하면서 나는 잘못된 가설을 가지고 있었다. “Claude가 생각을 많이 할수록 토큰이 많이 든다.” 근거는 없었다. 그냥 그럴 것 같았다.
에이전트마다 if-then 규칙을 빼곡하게 정리했다. Claude가 판단할 여지를 없애면 추론 비용이 줄 거라고 믿었다. CLAUDE.md도 그 논리로 채웠다.
limit을 겪고 나서야 구글링을 했다. 틀렸다는 걸 그때 알았다. Claude가 소모하는 토큰의 대부분은 추론이 아니라 읽기였다. 에이전트는 실행될 때마다 CLAUDE.md를 처음부터 전부 읽는다. 내가 열심히 채운 CLAUDE.md가 매 실행마다 통째로 컨텍스트로 올라가고 있었다.
산문형 설명을 테이블로 압축하고 중복 항목을 쳐냈다. 소모 속도가 줄었다.
더 쪼개면 토큰이 줄겠지
경량화 이후 Compacting conversation... 빈도가 줄었다. context가 잘 유지됐다. 뿌듯했다.
그런데 토큰 소모를 보니 오히려 더 새고 있었다.
“역할을 더 잘게 나누면 각 에이전트가 다루는 범위가 좁아지지 않을까.” 이게 다음 시도였다.
5개에서 12개로 늘렸다. api-designer, ui-designer, performance-engineer, security-auditor… 단계별로 체계적으로 나뉜 구조였다.
context는 잘 유지됐다. 근데 토큰이 좀 더 새는 느낌이 들었다.
눈물을 머금고 통폐합
Claude에게 원인을 진단해달라고 했다. 마치 재판을 선고받는 것 같았다. token.. my precious…
에이전트 수 = CLAUDE.md 읽기 횟수였다. 12개 에이전트가 그걸 12번씩 전부 컨텍스트로 올렸다. 쪼갤수록 더 빠르게 타고 있었다.
줄여야 했다. 진짜 열심히 만들었지만, 눈물을 머금고 합쳤다.
api-designer는 backend-developer로, ui-designer는 frontend-developer로, performance-engineer는 code-reviewer로 흡수시켰다.
| 항목 | 전 | 후 | 절감 |
|---|---|---|---|
| 에이전트 파일 전체 용량 | 112KB | 40KB | -64% |
| 에이전트 수 | 12개 | 9개 | -3개 |
사용량 소모 속도가 눈에 띄게 달라졌다.
그래서 Max로 갔다
구조를 잡고 나서야 Claude가 일하는 속도를 제대로 체감했다. 돈이 나가는 건 맞다. 근데 처리 속도가 상상을 초월했다. 내가 직접 했으면 며칠 걸렸을 작업이 한 세션에 끝났다.
Max 플랜으로 올리고, 낭비 없이 알차게 쓰자.
구조 문제는 해결됐다. my precious를 지키기 위해 구글링을 멈추지 않았다. 그러다 발견했다. Claude가 파일을 읽을 때 500줄짜리면 500줄을 전부 읽었다. 테스트를 돌리면 성공한 케이스까지 결과 전체를 컨텍스트로 올렸다. 에이전트 수의 문제가 아니었다. Claude가 보는 것 자체가 문제였다.
어떻게 하면 Claude가 필요한 것만 볼 수 있게 할 수 있을까.
참고