Skip to content

트러블슈팅‐구글 로그인 오류 (옛날 안드로이드 Context 문제)

easyhak edited this page Dec 4, 2024 · 1 revision

우리 프로젝트에서는 구글 로그인 기능을 다음과 같은 계층 구조로 설계했습니다:

UI: 컴포즈 스크린 feature.auth 모듈 ViewModel: feature.auth 모듈 Use Case: 로그인 유스케이스 core.domain 모듈 Repository: core.data 모듈 Google DataSource: core.data 모듈

문제 상황

구글 로그인에 사용되는 CredentialManagerContext가 필요합니다. 이를 해결하기 위해 Hilt의 @ApplicationContext를 사용해 Context를 주입받았습니다. 하지만 팀원들이 실행했을 때 일부 옛날 안드로이드 버전에서 오류가 발생했습니다. 그리고 구글 로그인을 하기 위해선 CredentialManager에 context를 넣어야 했습니다. 저는 이걸 힐트의 @ApplicationContext 를 주입 받아서 해결했습니다.

원인

옛날 안드로이드 버전에서는 @ApplicationContext로 주입된 contextCredentialManager에서 사용할 경우 문제가 발생했습니다. 이로 인해 몇 가지 선택지가 있었습니다

  1. Context를 계층적으로 주입 UI부터 Google DataSource까지 Context를 전달하도록 설계
  • 장점: 문제 해결 가능.
  • 단점: 계층 간 Context 전달로 인해 코드가 복잡해짐.
  1. CredentialManager 로직 분리
  • feature.auth 모듈에 별도 패키지 (sns)를 만들어 Google CredentialManager를 처리하고 필요 시 Intent를 사용.

최종 해결 방법

우리는 2번 접근 방식을 선택했습니다. feature.auth 모듈에 sns 패키지를 만들어 CredentialManager를 처리했습니다. 이는 아래와 같은 장점이 있었습니다

  • 각 계층에서 Context를 전달할 필요가 없어 코드가 깔끔해짐
  • CredentialManagerGoogle 전용 로직임을 명확히 구분했습니다.
flowchart TD
    UI["UI (Compose Screen)"]
    ViewModel["ViewModel"]
    UseCase["Use Case (core.domain 모듈)"]
    Repository["Repository (core.data 모듈)"]
    GoogleDataSource["Google DataSource (core.data 모듈)"]
    sns["CredentialManager in sns 패키지 (feature.auth 모듈)"]

    UI --> ViewModel
    ViewModel --> UseCase
    UseCase --> Repository
    Repository --> GoogleDataSource
    GoogleDataSource --> sns
Loading
Clone this wiki locally