Skip to content

[Work 47] Firebase 초기 설정을 완료했습니다. - #18

Merged
sangYuLv merged 6 commits into
developfrom
WORK-47
Aug 26, 2026
Merged

[Work 47] Firebase 초기 설정을 완료했습니다.#18
sangYuLv merged 6 commits into
developfrom
WORK-47

Conversation

@sangYuLv

@sangYuLv sangYuLv commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

JIRA

📝 작업 내용

📌 요약

  • Firebase 프로젝트 연결 및 SDK 모듈 추가
  • Firebase CLI 초기화 (에뮬레이터, 보안 규칙 파일)
  • 에뮬레이터 연결 코드 및 에러 처리 모델 구축
  • Firestore / Realtime Database 규칙 문서 정리

🔍 상세

Firebase 프로젝트 연결

GoogleService-Info.plist를 통해 Firebase 프로젝트(whereareyou-16ea6)를 연결하고, AppDelegate에서 FirebaseApp.configure()를 호출하여 초기화합니다.

SDK 모듈 추가

SPM으로 5개 Firebase 모듈을 타겟에 추가했습니다:

  • FirebaseFirestore — 약속/채팅/공유장소 데이터
  • FirebaseDatabase — 실시간 위치 공유
  • FirebaseAuth — 애플 로그인 인증
  • FirebaseStorage — 프로필 아바타 이미지
  • FirebaseAnalytics — 사용 통계 수집

Firebase CLI 초기화

firebase init으로 생성된 설정 파일들입니다:

  • firebase.json — 에뮬레이터 포트, 규칙 파일 경로 등 CLI 전체 설정
  • .firebaserc — 프로젝트 연결 정보
  • firestore.rules, database.rules.json, storage.rules — 보안 규칙 (현재 테스트 모드, 인증 구현 후 강화 예정)
  • firestore.indexes.json — Firestore 복합 인덱스 (현재 비어 있음)
  • functions/ — Cloud Functions 코드 (푸시 알림 구현 시 사용 예정)

에뮬레이터 연결

AppDelegate에서 #if DEBUG 조건으로 에뮬레이터 연결 코드를 추가했습니다.
Debug 빌드에서는 로컬 에뮬레이터에, Release 빌드에서는 프로덕션 Firebase에 자동 연결됩니다.

에뮬레이터 포트
Authentication 9099
Firestore 8080
Realtime Database 9000
Storage 9199
Emulator UI 4000

에러 처리 모델

Firebase 서비스별 NSError를 앱 수준 에러(AppError)로 변환하는 구조를 만들었습니다:

  • AppError (Domain) — 앱 공통 에러 enum (network, notAuthenticated, permissionDenied, notFound, alreadyExists, unknown)
  • FirebaseErrorMapper (Data) — NSError의 domain/code를 분류하여 AppError로 변환

Firestore / Realtime Database 규칙 문서

RDB에서 create TABLE로 미리 형태를 정해두는 것과는 달리, 기능을 추가할 때마다 데이터 생성/조회/수정/삭제 형태를 작성하는 상황을 생각했습니다.
같이 작업하다보니 미리 규칙을 정해두면 좋을 것 같아 JIRA 문서로 정리해두었습니다.

편하게 검토해주시고, 관련 부분 작업 시에 수정이 이루어져도 괜찮을 듯 합니다!

💬 리뷰 노트

Firebase를 처음 도입하면서 기능 구현에 앞서 인프라 레이어를 먼저 구성했습니다.
로컬 개발 환경(에뮬레이터)과 에러 처리 기반을 잡아두어, 이후 로그인/CRUD 구현 시 프로덕션 DB를 건드리지 않고 안전하게 작업할 수 있습니다.

에뮬레이터 사용 방법

로컬에서 Firebase 기능을 테스트하려면 에뮬레이터를 실행한 상태에서 앱을 빌드해야 합니다.
에뮬레이터 없이 Debug 빌드를 실행하면 localhost 연결 실패로 Firebase 호출이 동작하지 않습니다.

# 프로젝트 루트에서 실행
firebase emulators:start

에뮬레이터 UI(http://localhost:4000)에서 데이터 확인/조작이 가능합니다.
상세한 환경 설정 방법은 JIRA 문서에 정리해두었습니다.

보안 규칙

현재 테스트 모드(모든 읽기/쓰기 허용)로 설정되어 있습니다.
인증 기능 구현 후 request.auth 기반으로 강화할 예정입니다.

AppError 사용 예시

do {
    let snapshot = try await docRef.getDocument()
    // ...
} catch {
    completion(.failure(FirebaseErrorMapper.map(error)))
}

다음 작업

  • 로그인 (인증): 애플 로그인 → Firebase Auth 연동 + Firestore user 문서 생성
  • 보안 규칙: 인증 기반(request.auth)으로 Firestore/RTDB/Storage 규칙 강화
  • 푸시 알림: APNs 설정 + FCM 토큰 등록 + Cloud Functions로 알림 발송

@sangYuLv
sangYuLv requested a review from snughnu August 25, 2026 17:25
@sangYuLv sangYuLv self-assigned this Aug 25, 2026

@snughnu snughnu left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GoogleService-Info.plist는 어떻게 전달받으면 될까요?
수고하셨습니다! 🙊

Comment thread WhereAreYou/WhereAreYou/Data/FirebaseErrorMapper.swift
Comment thread database.rules.json
@sangYuLv

Copy link
Copy Markdown
Collaborator Author

@snughnu
리뷰 감사합니다!!
리뷰해주신 부분 모두 수정했습니다.
GoogleService-Info.plist 따로 전달드렸습니다!

@sangYuLv
sangYuLv merged commit 5c7c146 into develop Aug 26, 2026
5 checks passed
@sangYuLv
sangYuLv deleted the WORK-47 branch August 26, 2026 05:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants