앱을 개발하다 보면 특정 유저에게만 발생하는 문제를 마주할 때가 있습니다. 로그는 없고, 재현도 어렵고, QA도 재현 못하고…
최근 제가 진행하던 프로젝트에서 그런 문제가 터졌습니다. 다행히도 Firebase Crashlytics의 기능들을 적절히 활용해서 문제 유저를 추적하고, 흐름을 파악하며, 원인을 정확히 잡아낼 수 있었던 경험이 있어 공유합니다.
문제 상황
QA 중 특정 유저에게만 다음과 같은 문제가 발생했습니다.
- 앱이 갑자기 종료됨
- 로그에는 아무런 힌트 없음
- 다른 유저들은 문제 없음
Crashlytics에 에러는 잡혔지만, 그 에러가 어떤 유저에게 발생했고, 그 유저가 어떤 경로로 도달했는지 전혀 알 수 없었습니다.
해결 방법: Crashlytics에 "맥락"을 심자
Crashlytics는 단순한 크래시 리포팅 도구가 아닙니다. 다음 세 가지 기능만 잘 써도 유저 기반 문제 추적이 가능합니다.
1. 유저 식별 - setUserId
앱에 로그인할 때 유저 ID를 설정해주면, Crashlytics에서 유저별로 크래시를 구분해 보여줍니다.
👉 어떤 유저에게만 반복적으로 발생하는 문제인지 확인할 수 있습니다.
2. 상태 기록 - setCustomKey
에러 당시의 앱 상태나 유저 정보를 키-값으로 저장할 수 있습니다.
👉 조건부로 발생하는 이슈(예: "카카오 로그인 유저만 문제 있음") 파악에 유용합니다.
3. 유저 이동 경로 기록 - log
유저의 행동을 시간순으로 기록할 수 있습니다.
👉 에러가 발생하기 직전까지의 흐름을 정확히 추적할 수 있습니다.
실전 적용 결과
Crashlytics에서 유저 ID를 기준으로 해당 문제 유저의 크래시를 조회했습니다.
log를 통해 유저가 어떤 흐름을 따라왔는지도 확인할 수 있었습니다.
- 로그인 완료 (userId: test_1234)
- 마이페이지 진입 → 포인트 내역 진입
- "포인트 사용" 버튼 클릭
- 이후 NPE 발생
그 결과, 특정 조건에서 포인트 관련 데이터가 서버에서 누락된 것이 원인임을 파악했고, 빠르게 대응할 수 있었습니다.
마무리
Crashlytics는 단순한 크래시만 보는 게 아니라, 유저 행동과 상태까지 함께 보는 도구입니다.
setUserId, setCustomKey, log 이 세 가지를 잘만 써도
👉 "누가, 언제, 어디서, 왜" 문제가 발생했는지 훨씬 명확하게 파악할 수 있습니다.
필요하다면 샘플 코드, Dashboard 화면 예시, 적용 위치 팁 등을 추가해서 더 풍부한 포스팅으로 확장도 가능해요. 원하시면 그 부분도 도와드릴게요!
나의 말:
ChatGPT의 말:
물론입니다! 아래는 이모지 아이콘을 적극 활용하고, 가독성을 높인 마크다운 스타일의 기술 블로그 형식입니다. 실무 흐름 중심으로 핵심만 콕콕 짚어드릴게요.
🔍 Firebase Crashlytics로 유저 기반 문제 추적하기
setUserId | setCustomKey | log 실전 활용기
최근 제가 진행한 프로젝트에서,
특정 유저에게만 반복적으로 발생하는 크래시가 있었습니다.
📉 "로그엔 아무것도 안 남고, QA도 재현이 안 되는데… 도대체 원인이 뭘까?"
이 상황에서 Firebase Crashlytics의 다음 기능 3개를 적극 활용해
문제 유저를 정확히 추적하고, 흐름을 분석해 원인을 빠르게 찾을 수 있었습니다.
🛠️ 사용한 Crashlytics 기능 요약
| 🙍♂️ setUserId | 유저별로 크래시 구분 | setUserId("user123") |
| 🧩 setCustomKey | 앱 상태 & 유저 정보 기록 | setCustomKey("membership", "gold") |
| 📝 log | 유저 행동 기록 | log("진입: MainFragment") |
⚠️ 문제 상황
- QA 중 특정 유저만 앱이 갑자기 종료됨
- 로그캣엔 아무 단서도 없음
- Crashlytics엔 NPE만 찍힘
- 원인 재현 불가
🤷♂️ “누가, 언제, 어떤 흐름으로 문제를 일으켰는지 모르면 고칠 수가 없다...”
✅ 해결 방법
1️⃣ 유저 식별하기 - setUserId 🙍♀️
- 유저 로그인 시점에 ID 설정
- 크래시 리포트에서 유저 기준으로 조회 가능
🔍 “user123에서만 반복 발생하네?”
→ 문제 유저 추적 가능!
2️⃣ 상태 기록하기 - setCustomKey 🧩
- 유저의 상태, 조건, 환경 등을 키-값으로 기록
- 크래시와 함께 저장되어 필터링 및 분석 가능
🎯 “카카오 로그인 유저 + Gold 멤버십에서만 발생하네?”
3️⃣ 행동 추적하기 - log 📝
- 주요 화면 이동 및 액션을 로그로 남김
- Crashlytics 콘솔에서 시간순 로그 확인 가능
📋 유저가 어떤 흐름을 타고 문제까지 왔는지 한눈에!
📈 실전 적용 결과
| test_1234 | Main → MyPage → PointHistory → '포인트 사용' 클릭 | NullPointerException 발생 |
🚨 문제 원인:
해당 유저의 포인트 내역 API 응답이 누락됨 → null 데이터 접근
👨🔧 조치 결과:
- 서버에서 조건 누락 수정
- 클라이언트에서도 null 체크 추가
🧠 정리하며
Crashlytics는 단순한 크래시 수집 도구가 아닙니다.
유저 식별 + 상태 저장 + 행동 추적을 조합하면
운영 중 발생하는 복잡한 문제도 빠르게 해결할 수 있습니다.
🎯 요약
| 🙍♂️ setUserId | 유저별 크래시 추적 |
| 🧩 setCustomKey | 앱 상태 & 유저 정보 분석 |
| 📝 log | 행동 흐름 기록 |
'안드로이드 > 파이어베이스' 카테고리의 다른 글
| 테스트 앱 배포, Firebase App Distribution 하나면 끝 (0) | 2025.05.13 |
|---|---|
| Firebase Test Lab으로 자동 앱 테스트하기 (1) | 2025.05.12 |