AI(Claude Code)로 Flutter 앱 만들고 Google Play에 출시하기까지 (3편) — 멀티 LLM 협업으로 개발·심사·재제출

심사 통과 직전에 폰에서 앱을 켰는데, 촬영 버튼을 눌러도 결과가 안 나왔어요. 무슨 일이 일어난 걸까요?

1인 개발자가 팀처럼 굴리는 법 — 멀티 AI(LLM) 협업

앱 개발을 시작하기 전에 이렇게 구성했어요:

  1. Planner & QA (Claude Code): 저와 논의하며 설계서 작성, 최종 QA
  2. UI 서브에이전트 (Claude Code): 설계서 받아서 Flutter UI만 코딩
  3. Core 서브에이전트 (Claude Code): 카메라 처리, Gemini API 호출 등 핵심 로직
  4. Gemini: Planner의 설계 문서를 별도로 분석 → 문제점 도출 (크로스모델 검증)

핵심 두 가지예요. 역할별 스코프 명시(페르소나 지정보다 효과적) 그리고 다른 모델로 크로스체크. Claude가 짠 코드에 Claude 자신이 눈이 멀 수 있으니까, Gemini에게 별도로 리뷰를 시켰어요.

이 구조는 CLAUDE.md + 서브에이전트 md 파일로 정리하면 됩니다. VS Code Claude Code 세션 1개만 열고, Planner가 서브에이전트를 자동 스폰하는 형태예요.

심사 전에 채워야 할 게 산더미였어요

앱 코드 외에 Play Console에서 채우는 항목이 이렇게 많은지 몰랐어요.

  • 개인정보 처리방침 URL / 이용약관 URL
  • 콘텐츠 등급 (IARC 설문)
  • 데이터 안전 섹션 (수집 유형별 신고 — 카메라 이미지가 Gemini API로 전송되는 부분 상세)
  • 타겟층, 광고 선언
  • 스토어 등록정보 (아이콘 512px, 기능 그래픽, 스크린샷, 짧은/긴 설명)

짧은/긴 설명과 개인정보 처리방침 초안은 Claude에게 작성 위임 → 제가 검토·수정. 여기서 시간이 크게 절약됐어요. 특히 법령/약관 초안은 LLM이 뼈대를 잡고 사람이 검증하는 흐름이 정말 효율적입니다.

관리형 게시(Managed Publishing) 활성화 — 이거 꼭 켜세요

심사 요청 전에 관리형 게시 옵션을 켰어요. 승인되어도 자동으로 사용자에게 노출되지 않고, 제가 직접 "게시" 버튼을 눌러야 실제 출시되는 설정이에요.

이 설정이 뒤에서 저를 살렸습니다.

Version 1 심사 → 앱은 되는데 API만 안 됩니다

승인 직전에 폰으로 최종 검증. 앱을 실행하면 잘 됩니다. 카메라 화면까지 정상. 그런데 촬영 → AI 분석 시도하면:

Firebase App Check token is invalid

앱은 실행되는데 API 호출만 실패하는 거예요. 관리형 게시로 대기 상태였기 망정이지, 자동 게시로 켜뒀다면 이 상태로 사용자에게 노출됐을 상황이었어요. 순간 등에 땀이 났어요.

LLM도 며칠 헤맨 진짜 원인

Claude와 며칠간 진단 대화를 했어요. Firebase App Check 설정 재확인, Play Integrity API 활성화 여부 체크, SHA 등록 검증, 캐시 삭제 — 매뉴얼대로 다 해봐도 해결이 안 됐어요.

Firebase 패키지를 최신으로 올렸더니, 그제야 명확한 403 에러가 나왔어요.

Requests to firebaseappcheck.googleapis.com are blocked

진짜 원인: GCP API 키 제한 목록에 Firebase AI Logic API만 넣고 Firebase App Check API를 빠뜨렸던 거예요. 이 상태에서는 앱이 App Check 토큰을 발급받는 API 호출 자체가 차단됩니다.

문서에도 이 부분이 명시적으로 안 나와서 Claude도 처음엔 못 짚었어요. 최신 SDK가 정확한 에러 메시지를 뱉어주고 나서야 원인이 드러난 겁니다.

여기서 배운 LLM의 한계

  • 잘한 것: 에러 로그 실시간 분석, 가설 나열, GCP/Firebase 문서 대조
  • 못한 것: "API 키에 Firebase App Check API도 넣어야 한다"는 걸 처음부터 짚지 못함

AI(LLM)는 학습 데이터 시점 이후의 정책 변화나 문서에 잘 안 나온 함정은 놓칩니다. 이럴 때는 사람이 SDK를 최신화하고 재현·재시도로 압박해야 진짜 원인이 드러나요. 시간은 걸리지만 결국 풀리긴 합니다.

Version 3 재빌드 → 심사 통과

  • firebase_app_check: 0.4.2 → 0.4.4
  • firebase_ai: 3.10.0 → 3.12.0
  • 버전 코드 1.0.0+3

승인 → 폰 최종 검증 → 관리형 게시에서 직접 "게시" 클릭. 정식 출시.

정리하며

이 편의 교훈 세 가지.

  • 관리형 게시는 무조건 켜세요. 이번에 저를 살렸어요.
  • LLM도 놓치는 함정이 있어요. 사람이 재현·재시도로 압박해야 원인이 드러납니다.
  • SDK 최신화가 디버깅 시간을 반으로 줄여요. 명확한 에러 메시지 하나가 며칠을 아껴줍니다.

이전 편

2편 — DUNS 발급, 1차 반려된 이야기

다음 편

첫 수익 40원과, LLM도 사전에 못 알려준 사고 2건. → 4편: AdMob 첫 수익과 사고 2건


이 시리즈에서 다루는 앱이 궁금하시면
👉 찰칵분리수거 Google Play에서 받기

댓글