
Claude Code로 20개월간 개발하며 느낀 점: 코드는 더 이상 병목 현상이 아니다
요약
Claude Code를 활용하여 20개월간 프로젝트를 개발하며 얻은 실전 경험을 공유합니다. 효율적인 컨텍스트 관리를 위한 리포지토리 구조 설계와 AI 특유의 말투 및 오류를 제어하는 파이프라인 구축 노하우를 다룹니다.
핵심 포인트
- 리포지토리에 전략, 사양, 세션 노트를 포함하여 AI의 컨텍스트 유지
- 핵심 로직과 인프라를 분리하여 관리하는 구조적 접근
- AI 특유의 표현(AI-isms)과 시간 관련 오류를 제어하기 위한 정제 파이프라인 구축
- 모델 업데이트 시 모델 ID 교체만으로 시스템을 고도화하는 커스텀 파이프라인 활용
Soulform - Remotion Cinematics
이것은 제가 2024년 말부터 만들어온 프로젝트의 시네마틱 런칭 필름입니다. 이 필름 자체는 Remotion 프로젝트입니다. 시네마틱 샷들은 스톡 푸티지(stock footage)나 AI로 생성된 것이며, 이들을 결합하는 모든 요소는 React로 구성되어 있습니다. 과정의 대부분 동안 Claude Code를 사용해 왔습니다.
이 프로젝트의 이름은 Soulform이며, 스스로 정리할 수 없는 생각들을 위한 공간입니다. 당신이 마음속에 있는 무엇이든 쓰면, 감정, 신념, 가치관과 같이 당신의 말 아래에 깔린 것들이 가시화됩니다. 사람들은 누구에게도 말하지 않을 내용들을 여기에 적기 때문에, 개인정보 보호(privacy)는 타협할 수 없는 요소입니다.
AI 파이프라인(pipelines)을 위해, 저는 작업에 따라 속도, 비용, 그리고 미묘한 차이를 유지하는 능력 사이의 균형을 맞추며 내부적으로 서로 다른 Claude 모델들을 사용하고 있습니다. Claude를 기반으로 완전한 커스텀 파이프라인을 구축했으며, 새로운 모델이 출시될 때마다 저는 주로 모델 ID만 교체하면 되고, 그러면 전체 시스템이 더 날카로워집니다. 비록 매번 일련의 안전성 테스트(safety testing)가 필요하긴 합니다. 커스텀 프롬프트(custom prompts) 자체가 모델의 안전 프로필(safety profile)을 변화시키기 때문에, 확인하지 않고서는 어떤 방식으로 변화할지 예측할 수 없기 때문입니다.
제 코드베이스 내에서 Claude를 최대한 활용하는 방법은 지루하지만 상당히 효과적입니다. 빌드 과정의 전체 컨텍스트(context)를 가능한 한 잘 정리하여 리포지토리(repos)에 유지하는 것입니다. 이것이 Claude가 길을 잃지 않게 하는 가장 쉬운 방법이기 때문입니다. 현재로서는 전략, 사양(specs), 과거의 결정들, 운영 프로세스, 그리고 Claude 자신의 세션 노트(session notes)까지 모두 코드와 함께 커밋하여, 새로운 세션이 처음부터 시작하는 대신 이를 읽어 내려가며 맥락을 파악하도록 하고 있습니다. 동일한 이유로 핵심 로직(Core logic) 또한 인프라(infrastructure)와 분리된 별도의 리포지토리에 존재합니다. 이 시점에서 저는 컨텍스트 관리(context management)가 리포지토리 내에 상주하는 AI로부터 얻을 수 있는 결과물의 상당 부분을 결정한다고 생각합니다.
개발 과정에서 배운 것들 중 고통스러웠던 부분들도 있습니다. Claude의 도움을 받더라도 이 부분들은 까다로웠습니다. 모델이 자신의 학습 데이터에 깊게 각인된 패턴을 쓰지 않도록 강제하는 것은 매우 어려운 일입니다.
대시(em dash) 사용 같은 것들이 그렇습니다. '그건 X가 아니라 Y야', '이게 진짜다'와 같은 표현들 말입니다. 현재 Haiku 모델로는 거의 불가능해서, 그냥 지침을 무시해 버립니다. Sonnet은 이 부분에서 나아지기 시작했습니다. 하지만 특정 대시(em dash) 처리의 경우를 위해, 저는 일반 하이픈(-)으로 대체하는 자체 스트리밍 정제 파이프라인(streaming sanitizer pipeline)을 구축해야 했습니다. 왜냐하면 저는 전반적으로 대시나 AI 특유의 표현들(AI-isms)에 별로 흥미가 없기 때문이지만, 때로는 피할 수 없는 경우도 있기 때문입니다 (여전히). 현재 모델들은 사용자가 이전에 작성한 것에 대해 '몇 주 전에'라고 언급하는 경향이 있는데, 비록 몇 분 전일지라도 말입니다. 적어도 제 지침 세트(instruction set)에 있어서는 그렇습니다. 그리고 이것은 이런 앱의 몰입도(immersion factor)를 정말 깨뜨리는 요소입니다. 프롬프트에 타임스탬프가 명확하게 제시되어 있음에도 불구하고, 모델에게 시간 관련 언급을 어떻게 해야 하는지 명시적으로 알려줘야 합니다. 개인 정보 보호(privacy)가 협상 불가능한 부분에 대해서도 마찬가지입니다. 의도만으로는 지켜지지 않으며, 알아차리지 못하는 사이에 무언가가 새어 들어오기 때문에, 개발 과정 전반의 흐름을 추적하며 발생하는 간극(gaps)들을 감지해야 합니다. 예를 들어, 프로토타입이 어느 정도 성숙해진 후, 저는 일종의 봉인된 컨테이너 역할을 하도록 설계된 저널에 비공개 모드(Incognito mode)를 도입했습니다. 하지만 이 비공개 저널들은 일반 저널과 동일한 파이프라인으로 만들어졌기 때문에, 정보가 유출될 수 있는 가능한 모든 경로를 봉인해야 했습니다. 아무것도 새어 나오지 않는다는 확신을 갖는 데 며칠이 걸렸습니다. 푸시 알림(Push notifications)은 매우 교활할 수 있습니다. 특히 Claude와 스마트폰에서 무슨 일이 일어나는지 디버깅하기 어렵기 때문에 더욱 그렇습니다. 사용자들이 이를 활성화하고 권한을 승인했지만, 실제로 도착하는 것은 아무것도 없었습니다. 구독(Subscribing) 기능은 앱의 백그라운드 부분이 준비될 때까지 기다려야 하는데, 이런 종류의 대기는 실패할 수 없습니다. 성공하거나 영원히 지속되거나 둘 중 하나입니다. 성능 개선 작업으로 인해 그 부분이 시작되는 것이 15초 지연되었고, 따라서 처음 몇 초 동안 '예'라고 말한 사람은 아직 시작되지 않은 것에 대해 기다리게 되었습니다. 오류는 어디에도 없었기 때문입니다. 아무것도 실패하지 않았습니다.
우리가 퍼블릭 베타 (public beta)를 출시했을 때, 공지는 Instagram 스토리 (Instagram stories)를 통해 진행되었습니다. Instagram에서 연결된 링크는 Instagram 자체 인앱 브라우저 (in-app browser) 내에서 열리는데, 이곳에서는 Google 로그인 (Google sign-in)이 전혀 작동하지 않으며, 기본 Google 버튼조차 렌더링 (render)되지 않습니다. 그래서 Google로 계정을 생성했던 사람들은 이메일 양식만 보게 되었고, 비밀번호를 입력해 보았지만 잘못된 비밀번호일 때 나타나는 것과 동일한 일반적인 오류를 받았습니다. 그들은 오타를 냈다고 생각하고 떠나버렸습니다. 이 상황은 제 쪽에서 해결할 수 있는 것이 아무것도 없었습니다. 제가 배운 점은 이렇습니다: 선택한 채널이 사용자가 어떤 브라우저로 접속할지를 결정하며, 만약 사용자가 첫 시도에서 제대로 작동하지 않는다면 다시 시도하지 않을 것이라는 점입니다. 저는 아마 낮은 품질로 10년 동안 만들었을 양보다 더 많은 것을 20개월 동안 만들어냈습니다. 그럼에도 불구하고, 매주 다시 찾아올 만큼 제품을 신뢰하는 사람들의 수는 AI를 활용하지 않고 구축한 제품에서 기대할 수 있는 정확한 속도로 성장하고 있습니다. 지금 당장 Fable 10을 가지고 있다 하더라도 저는 그 과정을 더 빠르게 만들 수 없었을 것입니다. 그것이 이 모든 과정에서 얻은 가장 겸허한 교훈이었습니다. 읽어주셔서 감사합니다. 이 모든 과정에 대해 궁금한 점이 있다면 기꺼이 답변해 드리겠습니다. 베타 기간 동안 무료: soulform.ai Google Play, 며칠 전 출시: https://play.google.com/store/apps/details?id=ai.soulform.app submitted by /u/NomeAleatorio [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/ClaudeAI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기