Flutter 프로젝트에서 Android Jetpack Compose로 마이그레이션된 무드 트래킹 앱입니다.
MoodLog는 사용자의 일상 감정을 기록하고 분석할 수 있는 무드 트래킹 앱입니다. 감정 상태, 일기, 위치 정보, 날씨 등을 종합하여 개인의 감정 패턴을 분석합니다.
app/
├── domain/ # 비즈니스 로직
│ ├── entities/ # 도메인 엔티티
│ ├── repositories/ # Repository 인터페이스
│ ├── usecases/ # Use Cases
│ └── common/ # 공통 클래스 (Result 등)
├── data/ # 데이터 계층
│ ├── database/ # Room Database
│ │ ├── entities/ # Room 엔티티
│ │ ├── dao/ # DAO 인터페이스
│ │ └── converters/ # Type Converters
│ ├── repositories/ # Repository 구현체
│ └── mappers/ # Entity ↔ Domain 매퍼
├── presentation/ # UI 계층
│ ├── home/ # 홈 화면
│ ├── navigation/ # 네비게이션
│ └── ui/theme/ # UI 테마
└── di/ # 의존성 주입 모듈
- Language: Kotlin
- UI Framework: Jetpack Compose + Material3
- Architecture: MVVM + Clean Architecture
- Dependency Injection: Hilt
- Database: Room
- Navigation: Navigation Compose
- Async: Coroutines + Flow/StateFlow
- Serialization: Kotlinx Serialization
# UI
androidx-compose-bom = "2024.08.00"
androidx-material3 = { ... }
androidx-activity-compose = "1.9.1"
# Architecture
hilt-android = "2.51.1"
androidx-lifecycle-viewmodel-compose = "2.8.4"
androidx-navigation-compose = "2.7.7"
# Database
room-runtime = "2.6.1"
room-ktx = "2.6.1"
# Network (향후 사용)
retrofit = "2.11.0"
okhttp = "4.12.0"
# Image Loading
coil-compose = "2.7.0"
# Firebase (향후 사용)
firebase-bom = "33.1.2"- Gradle 설정 (Version Catalog 사용)
- Hilt 의존성 주입 설정
- Room Database 설정
- Navigation Compose 설정
- Material3 테마 설정
-
엔티티 클래스
MoodType- 감정 타입 (매우좋음~매우나쁨, 이모지, 점수, 색상)Journal- 일기 엔티티 (내용, 감정, 이미지, 위치, 날씨, 태그)Tag- 태그 엔티티Settings- 설정 엔티티 (테마, 언어, 폰트 등)LocationInfo,WeatherInfo- 위치/날씨 정보- Enum 클래스들 (
LanguageCode,ColorTheme,FontFamily등)
-
Repository 인터페이스
JournalRepository- 일기 CRUD 및 스트림TagRepository- 태그 관리AuthRepository- 인증 (Firebase)SettingsRepository- 설정 관리LocationRepository,WeatherRepository- 위치/날씨
-
Use Cases
JournalUseCase- 일기 비즈니스 로직TagUseCase- 태그 관리 로직AuthUseCase- 인증 로직
-
공통 클래스
Result<T>- 성공/실패 래퍼 클래스
-
Room Database
MoodLogDatabase- 메인 데이터베이스 클래스JournalEntity- 일기 테이블 엔티티TagEntity- 태그 테이블 엔티티JournalTagCrossRef- 일기-태그 다대다 관계- Type Converters (LocalDateTime, MoodType, List)
-
DAO (Data Access Object)
JournalDao- 일기 CRUD, 날짜별/월별 조회TagDao- 태그 CRUD, 일기별 태그 조회
-
Repository 구현체
JournalRepositoryImpl- Room 기반 일기 repositoryTagRepositoryImpl- Room 기반 태그 repository
-
매퍼 클래스
- Entity ↔ Domain 모델 변환
-
홈 화면 (HomeScreen)
- 월간 캘린더 뷰 (일기 있는 날짜 표시)
- 선택된 날짜의 일기 목록
- 감정 이모지 및 시간 표시
- 일기 삭제 기능
- FAB로 일기 작성 화면 이동
-
HomeViewModel
- StateFlow 기반 상태 관리
- 날짜별 일기 로딩
- 월간 일기 데이터 관리
- 일기 삭제 처리
-
네비게이션
- Navigation Compose 설정
- 화면 간 이동 관리
- 기본 라우팅 구조
-
의존성 주입
DatabaseModule- Room Database 제공RepositoryModule- Repository 바인딩
-
기본 UI 구성
- 감정 선택 슬라이더 (MoodType)
- 텍스트 입력 필드
- 이미지 첨부 기능
- 태그 선택/생성
- 저장/취소 버튼
-
고급 기능
- 위치 정보 자동 수집
- 날씨 정보 자동 수집
- AI 응답 생성 (Firebase AI)
- 이미지 리사이징 및 압축
-
WriteViewModel
- 폼 상태 관리
- 유효성 검사
- 이미지 처리
- 일기 저장 로직
-
차트 구현
- 감정 추이 라인 차트 (fl_chart 대신 Compose 차트)
- 월간/주간 감정 분포
- 태그별 통계
- 대표 감정 계산
-
통계 데이터
- 최근 30일 감정 평균
- 가장 많이 사용한 감정
- 연속 기록일 카운트
- 태그 사용 빈도
-
테마 설정
- 라이트/다크/시스템 테마
- 컬러 테마 선택 (19가지)
- 폰트 패밀리 선택
-
언어 설정
- 9개 언어 지원 (한국어, 영어, 일본어 등)
- strings.xml 다국어 리소스
-
기타 설정
- 알림 설정
- 자동 동기화 설정
- AI 페르소나 선택 (이성적/균형/공감)
- 텍스트 정렬 설정
-
Firebase Auth 연동
- Google 로그인
- 익명 로그인
- 프로필 관리
-
사용자 상태 관리
- 로그인 상태 감지
- 프로필 이미지 업데이트
- 닉네임 관리
-
Network Layer
- Retrofit + OkHttp 설정
- 날씨 API 연동 (OpenWeatherMap)
- Firebase Firestore 연동
-
Repository 구현체 추가
AuthRepositoryImplSettingsRepositoryImpl(DataStore)LocationRepositoryImpl(FusedLocationProvider)WeatherRepositoryImpl
-
로컬 설정 저장
- DataStore Preferences 연동
- 앱 설정 로컬 캐싱
-
위치 서비스
- FusedLocationProvider 연동
- 권한 처리 (Accompanist Permissions)
- 주소 역변환 (Geocoding)
-
이미지 처리
- Coil 이미지 로딩
- 갤러리/카메라 선택
- 이미지 압축 및 최적화
-
푸시 알림
- Firebase Cloud Messaging
- 일기 작성 리마인더
- 로컬 알림 스케줄링
-
데이터 동기화
- Firebase Firestore 연동
- 오프라인 지원
- 데이터 백업/복원
-
성능 개선
- LazyColumn 최적화
- 이미지 캐싱
- 데이터베이스 쿼리 최적화
- Compose 리컴포지션 최적화
-
테스트 코드
- Unit Test (JUnit)
- UI Test (Compose Test)
- Repository Test (Room Test)
- Write Screen 구현 - 핵심 기능
- Settings Screen 기본 UI - 테마/언어 설정
- DataStore 연동 - 설정 저장
- Firebase Auth 연동 - 사용자 관리
- Statistics Screen - 감정 분석
- 위치/날씨 서비스 - 부가 정보
- AI 응답 기능 - Firebase AI 연동
- 푸시 알림 - 사용자 경험 개선
- 고급 통계 기능 - 상세 분석
-
환경 요구사항
- Android Studio Giraffe 이상
- Kotlin 1.9.24
- Minimum SDK 26 (Android 8.0)
- Target SDK 36
-
빌드 및 실행
# 프로젝트 클론 후 cd moodlog_android ./gradlew assembleDebug ./gradlew installDebug
-
Firebase 설정 (향후)
google-services.json파일 추가 필요- Firebase Console에서 프로젝트 생성