누군가 혼자서 29일 동안 26개의 저장소에 걸쳐 335개의 라이브 페이지를 배포했다고 말하면, 본능적으로 어떻게 그렇게 빨리 움직였는지 묻게 됩니다. 하지만 더 나은 질문은, 그렇게 하는 과정에서 무엇이 망가졌는가입니다.
수치는 사실입니다: 1,549개의 커밋, 26개의 저장소, 29일, 그리고 Claude Code를 사용하는 개발자 한 명. 하지만 속도 그 자체는 배울 점이 거의 없습니다. 중요한 것은 실패의 양상입니다. 왜냐하면 그 실패들은 스택 트레이스(stack trace)에서 잡아낼 수 있는 종류가 아니었기 때문입니다. 그것들은 구조적인 균열이었습니다. 에디터에서 물러나 프로덕션 환경에서 숨 쉬고 있는 전체 시스템을 바라볼 때에만 비로소 보입니다.
잘 작동했던 것들
속도는 환상이 아니었습니다. 잠들지 않는 AI에게 작업을 맡기면 특정 작업들의 소요 시간은 정말로 획기적으로 줄어듭니다.
교과서적인 알고리즘은 몇 주가 아닌 며칠 만에 배포 가능한 기능으로 변했습니다. 2048 솔버와 minimax 기반 게임은 구현 패턴이 잘 문서화되어 있어 빠르게 완성되었습니다. 모델은 학술 논문 속에서 길을 잃지 않습니다. 탐색 트리, 휴리스틱 평가, 수(move) 점수 계산을 작성하고 바로 다음 단계로 넘어갑니다. 이것들은 이미 해결된 문제들이며, AI 페어 프로그래머는 이러한 해결된 문제들을 압도적인 효율성으로 처리합니다.
지루한 감사(audit) 작업도 견딜 만해졌습니다. 링크 그래프 크롤링, 리다이렉트 체인 검증, 수백 개의 페이지에 걸친 캐노니컬(canonical) 태그 확인 등은 인간의 집중력을 고갈시키는 작업이지만, 언어 모델은 불평 없이 반복합니다. 동일한 패턴을 300번 확인하고 결과를 보고합니다.
진짜 놀라웠던 점은 일관성이었습니다. AI에게 수십 개의 랜딩 페이지를 생성하라고 요청하면, 기준을 잡아주지 않는 한 편차가 생기기 마련입니다. 저는 작은 메모리 파일을 사용하여 단일 브랜드 시스템을 고정했습니다: 어조 규칙, 컬러 토큰 이름, 컴포넌트 제한 사항, 페이지 아키타입 등입니다. 모델은 각 관련 작업의 시작 단계에서 이러한 제약 조건을 읽고, 29가지의 서로 다른 기분에서 나온 결과물이 아닌, 마치 한 사람의 손에서 나온 것 같은 결과물을 만들어냈습니다.
실제로 망가진 것들
실패는 아키텍처 측면에서 발생했습니다. 세미콜론 하나가 빠져서 빌드가 실패한 것이 아닙니다. 대신, 시스템은 모든 것이 괜찮다는 착각을 하도록 저를 서서히 속였습니다.
첫 번째는 SEO 카니발라이제이션(cannibalization)이었습니다. 기존의 툴 허브가 원래 경로에 여전히 남아 있는 동안, AI는 새로운 URL 아래에 새로운 툴 허브를 구축했습니다. 개별 페이지는 모두 최적화되어 있었습니다. 타이틀은 간결했고, 메타 설명은 독특했으며, 콘텐츠는 유용했습니다. 하지만 그들은 모두 동일한 검색 의도를 노리고 있었습니다. 검색 엔진은 동일한 키워드에 대해 두 개의 권위 있는 페이지를 발견했고, 결국 둘 다 순위를 매기지 않았습니다. 사이트를 파일의 집합이 아닌 하나의 포트폴리오로 바라보는 사람이 아무도 없었기에, 완벽한 페이지들이 서로를 상쇄시켜 버린 것입니다.
이어서 URL 불일치가 발생했습니다. 서로 다른 저장소들이 동일한 논리적 콘텐츠에 대해 약간씩 다른 폴더 구조를 채택했습니다. 어떤 저장소는 도구를 /tools/utility-name 아래에 중첩시켰고, 다른 저장소는 이를 /utility-name으로 평탄화했습니다. CDN은 이 두 가지를 모두 감지하여 이를 해결하기 위한 리다이렉트 체인을 생성했고, 엣지(edge)에서 에러를 던지기 시작했습니다. 페이지는 결국 로드되었지만, 모든 리다이렉트는 크롤링 예산(crawl budget)과 사용자의 인내심을 갉아먹었습니다. 코드는 정확했지만, 토폴로지(topology)가 엉망이었습니다.
그다음은 동기화 함정이었습니다. 스테이징이나 백업 인스턴스인 미러 사이트를 업데이트했지만, 그 변경 사항을 소스 저장소로 다시 전파하는 것을 잊었습니다. 나중에 AI에게 환경을 동기화하라고 요청했을 때, AI는 미러 사이트를 '진실의 근원(ground truth)'으로 취급했습니다. 단순한 동기화 명령 하나가 프로덕션 데이터베이스나 파일 세트를 오래된 미러 데이터로 덮어쓸 뻔했습니다. AI는 제가 의도한 것이 아니라, 제가 설명한 것을 실행했습니다. 의도는 diff를 할 수 없지만, 파일은 할 수 있습니다.
감사 도구 자체가 거짓말을 했습니다. 감사를 자동화했기 때문에 출력 결과가 깨끗할 것이라고 가정했습니다. 그렇지 않았습니다. AI가 작성한 감사 스크립트에는 미묘한 버그들이 있었습니다. off-by-one 체크 오류, 리다이렉트 상태 코드에 대한 잘못된 가정, 실제 설정 오류가 아닌 타이밍이나 헤더로 인해 발생하는 유령 에러(phantom errors) 등이 있었습니다. 스크립트는 존재하지 않는 문제를 보고했고, 저는 유령을 쫓게 되었습니다. 저는 라이브 사이트를 수동으로 조사하고 브라우저나 직접적인 curl 명령으로 증상을 확인하기 전까지는 정적 분석을 신뢰하지 않는 법을 배웠습니다.
숨겨진 비용
아무도 말하지 않는 수치가 하나 있습니다. 제 토큰 소비의 93%가 캐시된 컨텍스트를 다시 읽는 데 사용되었습니다.
In a long Claude Code session, every new request forces the model to revisit the previous conversation history, file buffers, and working memory. The first task in a session might be cheap. By the tenth task, the model is digesting everything that came before just to understand the next sentence. The cost curve bends upward fast. Long sessions turn into expensive rereading exercises, and the context window fills with debris from earlier jobs that have nothing to do with the current one.
This is not a quirk. It is a direct tax on poor session hygiene.
How to Fix It
The fixes were simple once I named the problems.
Treat one session as one task. When the job changes, start fresh. The temptation to keep the context warm is strong — you feel like you are saving setup time — but you are actually renting memory at compounding interest.
Keep knowledge in small, dedicated memory files. Do not let the model carry brand guidelines, component libraries, or SEO rules inside conversational context. Write them to disk in concise files and reference them explicitly. This moves information from expensive volatile context to cheap persistent storage.
Between different jobs, clear the decks. Close the session. Open a new one. The thirty seconds of setup saves dollars and hallucinations later.
Lessons for Scaling
If you are going to work at this volume, you need guardrails that treat the system, not the file, as the unit of review.
Benchmark before you publish. Do not assume a page works because it renders. Check load time, mobile layout, and core metrics on the deployed URL. A beautiful component in local dev can collapse under real network conditions.
Diff before you copy. Never run a bulk sync or copy operation blindly. Look at the delta. Understand which direction the data is flowing. The AI will not warn you that you are about to overwrite live customer data.
Probe live sites before trusting audits. Static analysis is a hypothesis. A live request is evidence. When an audit tool reports a broken link or a redirect loop, verify it with a direct request. Tools have bugs too, especially tools written by an AI operating on inferred patterns.
Write conventions down before you scale. URL structure, folder hierarchy, canonical patterns, and content taxonomy need to be documented in a place the AI can read before it generates a single new page. Memory files are not optional at
