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.log로 purchaseToken과 purchase 객체를 출력하도록 추가했으므로, 경로에 적합하지 않은 경우 purchase 객체를 확인 후 적절한 필드로 변경.
- 추가 수정 필요:
- 수정 전 DB 경로 형식을 사용하는 기존 함수들(getRemainingUses, useFeature)도 sanitizePath를 적용하도록 수정 필요.
- 해야 할 작업:
- getRemainingUses와 useFeature 함수에서 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 객체를 확인하고 적절한 필드로 변경.