이 프로젝트는 '앗차!'라는 이름의 안드로이드 애플리케이션으로, 대중교통 막차 정보를 제공하고 놓치지 않도록 도와주는 서비스입니다. 사용자가 집과 출발지를 설정하면 막차 시간, 실시간 버스 위치, 경로 정보 등을 알려주고, 출발해야 할 시간에 알림을 보내주는 기능을 핵심으로 합니다.
- 타겟 사용자: 대중교통, 특히 막차를 자주 이용하거나 놓치는 사용자
- 핵심 가치: 사용자가 막차 시간 압박에서 벗어나 여유롭게 귀가할 수 있도록 돕는 것
이 프로젝트는 현대적인 안드로이드 앱 개발 트렌드에 맞춰 MVI (Model-View-Intent) 패턴을 적용한 Clean Architecture를 채택하고 있습니다.
- 단방향 데이터 흐름 (UDF): UI(View)에서 발생한 사용자 이벤트(Intent)는 ViewModel을 거쳐 데이터 계층으로 전달되고, 처리된 결과(State)는 다시 UI로 전달되는 단방향 구조를 가집니다. 이를 통해 데이터 흐름을 예측 가능하게 하고 상태 관리를 용이하게 합니다.
- 계층 분리:
- UI Layer: Jetpack Compose를 사용하여 선언적으로 UI를 구성합니다. 사용자의 상호작용을 처리하고, ViewModel로부터 UI State를 구독하여 화면을 갱신합니다.
- Domain Layer: 특정 프레임워크에 종속되지 않는 순수한 Kotlin 코드로 작성된 비즈니스 로직을 포함합니다. UseCase를 통해 특정 기능을 캡슐화합니다.
- Data Layer: Repository 패턴을 사용하여 데이터 소스를 추상화합니다. 원격 서버(Retrofit)나 로컬 저장소(DataStore)로부터 데이터를 가져오는 역할을 수행하며, Domain 계층은 데이터의 출처를 알 필요가 없습니다.
- 의존성 주입 (DI): Hilt를 사용하여 계층 간의 의존성을 관리합니다. 이를 통해 각 컴포넌트의 결합도를 낮추고 테스트 용이성을 높입니다.
프로젝트는 다음과 같은 주요 기술과 라이브러리를 사용하여 구현되었습니다.
- 언어: Kotlin 100%
- UI: Jetpack Compose (Android의 최신 선언형 UI 툴킷)
- 비동기 처리: Coroutines & Flow
- 아키텍처:
- AAC (ViewModel, Navigation)
- MVI (Model-View-Intent)
- 의존성 주입: Hilt
- 네트워킹: Retrofit & OkHttp
- 지도/위치: TMAP SDK, Google Play Services (Location)
- 로컬 데이터: DataStore (Key-Value 저장)
- 인증: Kakao Login
- 푸시 알림: Firebase Cloud Messaging (FCM)
- 백그라운드 처리: BackgroundService, BroadcastReceiver
- 분석: Firebase Analytics, Amplitude
- 기타: Lottie (애니메이션), Accompanist (WebView, SystemUIController)
소스 코드와 리소스 파일 분석을 통해 다음과 같은 주요 기능들을 유추할 수 있습니다.
- 경로 검색: 출발지와 목적지를 기반으로 대중교통(주로 버스) 막차 경로를 검색합니다.
- 실시간 정보 제공: TMAP SDK를 활용하여 버스의 실시간 위치와 도착 예정 시간을 지도 위에 표시합니다.
- 알림 기능:
- 막차 시간에 맞춰 푸시 알림을 전송합니다.
- 사용자가 제시간에 출발할 수 있도록 잠금화면에서 소리/진동 알람을 제공합니다.
- 사용자 맞춤 설정: 집 주소를 저장하고, 자주 사용하는 경로를 관리하는 기능이 있을 것으로 보입니다.
- 소셜 로그인: Kakao SDK를 통한 간편 로그인 기능을 제공합니다.
- 빌드 시스템: Gradle (Kotlin DSL -
build.gradle.kts) - CI/CD: GitHub Actions (
.github/workflows/android_ci.yml)를 통해 CI 파이프라인이 구축되어 있어 코드 통합 및 빌드 자동화를 수행합니다. - 코드 품질: Kt-lint 플러그인을 사용하여 코드 스타일을 일관되게 유지합니다.
- 보안: Proguard와 R8을 적용하여 릴리즈 빌드 시 코드를 난독화하고 최적화합니다.
Gemini는 이 프로젝트의 코드 베이스에 대한 깊은 이해를 바탕으로 다음과 같은 역할을 수행합니다.
- 코드 분석: 항상 현재 내가 위치하고 있는 git branch의 코드에 대해서 읽고 분석합니다.
- 질문 답변: 프로젝트의 특정 코드나 기능에 대해 질문하면, 코드의 구조, 로직, 상호작용을 분석하여 답변합니다.
- 이슈 원인 파악: 버그나 예상치 못한 동작에 대한 질문 시, 관련 코드를 추적하고 분석하여 근본적인 원인을 파악하고 설명합니다.
- 잠재적 위험 요소 식별: 현재 코드에 존재할 수 있는 크리티컬한 문제나 실제 운영 환경에서 위험을 초래할 수 있는 잠재적 요소를 식별하고 개선 방향을 제안합니다. 단, 지엽적이거나 사소한 스타일 지적은 지양하고, 아키텍처, 성능, 안정성과 관련된 중요한 문제에 집중합니다.