개인 프로젝트
PlayStore: https://play.google.com/store/apps/details?id=com.stopstone.musicplaylist
감정플리는 매일의 감정을 음악으로 기록하는 다이어리 앱입니다.
하루를 대표하는 주제곡을 선정하고 그날의 감정을 기록할 수 있습니다.
마치 나만의 작은 음악 다이어리처럼, 음악을 통해 그날의 감정과 순간을 더 풍성하게 기록할 수 있습니다.
Spotify API로 음악을 검색하고, 캘린더를 통해 과거의 기록을 돌아볼 수 있습니다.
인스타그램 스토리로 음악 기록을 공유하거나, 일일 알림을 통해 꾸준히 기록할 수 있습니다.
MVVM을 적용하여 확장 가능하고 유지보수가 용이한 구조로 설계했습니다.
- MVVM 아키텍처 패턴 실습
- Repository Pattern을 통한 데이터 계층 분리
- UseCase를 활용한 비즈니스 로직 모듈화
- Room Database 설계 및 구현
- Coroutines & Flow 활용 실습
- irebase Firestore를 통한 클라우드 데이터 동기화
- WorkManager를 활용한 백그라운드 작업 처리
- 소셜 로그인 연동 및 사용자 인증 구현
2024.06 - 2024.08 (현재 지속적으로 업데이트 중)
프로젝트는 Clean Architecture를 기반으로 구현되었으며, 다음과 같은 레이어로 구성되어 있습니다:
- 사용자 인터페이스 요소
- Activity, Fragment
- ViewModel: UI 상태 관리 및 비즈니스 로직 처리
- UI 모델: 화면에 표시될 데이터 객체
- 비즈니스 로직 정의
- UseCase: 각 기능별 비즈니스 로직 캡슐화
- Repository Interface: 데이터 계층과의 통신 규약 정의
- Domain Model: 비즈니스 로직에서 사용되는 모델
- 실제 데이터 처리 구현
- Repository Implementation: 데이터 소스 관리
- Local Database: Room을 이용한 로컬 저장소
- Remote Data Source: Spotify API, Firebase Firestore 연동
- Data Model: API 응답 및 데이터베이스 모델
- Clean Architecture
- MVVM Pattern
- Repository Pattern
- Kotlin
- Jetpack Components (ViewModel, Navigation, Room)
- Coroutines Flow
- Dagger Hilt
- Retrofit2 & OkHttp3
- Room Database
- DataStore
- Firebase Firestore
- Firebase Analytics
- WorkManager
- Notification Channel
- Kakao SDK
- Spotify API를 통한 음악 검색
- 일일 음악 저장 기능
- 메모 작성 기능
- 최근 검색어 저장 및 관리
- 최근 검색어 5개까지 저장
- 검색어 개별 삭제 및 전체 삭제
- 월별 음악 기록 표시
- 앨범 커버 이미지로 시각화
- 날짜별 상세 정보 조회
- 이전/다음 월 네비게이션
- 인스타그램 스토리 공유 기능
- 커스텀 스토리 이미지 생성
- 감정, 메모, 기록 시간 표시 옵션 설정
- 공유 설정 커스터마이징 (감정 표시 여부, 메모 표시 여부 등)
- 일일 음악 기록 알림
- 매일 지정된 시간(21시)에 알림 발송
- 오늘 기록이 없을 때만 알림 발송
- 알림 설정 ON/OFF 기능
- 카카오 소셜 로그인 지원
- 자동 로그인 기능
- Firebase Firestore를 통한 사용자 데이터 동기화
- 사용자별 음악 기록 및 설정 동기화
- Token 기반 인증 시스템 구현
- API 응답 데이터 모델링
- DataStore를 활용한 토큰 저장 및 관리
- AuthInterceptor를 통한 API 요청 관리
- Room Database 테이블 설계
- DailyTrack: 일일 음악 정보 저장
- SearchHistory: 최근 검색어 관리
- SignatureSong: 인생곡 저장
- Entity 관계 설정
- StateFlow를 활용한 UI 상태 관리
- 검색, 추천, 캘린더 상태 관리
- Room Database를 통한 로컬 데이터 관리
- DataStore를 통한 토큰 관리
- 검색 기록 관리 (최근 5개)
- 커스텀 View를 Bitmap으로 변환하여 스토리 이미지 생성
- FileProvider를 통한 안전한 이미지 공유
- 인스타그램 스토리 공유 인텐트 처리
- 공유 설정(감정, 메모, 시간 표시) 커스터마이징
- 인스타그램 미설치 시 Play Store 리다이렉트 처리
- WorkManager를 활용한 주기적 알림 스케줄링
- BootReceiver를 통한 재부팅 후 알림 재등록
- Hilt EntryPoint를 활용한 Worker 의존성 주입
- Android 13+ 알림 권한 처리
- 알림 채널 관리 및 사용자 설정 연동
- 오늘 기록 여부 확인 후 조건부 알림 발송
- 카카오 SDK를 활용한 소셜 로그인 구현
- Firebase Firestore를 통한 클라우드 데이터 저장
- 로컬 데이터와 Firestore 양방향 동기화
- 로컬 → Firestore: 로컬에만 있는 데이터 업로드
- Firestore → 로컬: 클라우드 데이터 다운로드 및 병합
- 사용자별 데이터 분리 저장 구조
- 설정 데이터 동기화 (인스타 공유 설정, 감정 설정 등)
- 자동 로그인 및 사용자 세션 관리
com.stopstone.musicplaylist/
├── base/
├── data/
│ ├── local/
│ │ ├── dao/
│ │ ├── database/
│ │ └── settings/
│ ├── model/
│ │ ├── dto/
│ │ ├── entity/
│ │ └── response/
│ ├── remote/
│ │ ├── api/
│ │ ├── datasource/
│ │ └── dto/
│ └── repository/
│ ├── common/
│ ├── emotion_setting/
│ ├── home/
│ ├── insta_share/
│ ├── my/
│ ├── notification/
│ ├── search/
│ └── user/
├── di/
│ └── worker/
├── domain/
│ ├── model/
│ ├── repository/
│ │ ├── common/
│ │ ├── emotion_setting/
│ │ ├── home/
│ │ ├── insta_share/
│ │ ├── my/
│ │ ├── notification/
│ │ ├── search/
│ │ └── user/
│ └── usecase/
│ ├── common/
│ ├── detail/
│ ├── emotion_setting/
│ ├── home/
│ ├── insta_share/
│ ├── login/
│ ├── my/
│ ├── notification/
│ ├── search/
│ ├── setting/
│ ├── splash/
│ └── user/
├── notification/
├── ui/
│ ├── common/
│ ├── detail/
│ ├── emotion_setting/
│ ├── home/
│ ├── insta_share_setting/
│ ├── login/
│ ├── music_memo/
│ ├── music_search/
│ ├── my/
│ ├── playlist/
│ ├── signature_list/
│ ├── signature_music/
│ └── user_setting/
└── util/
- 클린 아키텍처 원칙을 실제 프로젝트에 적용하며 각 계층의 역할과 책임 이해
- MVVM 패턴으로 UI와 비즈니스 로직 분리의 장점 경험
- Coroutines Flow를 활용한 데이터 스트림 처리
- Room Database와 DataStore의 적절한 활용
- Repository 패턴을 통한 데이터 소스 추상화
- Clean Architecture를 통한 비즈니스 로직 분리
- Firebase Firestore를 통한 클라우드 데이터 동기화
- 로컬과 클라우드 데이터 병합 전략
- WorkManager를 활용한 주기적 작업 스케줄링
- Hilt EntryPoint를 통한 Worker 의존성 주입
- 알림 채널 관리 및 권한 처리
- 카카오 SDK를 활용한 소셜 로그인 구현
- 사용자 세션 관리 및 자동 로그인
- 월별/연도별 감정 통계 제공
- 선호 음악 장르 분석
- 감정 패턴 시각화 (그래프, 차트)
- 선호 아티스트 분석

