Firebase 12 업그레이드 실습 과정 - 대화 로그

오준석·2025년 7월 27일
0

코딩삽질방지

목록 보기
59/61

실제 Firebase 12 업그레이드 과정에서 발생한 문제들과 해결 과정을 단계별로 기록한 교육용 자료입니다.

📚 교육 목표

  • Firebase 버전 업그레이드 시 발생하는 실제 문제들 경험
  • Breaking Change 분석 및 해결 과정 학습
  • 체계적인 업그레이드 전략 수립 방법 이해
  • 실무에서 사용하는 문제 해결 접근법 습득

🎯 주요 학습 포인트

1. 문제 발견 단계

사용자 리포트: "로그인은 되는데 등원이 안 되는 것 같아"

  • 실제 운영 환경에서 발생하는 문제의 특징
  • 증상만으로는 원인을 알기 어려운 상황
  • 체계적인 디버깅 접근 필요

2. 문제 분석 단계

도구 활용: Context7을 사용한 Firebase 12 breaking changes 조사

사용자: "firebase 12 버전으로 업데이트 하면서 context7 을 활용하여 breaking change 를 확인하고 업그레이드 전략을 새우자"

분석 결과: Firebase 12의 주요 변경사항 발견

  • Timestamp 객체 사용 제한이 핵심 breaking change
  • Angular Fire 19.1.0이 대부분의 변경사항을 추상화
  • 실제 코드 수정이 필요한 부분이 제한적

3. 체계적 접근 전략

3단계 업그레이드 전략 수립:

  • Phase 1: 준비 작업 (Context7 조사, 전략 수립)
  • Phase 2: 패키지 업데이트
  • Phase 3: 코드 호환성 수정 및 테스트

4. 실제 코드 문제 발견

핵심 오류: "Unsupported field value: a custom Timestamp object"

문제 코드 예시:

// ❌ Firebase 12에서 오류 발생
const updatedStudent: Student = {
  ...student,
  punchInTimeToday: type === '등원' ? Timestamp.fromDate(new Date()) : student.punchInTimeToday,
  punchOutTimeToday: type === '하원' ? Timestamp.fromDate(new Date()) : null,
};
await this.repo.updateStudentPromise(updatedStudent); // 오류 발생!

5. 문제 해결 과정

첫 번째 시도: as any 사용

punchInTimeToday: type === '등원' ? new Date() as any : student.punchInTimeToday,

문제점: 타입 안전성 무시, 근본적 해결 아님

두 번째 시도: 올바른 해결방법

인터페이스 분리를 통한 타입 안전성 확보:

// 저장용 인터페이스
export interface StudentInput {
  punchInTimeToday?: Timestamp | FieldValue | Date | null;
}

// 읽기용 인터페이스
export interface Student {
  punchInTimeToday?: Timestamp | null;
}

최종 해결 코드:

const updatedStudent: StudentInput = {
  ...student,
  punchInTimeToday: type === '등원' ? new Date() : student.punchInTimeToday,
  punchOutTimeToday: type === '하원' ? new Date() : null,
};

6. 검증 과정

단계별 테스트:
1. 유닛 테스트: 55개 중 54개 성공
2. 빌드 테스트: 프로덕션 빌드 성공
3. 타입 검사: TypeScript 컴파일 오류 해결
4. 기능 테스트: 실제 등원/하원 기능 동작 확인

7. 문서화 및 지식 공유

작업 완료 후:

  • GitHub 이슈 생성 및 업데이트
  • Pull Request 작성
  • 상세한 기술 문서 작성 (firebase-12-upgrade-guide.md)

🔍 실무에서 배울 수 있는 교훈

1. 문제 해결 접근법

  • 증상 → 원인 → 해결책 순서로 체계적 접근
  • 추측보다는 실제 테스트와 검증 중시
  • 임시방편보다는 근본적 해결 추구

2. 코드 품질 유지

  • as any 같은 타입 우회 방법 지양
  • 인터페이스 분리를 통한 타입 안전성 확보
  • 테스트를 통한 변경사항 검증

3. 협업과 소통

  • 명확한 커밋 메시지 작성
  • 상세한 PR 설명
  • 이슈 연결을 통한 추적성 확보

4. 지식 관리

  • 중요한 작업은 반드시 문서화
  • 향후 참조를 위한 체계적 정리
  • 팀 전체가 활용할 수 있는 형태로 보존

📝 대화 흐름 요약

  1. 문제 인식: "등원이 안 되는 것 같아"
  2. 원인 조사: Context7을 활용한 Firebase 12 breaking changes 분석
  3. 전략 수립: 3단계 업그레이드 계획
  4. 실행: 패키지 업데이트 → 코드 수정 → 테스트
  5. 검증: 다양한 테스트를 통한 동작 확인
  6. 문서화: 상세한 기술 문서 작성
  7. 협업: GitHub을 통한 코드 리뷰 및 병합 준비

🎓 교육 활용 방안

실습 시나리오

  1. 비슷한 상황 재현: 의도적으로 Firebase 버전을 낮춰서 업그레이드 실습
  2. 문제 해결 연습: breaking change 문서를 보고 해결책 찾기
  3. 코드 리뷰: 수정 전후 코드 비교 분석
  4. 테스트 작성: 업그레이드 후 기능 검증 테스트 작성

토론 주제

  • 임시방편 vs 근본적 해결의 차이점
  • 타입 안전성의 중요성
  • 체계적인 업그레이드 전략의 필요성
  • 팀 협업에서 문서화의 역할

작성 목적: Firebase 12 업그레이드 실제 경험을 교육용으로 정리
대상: Angular/Firebase 개발자, 업그레이드 경험이 필요한 개발팀
활용: 실무 교육, 기술 세미나, 개발팀 온보딩
작성일: 2025년 7월 26일

profile
교육하고 책 쓰는 개발자

0개의 댓글