Claude Code 200,000줄의 비밀 — 모델 하나가 아니라 다섯 가지가 맞물린 시스템이었다
핵심 요약 (TL;DR)
풀타임 직장인 Antoine이 야간에 동료 1명과 Flutter 게임 매칭 앱 Jynx를 만들어 5월 30일 iOS·Android 동시 출시했습니다. 200,000줄 가까운 Dart 코드를 "거의 전부" Claude Code로 작성했다고 본인이 밝혔는데, 그 비결은 'Claude Code 한 줄 명령'이 아니라 hooks·skills·subagents·MCP·persistent memory 다섯 가지를 엮은 워크플로였습니다.
'Claude Code 잘 쓰는 사람'은 뭐가 다른가
브라질·포르투갈어 커뮤니티에서 활동하는 개발자 Antoine은 자기를 '야간 바이브코더(vibe coder by night)'라고 소개합니다. 본업은 풀타임 개발자, Dart는 시작할 때 모르던 언어였죠. 함께한 동료까지 단 두 명이 2024년 12월 기획해 2025년 본격 개발 → 2026년 5월 30일 출시까지 약 6개월(파트타임 기준)을 달려 200,000줄짜리 모바일 앱을 만들어냈습니다.
Jynx는 게이머 LFG(Looking For Group) 매칭 앱입니다. 스킬 레벨·플레이 스타일·시간대로 호환 플레이어를 추천하고, 스와이프로 발견하고, 세션을 만들고, 인앱 채팅하고, 스쿼드까지 짭니다. 기술은 Flutter(Dart) + Firebase, 로컬 암호화 캐시까지 붙어 있고 모듈은 23개로 깨끗하게 나뉩니다.
여기서 핵심은 숫자보다 '어떻게'입니다.
hooks + skills + subagents + MCP + memory 다섯 가지의 합주
Antoine이 Tabnews 글에서 풀어놓은 워크플로는 이렇습니다.
- Hooks: 코드 변경 직후 자동으로 lint·테스트를 돌리고, Firebase 보안 룰이 흔들리면 commit 자체를 막는 가드레일
- Custom Skills: '이 화면은 우리 디자인 시스템 토큰만 써', 'Dart 파일은 모듈 단위로 분리해' 같은 프로젝트 규약을 Claude가 매번 기억하게 만드는 도메인 지시서
- Subagents: UI 짤 때, 로직 짤 때, Firebase 쿼리 짤 때 각각 다른 컨텍스트와 도구를 쥔 에이전트가 분업
- MCPs: Firebase·Play Store·App Store 메타데이터에 직접 닿아 빌드 산출물이나 스크린샷을 Claude가 직접 읽고 수정
- Persistent Memory: 세션이 끊겨도 '지난번 결정 — 이메일 unique는 클라이언트가 아니라 Firestore rule로'가 다음 대화에 그대로 살아남는 영구 기억
그러니까 Antoine의 Claude Code는 'AI한테 명령을 잘 던지는 기술'이 아닙니다. 다섯 가지가 맞물린 시스템 설계 그 자체죠. 모델이 좋아진 게 아니라, 모델 주변을 그렇게 둘러쌌더니 모델이 같은 사람한테 다르게 일하기 시작한 거예요.
200,000줄이라는 숫자, 어디까지 믿어야 하나
한 가지 단서. 본인이 '거의 전부 Claude Code로 작성'이라고 했지만, Flutter 프로젝트는 자동생성 파일(.g.dart)이 적지 않은 비중을 차지합니다. 200K LoC가 손수 검토한 라인인지, 생성 파일 포함 수치인지는 본인 글에 명시되어 있지 않아요. 다운로드 수와 매출도 아직 공개되지 않았고요. '본인 주장 기준'이라는 단서는 달고 보는 게 맞습니다.
그래도 Play Store에 'Jynx Group' 개발자 명의로 등록된 앱과 App Store 페이지, 공식 사이트 jynx.app이 실제로 살아 있다는 사실은 흔들리지 않습니다. 두 명·6개월·풀타임 환산보다 적은 시간으로 모바일 앱 양쪽 스토어를 동시에 띄웠다는 결과 자체가 메시지인 거죠.
그래서 야간 바이브코더가 진짜 어디까지 갈 수 있나
'풀타임 직장인이 퇴근 후 AI로 SaaS 하나'는 작년쯤부터 흔한 이야기였습니다. Antoine의 사례가 다른 건 — 모바일 앱, 두 자릿수 모듈로 나뉜 클린 아키텍처, 양쪽 스토어 동시 출시라는 세 가지를 동시에 해냈다는 점입니다. 그게 가능했던 이유는 모델이 더 똑똑해서가 아니라, 모델 주변에 hooks·skills·subagents·MCP·memory를 깔아두고 자기만의 규약을 영구 기억시켰기 때문이에요.
여러분 워크플로엔 이 다섯 개 중 몇 개가 들어 있나요? 모델 버전을 올리는 것보다 그 다섯 자리를 채우는 게 산출량을 더 늘릴 수 있다는 가설, 한 번 시험해볼 만하지 않을까요.
자주 묻는 질문
Q. Claude Code의 hooks, skills, subagents가 정확히 뭔가요?
- Hooks는 특정 이벤트(파일 변경·commit 직전 등)에 자동 실행되는 스크립트 훅입니다. lint, 테스트, 보안 검사를 강제로 거는 데 씁니다.
- Skills는 프로젝트별 도메인 규약·코드 스타일·아키텍처 원칙을 Claude가 매번 적용하게 만드는 자연어 지시서입니다.
- Subagents는 메인 에이전트와 다른 컨텍스트·도구 권한을 가진 서브 에이전트입니다. 역할별로 분업할 때 씁니다.
Q. Jynx 200,000줄이 정말 손수 작성한 라인인가요?
본인이 명시한 건 '거의 전부 Claude Code 에이전트로 작성'입니다. Flutter 프로젝트 특성상 자동생성 파일(.g.dart)이 포함됐을 가능성이 있고, 정확한 비율은 미공개입니다. '에이전트가 만들었고 사람이 검토'한 라인으로 받아들이되, 100% 손수 검수 라인으로 단정하긴 어렵습니다.
Q. 풀타임 직장인이 6개월 만에 200K LoC 모바일 앱이 가능한 이유는요?
모델 성능보다 워크플로 설계 차이가 큽니다. Antoine의 사례는 hooks로 품질 가드레일을 자동화하고, skills로 매번 같은 규약을 기억시키고, subagents로 분업하고, persistent memory로 의사결정을 누적했기에 '두 명·파트타임'으로도 굴러간 경우입니다.
댓글 0
아직 댓글이 없습니다