DateP

DateP Project: sanitizePath 추가로 DB 저장/조회 안정화

Solo.dev 2025. 4. 11. 23:51

 

DateP Project 패치 노트 (2025-04-11)

제목: 구독 데이터 저장 및 조회 시 DB 경로 문제 해결

문제 1: startPurchase 함수에서 구독 완료 후 DB 저장 실패

  • 문제: startPurchase 함수에서 구독은 완료되지만 Firebase DB에 데이터가 저장되지 않음.
  • 원인: 정확한 에러 로그는 없으나, DB 경로에 특수 문자가 포함되어 Firebase 경로 규칙을 위반한 것으로 추정.
  • 해결: purchaseToken에 포함된 특수 문자를 제거하기 위해 sanitizePath 함수를 추가하고, 변환된 값을 Firebase 경로로 사용.
  • 결과 예상: 구독 데이터가 Firebase DB에 정상적으로 저장됨.
  • 테스트 결과: 미진행.

문제 2: checkSubscriptionStatus 함수에서 DB 조회 시 에러 발생

  • 문제: checkSubscriptionStatus 함수에서 Firebase DB 데이터를 읽을 때 에러 발생.
  • 원인: 에러 로그: child failed: path argument was an invalid path = "subscriptions/hkdkecghjlpgepobdedefekd.AO-J1Oyjr49tVl3q_NCXr_if_FsYLmsHPURzKzTqIthQC0gXk9j-850kdz1fm05pMoO9-6rTOnOFD5sNQJNVuX6w6cTPnk5Hbw". Paths must be non-empty strings and can't contain ".", "#", "$", "[", or "]". 데이터베이스 경로에 특수 문자(.)가 포함된 것이 원인.
  • 해결: purchaseToken에 포함된 특수 문자를 제거하기 위해 sanitizePath 함수를 추가하고, 변환된 값을 Firebase 경로로 사용.
  • 결과 예상: Firebase DB에서 구독 데이터를 정상적으로 조회 가능.
  • 테스트 결과: 미진행.

정리 및 다음 단계

  • 문제 요약: Firebase DB 저장 및 조회 시 경로 문제로 에러 발생.
  • 원인: DB 경로에 특수 문자가 포함되어 저장 및 조회가 실패.
  • 해결 및 테스트 계획:
    • sanitizePath 함수를 추가하여 경로 문제를 해결했으며, 수정된 코드를 통해 저장 및 조회 테스트 진행 예정.
    • 최우선 테스트 목표: startPurchase 함수에서 구독 데이터가 DB에 정상적으로 저장되는지 확인.
    • console.logpurchaseTokenpurchase 객체를 출력하도록 추가했으므로, 경로에 적합하지 않은 경우 purchase 객체를 확인 후 적절한 필드로 변경.
  • 추가 수정 필요:
    • 수정 전 DB 경로 형식을 사용하는 기존 함수들(getRemainingUses, useFeature)도 sanitizePath를 적용하도록 수정 필요.
    • 해야 할 작업:
      • getRemainingUsesuseFeature 함수에서 purchaseToken을 사용하여 Firebase 경로를 구성하는 부분을 확인.
      • 경로에 sanitizePath를 적용하여 특수 문자를 제거한 값을 사용하도록 수정.
      • 예: ref(db, `subscriptions/${purchaseToken}`)ref(db, `subscriptions/${sanitizePath(purchaseToken)}`)

테스트 후 확인 사항

  • startPurchase 함수에서 console.log('✅ Firebase에 구독 데이터 저장 완료'); 로그가 출력되는지 확인.
  • checkSubscriptionStatus 함수에서 console.log('✅ Firebase에서 구독 데이터 조회 성공:', subscription); 로그가 출력되는지 확인.
  • purchaseToken이 경로에 적합하지 않은 경우, console.log('구매 객체 데이터:', purchase); 로그를 통해 purchase 객체를 확인하고 적절한 필드로 변경.