-
Notifications
You must be signed in to change notification settings - Fork 0
트러블슈팅‐구글 로그인 오류 (옛날 안드로이드 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
모듈
구글 로그인에 사용되는 CredentialManager
는 Context
가 필요합니다. 이를 해결하기 위해 Hilt의 @ApplicationContext
를 사용해 Context
를 주입받았습니다. 하지만 팀원들이 실행했을 때 일부 옛날 안드로이드 버전에서 오류가 발생했습니다.
그리고 구글 로그인을 하기 위해선 CredentialManager에 context를 넣어야 했습니다.
저는 이걸 힐트의 @ApplicationContext
를 주입 받아서 해결했습니다.
옛날 안드로이드 버전에서는 @ApplicationContext
로 주입된 context
를 CredentialManager
에서 사용할 경우 문제가 발생했습니다. 이로 인해 몇 가지 선택지가 있었습니다
- Context를 계층적으로 주입 UI부터 Google DataSource까지 Context를 전달하도록 설계
- 장점: 문제 해결 가능.
- 단점: 계층 간 Context 전달로 인해 코드가 복잡해짐.
- CredentialManager 로직 분리
- feature.auth 모듈에 별도 패키지 (sns)를 만들어 Google CredentialManager를 처리하고 필요 시
Intent
를 사용.
우리는 2번 접근 방식을 선택했습니다. feature.auth
모듈에 sns 패키지를 만들어 CredentialManager
를 처리했습니다. 이는 아래와 같은 장점이 있었습니다
- 각 계층에서
Context
를 전달할 필요가 없어 코드가 깔끔해짐 -
CredentialManager
가Google
전용 로직임을 명확히 구분했습니다.
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