🔑 빌드 · 서명키 · 배포 운영 가이드

개발 → 출시 → 유지보수 단계별 서명키와 배포 채널 정리 (경험 기반)
← 프로젝트 문서 홈으로

📌 안드로이드 앱을 출시·운영하다 보면 "지금 이 앱이 어떤 키로 서명됐고, 어디로 배포되는 건지"가 가장 헷갈립니다. 이 페이지는 MotionStitch Lite를 개발·출시·유지보수하며 실제로 겪은 것을 토대로, 빌드 타입 · 서명키 3종 · 배포 채널 3종 · 단계별 워크플로우 · 실전 함정을 정리한 참고 문서입니다.

1. 한눈에 보기

핵심은 세 가지 축이 서로 다른 개념이라는 거예요. 자주 섞여서 헷갈립니다.

가장 중요한 한 줄: 같은 소스코드라도 어느 채널로 배포되느냐에 따라 서명키가 달라지고, 서명키가 다르면 같은 폰에 동시 설치가 안 되고 SHA-1 기반 기능(구글 로그인)이 깨질 수 있어요.

2. 빌드 타입 — debug(.dev) vs release(prod)

항목debugrelease
앱 이름MotionStitch DevMotionStitch
패키지명...motion_stitch_lite.dev...motion_stitch_lite
버전 표기2.7.3-dev2.7.3
서명디버그 키 (자동)업로드 키 (key.properties)
최적화없음 (디버그·핫리로드)R8 난독화·축소
만드는 법flutter build apk --debugflutter build apk --release
주 용도개발 기기에서 빠른 테스트App Tester 배포 + Play 제출
왜 .dev 접미사? 패키지명이 달라서 Dev 앱과 정식 앱을 같은 폰에 동시 설치할 수 있어요. 개발 중인 빌드를 테스트하면서도 실제 앱을 그대로 둘 수 있죠. (이게 dev/prod 분리의 핵심)

3. 서명키 3종 — 가장 헷갈리는 부분

안드로이드는 모든 APK가 키로 서명돼요. 이 프로젝트에는 서로 다른 키 3개가 관여합니다.

누가 가짐무엇을 서명어디에 쓰임
디버그 키 SDK가 자동 생성
(~/.android/debug.keystore)
debug 빌드(.dev) flutter run, 개발 기기 테스트
업로드 키 내가 만들어 보관
(키스토어 + 비밀번호)
release 빌드(prod) Firebase App Distribution 배포 + Play에 업로드할 AAB
Play 앱 서명 키 Google이 보관
(Play App Signing)
최종 사용자 APK Play 스토어에서 다운로드되는 앱

서명 흐름 — 업로드 키로 올리면 Google이 재서명

내 release 빌드
(업로드 키 서명)
→ Play 업로드 → Google Play
App Signing 재서명
사용자 다운로드
(Play 앱 서명 키)

내가 업로드한 APK의 서명 ≠ 사용자가 받는 APK의 서명이에요. Google이 중간에 자기 키로 다시 서명하기 때문이죠. 그래서 같은 코드라도 Firebase로 받은 빌드(업로드 키)와 Play로 받은 빌드(Play 키)의 서명이 달라요.

⚠️ SHA-1을 3개 다 등록해야 하는 이유 — 구글 로그인(YouTube 업로드)은 앱의 SHA-1 인증서 지문으로 인증해요. 세 배포 경로(디버그 / Firebase=업로드 키 / Play=Play 키)의 SHA-1이 전부 다르기 때문에, Cloud Console OAuth에 세 SHA-1을 모두 등록해야 어느 경로에서든 로그인이 됩니다. 하나라도 빠지면 그 경로에서 sign_in_failed ... 10 에러가 나요.
(실제 지문 값과 키스토어 위치·비밀번호는 비공개 키관리 노트에 보관 — 공개 금지.)

4. 배포 채널 3종 — App Tester vs Play

채널빌드/패키지서명키대상특징
로컬 설치
(flutter install)
debug / .dev 디버그 키 내 개발 기기 즉시, 디버깅 가능, 정식 앱과 공존
Firebase
App Distribution
release / prod 업로드 키 지정 테스터 Play 출시 전 사전 검증. 실제 출시될 빌드를 그대로 테스트
Google Play release / prod Play 앱 서명 키
(업로드 후 재서명)
일반 사용자 심사 후 공개 배포. 자동 업데이트
핵심 차이 — Firebase 빌드 ≈ Play 빌드, 단 서명이 다름: 둘 다 같은 prod 패키지·같은 소스지만, Firebase는 업로드 키, Play는 Play 앱 서명 키로 서명돼요. 패키지명은 같은데 서명이 달라서 → 한 폰에 둘을 동시 설치할 수 없어요(하나 지우고 깔아야 함). 기능·동작은 동일하니, 테스트 목적상으론 사실상 같은 앱입니다.
⚠️ 실전 함정: Firebase App Distribution의 앱은 prod 패키지에 묶여 있어서, debug(.dev) APK를 올리면 "패키지 불일치"로 거부돼요. App Tester로는 반드시 release(prod) 빌드를 올려야 합니다.

5. 단계별 워크플로우 — 개발 / 출시 / 유지보수

1 개발 단계 (코딩 중)

2 프로덕션 출시 단계

3 출시 후 유지보수 단계

6. 실전에서 겪은 함정

7. 빠른 체크리스트

새 빌드를 테스터/Play에 올리기 전:

새 서명 경로가 생기면: