개발 slecs

로그인 버튼 누르면 앱이 죽던 버그 수정

목차

Firebase나 Google OAuth 같은 써드파티 인증을 모바일 앱에 연동할 때는 늘 신경 쓸 게 많다. 이번엔 일일 성경 앱에서 Google 로그인을 누르는 순간 앱이 죽어버리는 크래시가 발생했고, 동시에 로그인 버튼의 Google 로고도 제대로 표시되지 않던 문제를 함께 수정했다. 작은 문제처럼 보이지만 로그인은 앱의 첫 진입점이고, 이곳이 깨지면 신규 사용자는 진입 자체를 못 한다.

마주친 두 가지 문제

먼저 상황을 정리해보자:

문제 영향 범위 심각도
Google 로그인 시 크래시 신규 가입 / 재로그인 사용자 🔴 높음
로그인 버튼 로고 미표시 UX 디스트랙션 / 버튼 인식도 저하 🟡 중간

로그인 크래시는 앱의 진입 경로 자체를 막는 치명적 버그였다. 사용자가 Google 로그인 버튼을 누르면 iOS든 Android든 앱이 강제 종료되는 상황이 반복됐다. 한편 로그인 버튼의 Google G 아이콘이 누락된 채로 렌더링되니, 남은 텍스트만으로는 사용자가 "이게 뭐 하는 버튼인지" 바로 인식하기 어려웠다.

변경 파일들이 말해주는 것

네 개 파일을 수정했다:

  • google_g.png: Google의 공식 로고 아이콘을 assets/icon/ 폴더에 추가했다. 모바일 앱에서 외부 리소스는 빌드 타임에 번들되어야 하는데, 이 파일이 누락되어 있었을 것 같다.

  • pubspec.yaml: Flutter 프로젝트의 의존성 관리 파일이다. Google 로그인 플러그인(google_sign_in 패키지 등)의 버전을 업그레이드했을 가능성이 높다. 써드파티 라이브러리 버전 변경은 예상치 못한 동작 변화를 불러올 수 있는데, 이번엔 로그인 플로우 자체가 깨진 것 같다.

  • app.dart: 앱의 메인 초기화 로직 파일이다. Google 로그인 SDK 초기화(clientID 설정, OAuth 스코프 설정 등)가 여기 있을 텐데, 아마도 새 버전 라이브러리의 초기화 API가 바뀌어서 레거시 호출이 크래시를 일으켰을 것 같다.

  • login_screen.dart: 로그인 화면의 UI 렌더링 로직이다. google_g.png를 올바르게 import하고 버튼에 표시하도록 수정했을 것이고, 동시에 Google 로그인 버튼 탭 핸들러의 에러 처리를 강화했을 수도 있다.

왜 이런 버그가 생겼나

이런 류의 문제는 보통 다음 상황에서 발생한다:

  1. 의존성 버전 업그레이드 후 테스트 미흡: Google 로그인 라이브러리의 메이저 버전 업이 되면 API가 바뀐다. 마이그레이션 가이드를 정확히 따르지 않으면 런타임 크래시가 터진다.

  2. 리소스 파일 빌드 프로세스 누락: UI 로고 파일을 추가해도 pubspec.yamlassets: 섹션에 명시하지 않으면 빌드 타임에 번들되지 않는다. iOS와 Android는 리소스 관리가 다르니 양쪽 다 체크해야 한다.

  3. 로컬 개발 환경과 CI/CD의 불일치: 개발자 로컬에선 잘 작동하는데 빌드 서버에서는 문제가 생길 수 있다. 특히 리소스 경로나 환경 변수 설정이 다를 때 그렇다.

빌드 버전 정보를 어떻게 봐야 할까

커밋 메시지에 build 1.0.0+7이라고 명시했다. 이건 Flutter 앱의 버전 규칙인데:
- 1.0.0: 사용자에게 보이는 버전 번호(semantic versioning)
- +7: 빌드 번호(internal build count)

버그 수정이 비교적 작으면 버전만 올리고(1.0.0+8), 사용자 눈에 띄는 기능 추가면 minor 버전을 올린다(1.1.0+1). 이번처럼 로그인이 완전히 깨진 크리티컬 버그라면 즉시 핫픽스 배포해야 하니, 빌드 번호를 1 올려서 빠르게 배포하는 게 맞다.

회고: 로그인 경로는 늘 먼저 테스트할 것

개발 팀이 커질수록 "각자 자기 피처만 작동 확인하고 PR 올린다"는 식으로 흘러가기 쉽다. 하지만 로그인, 결제, 푸시 알림처럼 "모든 사용자가 반드시 거쳐야 하는 경로"는 의존성 업그레이드 후 회귀 테스트(regression test)를 꼭 돌려야 한다. CI/CD 파이프라인에 "Google 로그인 정상 작동 확인" 같은 간단한 e2e 테스트를 추가하는 것도 좋은 방법이다.

또한 리소스 파일(아이콘, 이미지)을 추가할 때는 빌드 설정(pubspec.yaml, Gradle 설정 등)까지 함께 체크하는 습관을 들이자. "코드만 수정됐으니 배포하자"는 생각으로 넘어가면 나중에 "왜 아이콘이 안 보여?"라는 슬랙 메시지를 받게 된다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.