"행운복권v2"는 개발자의 꿈을 갖고 처음으로 개발부터 배포까지 진행한 프로젝트인 "행운복권"을 Jetpack Compose로 마이그레이션하고 클린 아키텍처를 적용하여 리팩토링한 결과물입니다.
- 로또 6/45 및 연금복권 720+의 회차별 당첨번호 조회
- QR코드 스캔을 통한 당첨 여부 즉시 확인
- OCR을 활용한 복권 번호 자동 인식
- 내 번호 저장 및 자동 당첨 확인
- 랜덤 번호 생성 기능
- 푸시 알림을 통한 추첨일 알림
- Jetpack Compose를 사용하여 선언형 UI 구현
- Clean Architecture 적용으로 계층 분리 및 의존성 역전
- 멀티 모듈 아키텍처로 관심사 분리 및 빌드 최적화
- Repository 패턴과 UseCase를 통한 비즈니스 로직 캡슐화
presentation (feature) → domain → data
↓ ↓
ViewModel Repository Implementation
↓ ↓
UseCase Local/Remote DataSource
프로젝트는 MVI 패턴을 참고한 단방향 데이터 흐름을 구현하여 상태 관리의 예측 가능성과 디버깅 용이성을 향상시켰습니다.
각 화면은 Contract를 통해 State, Event, Effect를 명확하게 정의합니다.
interface Contract {
data class State(...) // UI 상태
sealed interface Event // 사용자 액션
sealed interface Effect // 일회성 이벤트 (토스트, 네비게이션 등)
}User Action (Event)
↓
ViewModel
↓ ↘
UseCase Effect (일회성 이벤트)
↓ ↓
State 업데이트 UI Side Effect
↓ (네비게이션, 스낵바 등)
UI 재구성
(Recomposition)
core:designsystem- 공통 디자인 시스템 및 테마core:domain- 비즈니스 로직 및 UseCasecore:data- Repository 구현체core:ui- 공통 UI 컴포넌트core:local- Room Database 및 DataStorecore:remote- Retrofit API 클라이언트core:navigation- 네비게이션 관련core:notification- 알림 관리core:kakao- 카카오 로그인core:google- 구글 로그인 및 AdMobcore:firebase- Firebase 서비스core:ocr- OCR (Tesseract) 기능
feature:main- 메인 화면feature:home- 홈 화면 (당첨번호 조회)feature:mynumber- 내 번호 관리feature:randomnumber- 랜덤 번호 생성feature:notification- 알림 설정feature:my- 마이페이지feature:login- 로그인feature:register- 회원가입feature:editprofile- 프로필 수정feature:withdrawal- 회원 탈퇴feature:setting- 설정feature:splash- 스플래시
app- 앱 모듈build-logic- Gradle Convention Plugins- Convention Plugins를 통한 빌드 로직 재사용
- 모듈별 공통 설정 중앙화
buildSrc- 빌드 설정 및 의존성 관리- 모듈 경로 정의 (Modules)
- 버전 정보 (Versions)
- Kotlin - 주 개발 언어
- Gradle Kotlin DSL - 빌드 스크립트
- Version Catalog - 의존성 중앙 관리
- Coroutines - 비동기 처리
- Flow - 반응형 데이터 스트림
- Jetpack Compose - 선언형 UI 프레임워크
- Material Design 3 - 디자인 시스템
- Navigation Compose - 화면 전환
- Coil - 이미지 로딩
- Dagger Hilt - 의존성 주입
- Hilt Navigation Compose - Compose 통합
- Hilt WorkManager - WorkManager 통합
- Room - 로컬 데이터베이스
- DataStore - Key-Value 저장소
- Paging 3 - 페이징 처리
- Retrofit2 - REST API 클라이언트
- OkHttp - HTTP 클라이언트
- Gson - JSON 직렬화/역직렬화
- Kotlinx Serialization - Kotlin 직렬화
- WorkManager - 백그라운드 작업 스케줄링
- Kakao SDK - 카카오 로그인
- Google Play Services Auth - 구글 로그인
- Firebase Auth - 인증
- Firebase Messaging - 푸시 알림
- Android Image Cropper - 이미지 크롭
- Zxing - QR 코드 스캔
- Tesseract4Android - OCR (광학 문자 인식)
- Google AdMob - 광고
- JSoup - HTML 파싱