우리 앱은 사용자의 퀴즈 풀이 결과를 Omr형태로 서버에 저장합니다.
Int,List<String>이 포함된 List<Any>를 올리고, 퀴즈 결과 화면에서 해당 데이터를 받아와 사용합니다.
Firestore를 통해 데이터를 저장하고 불러오는 과정에서 발생한 문제입니다.
QuizResult
클래스에서 userOmrAnswers
는 사용자가 선택한 답안을 포함하고, Number
타입으로 처리됩니다.
특히, evaluateChoiceQuestion
함수에서 userAnswer
를 toInt()
로 변환하여 정답과 비교하는 로직을 작성했습니다:
kotlin
코드 복사
private fun evaluateChoiceQuestion(
index: Int,
userAnswer: Number,
): Boolean = userAnswer.toInt() == (questions[index] as ChoiceQuestion).answer
Firestore에 데이터를 저장할 때는 분명히 Int
타입으로 저장했으나, 데이터를 다시 불러와 디버깅해보니 userAnswer
의 타입이 Long
으로 들어오면서 문제가 발생했습니다. 이를 Firestore에서 숫자를 처리하는 방식과 관련된 문제로 파악했습니다.
Firestore는 내부적으로 모든 숫자 데이터를 Number
타입으로 관리합니다. 이 타입은 크게 두 가지 형태로 저장될 수 있습니다:
Long
)로 처리됩니다.Firestore는 모든 정수를 플랫폼 독립적으로 처리하기 위해 기본적으로 Long
타입으로 저장하고 반환합니다.
즉, Kotlin의 Int
로 저장한 값이라도 Firestore에서 불러오면 Long
으로 반환됩니다.
Int
를 Long
으로 반환하는가?Firestore는 다양한 언어와 플랫폼 간 호환성을 위해 숫자 데이터를 더 큰 범위를 지원하는 타입(Long
)으로 통일하여 저장합니다.
예를 들어: