| 기술 스택 | |
|---|---|
| UI | Compose Ui |
| 라이브러리 | Flow, Room, google maps, serialization, coil, timber |
| API | Ktor |
| DI | Koin |
| 아키텍처 | MVI |
| CI/CD | Github Actions |
project
├── app
├── analytics
│ └── analytics_feature
│ └── data
│ └── domain
│ └── presentation
├── auth
│ └── data
│ └── domain
│ └──presentation
├── build-logic
│ └── convention
├── core
│ └── data
│ └── database
│ └── domain
│ └── presentation
│ └── designsystem
│ └── ui
├── run
│ └── data
│ └── domain
│ └── location
│ └── network
│ └── presentation
📗 프로젝트를 통해 얻은 경험 - 프로젝트 기술 기록
- 기존에 주로 사용하던 Retrofit 대신 Ktor 클라이언트를 사용해 API 통신을 구현
- 다양한 방식의 HTTP 통신 구조를 직접 구성하며 네트워크 계층에 대한 이해도 향상
- 기술 선택의 유연성을 확보하고, 클린 아키텍처와 결합하여 모듈화된 네트워크 구성 경험
- Google Maps API를 활용해 사용자의 이동 경로를 시각화
- Google Map Snapshot 기능을 통해 경로의 이미지를 저장하고 UI에 표시
- 위치 기반 기능과 지도 API의 실전 활용 경험 확보
- 기존에는 Hilt를 사용했지만, 이번 프로젝트에서는 Koin을 사용해 의존성 주입 구성
- DI 구성 방식을 비교하고, Koin의 DSL 기반 구성 방식을 직접 적용
- 상황에 따라 DI 도구를 선택할 수 있는 실전 경험 확보
- 예전엔 DroidKnights 프로젝트를 참고하였지만, 프로젝트에 스스로 멀티모듈을 설계하고 Convention Plugin 구현
- 모듈 간 의존성 분리, 공통 코드 분리, 기능 단위 모듈화 설계 진행
- 실 서비스에 적용 가능한 멀티 모듈 구성 경험과 빌드 속도 개선 효과 체감
- Jetpack Compose를 기반으로 UI 구현
- MVI 패턴을 적용하여 상태(State)와 이벤트(Effect)를 명확히 분리
- SOLID 원칙을 바탕으로 역할 분리와 유지보수 가능한 구조로 설계
- UI와 로직의 결합도를 낮추고 테스트 가능한 구조로 구성
| 로그인 메인 화면 | Sign in 화면 | sign up 화면 |
|---|---|---|
![]() |
![]() |
![]() |
| 메인화면 | 권한요청 받기(위치 권한) | 달리기 화면 |
|---|---|---|
![]() |
![]() |
![]() |
| 백그라운드 달리기 | 권한요청 받기(위치 권한) | 네트워크 동기화 작업(기록 저장) |
|---|---|---|
![]() |
![]() |
![]() |
| 분석화면 | 로그아웃 | 기록 삭제(네트워크 연결 x시에도 적용) |
|---|---|---|
![]() |
![]() |
![]() |











