Skip to content

iOS Firebase 프로젝트 분리와 rollback을 검증한다 #747

Description

@opficdev

상위 이슈: #740

배경

각 workflow가 올바른 plist를 선택하는 것만으로는 Auth, FCM, Functions, Firestore, Crashlytics와 Analytics가 같은 Firebase project에 연결됐다고 단정할 수 없다. staging과 prod는 모두 database ID (default)를 사용하므로 database ID만으로 환경 격리를 판별할 수도 없다.

기존 단일 project의 named database와 staging 자원을 제거하기 전에 전체 동작과 rollback 절차를 확인해야 한다.

목표

TestFlight와 App Store의 Firebase 연결이 project 단위로 완전히 분리됐음을 검증하고 장애 시 복구 절차를 확정한다.

검증 항목

  • TestFlight와 App Store의 PROJECT_ID가 서로 다름
  • TestFlight와 App Store의 GOOGLE_APP_ID가 서로 다름
  • 두 앱의 bundle ID는 모두 opfic.DevLog
  • TestFlight는 APP_ENVIRONMENT=staging을 사용함
  • App Store는 APP_ENVIRONMENT=prod를 사용함
  • 두 IPA 모두 FIRESTORE_DATABASE_ID=(default)를 사용함
  • TestFlight의 FUNCTION_API_BASE_URL이 staging PROJECT_ID의 공통 api를 가리킴
  • App Store의 FUNCTION_API_BASE_URL이 prod PROJECT_ID의 공통 api를 가리킴
  • 각 IPA에 반대 project의 plist, 식별자 또는 Functions URL이 포함되지 않음
  • 각 ID token의 audiss가 해당 Firebase project와 일치함
  • staging FCM token이 prod Admin SDK에서 사용되지 않음
  • prod FCM token이 staging Admin SDK에서 사용되지 않음
  • Functions API와 Firestore가 같은 project의 (default) database를 사용함
  • Firestore trigger, Cloud Tasks와 Scheduler가 같은 project 안에서 동작함
  • Crashlytics와 Analytics 이벤트가 각 project 대시보드에 분리됨
  • TestFlight와 App Store의 OAuth callback 흐름이 정상임
  • 두 IPA에 기존 named database ID, stagingApi 또는 prodApi URL이 남아 있지 않음

rollback 작업

  • TestFlight 전환 실패 시 기존 devlog-c87b6/stagingstagingApi 경로로 되돌리는 절차를 기록함
  • App Store 전환 실패 시 기존 devlog-c87b6/prodprodApi 경로로 되돌리는 절차를 기록함
  • rollback에 필요한 plist, database ID와 Functions URL 기준을 기록함
  • rollback 완료를 판단할 Auth, API, Firestore, FCM 검증 항목을 정의함
  • rollback 불가능 시 prod 전환을 중단하는 조건을 정의함

제외 범위

  • Firebase 함수 또는 데이터 삭제
  • 기존 단일 project staging 자원 제거
  • Auth 사용자 또는 Firestore 데이터 이전
  • 실제 rollback 실행

완료 조건

  • TestFlight와 App Store 사이에 Firebase 자원 교차 사용이 없음
  • 두 환경은 각 Firebase project의 (default) Firestore와 공통 api만 사용함
  • staging 장애가 prod 앱에 영향을 주지 않음
  • prod 전환 실패 시 검증 가능한 복구 경로가 있음
  • 결과가 opficdev/DevLog_Firebase#54의 기존 named database와 staging 자원 제거 판단 근거로 연결됨

의존 관계

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions