Skip to content

refactor: 단일 :app 모듈을 피처+코어 멀티모듈 구조로 전환 - #27

Merged
OnlyReadOneBook merged 4 commits into
mainfrom
feat/24
May 31, 2026
Merged

OnlyReadOneBook merged 4 commits into
mainfrom
feat/24

Conversation

@OnlyReadOneBook

Copy link
Copy Markdown
Owner

📌𝘐𝘴𝘴𝘶𝘦𝘴

📎𝘞𝘰𝘳𝘬 𝘋𝘦𝘴𝘤𝘳𝘪𝘱𝘵𝘪𝘰𝘯

단일 :app 모듈을 Now in Android 스타일 피처+코어 멀티모듈 구조로 전환했습니다.

모듈 그래프 (12개)

  • :app — Application / MainActivity / NavGraph / route / MainViewModel + DI 통합
  • :core:model — entity + DummyData
  • :core:domain — repository 인터페이스
  • :core:datastore — TokenManager (DataStore)
  • :core:network — service / dto / AuthInterceptor / NetworkModule / ApiModule
  • :core:designsystem — theme / 공용 컴포넌트 / ModifierExt / drawable·font
  • :core:data — mapper / repositoryimpl / RepositoryModule
  • :feature:auth / home / combination / onboarding / profile

build-logic 컨벤션 플러그인 도입

  • AndroidApplication / Application.Compose / Library / Library.Compose / Hilt / Feature / KotlinLibrary
  • 공통 SDK·Java17·Kotlin·Compose·Hilt 설정을 중앙화

부수 정리

  • 99개 kt 파일 모듈별 이동 + 패키지/import 전면 재작성, BuildConfig·R(designsystem) 참조 재배치
  • detekt 제거 (빌드스크립트·build-logic·version catalog)
  • version catalog 경고 해소: core-splashscreen / firebase-bom / firebase-analytics / kotlin-metadata-jvm 을 카탈로그 참조로 전환
  • 화면 미연결 + 레이어 위반 데모였던 ExampleApiUsageViewModel 삭제
  • CreateCombination VM 단위 테스트를 :feature:combination 으로 이동
  • Claude Code 운영 환경(.github 워크플로 / 루트 CLAUDE.md / .gitignore)이 본 브랜치에 함께 커밋됨

검증

  • ./gradlew :app:assembleDebug ✅ (clean·cached 모두 BUILD SUCCESSFUL, APK 생성)
  • ./gradlew testDebugUnitTest ✅ (전 모듈 통과)

📷𝘚𝘤𝘳𝘦𝘦𝘯𝘴𝘩𝘰𝘵

구조/빌드 변경이라 UI 스크린샷 없음 (런타임 동작 변화 없음).

💬𝘛𝘰 𝘙𝘦𝘷𝘪𝘦𝘸𝘦𝘳𝘴

- 프로젝트 구조를 단일 모듈에서 멀티 모듈(feature, core) 체제로 전환
- core 레이어 분리 및 모듈화:
    - **core:model**: 도메인 엔티티 및 공통 데이터 모델 이동
    - **core:domain**: Repository 인터페이스 정의 이동
    - **core:network**: Retrofit 서비스, DTO, Interceptor 등 통신 로직 이동
    - **core:data**: Repository 구현체 및 Mapper 로직 이동
    - **core:designsystem**: 공통 UI 컴포넌트, 테마(Color, Type, Theme), 리소스(폰트, 이미지) 이동
    - **core:datastore**: TokenManager 등 로컬 저장소 로직 이동
- feature 레이어 분리 및 모듈화:
    - 기능 단위로 모듈 분리 (auth, home, combination, profile, onboarding)
    - 각 모듈로 Screen, ViewModel, 기능 전용 컴포넌트 이동
- 모듈화에 따른 패키지 경로 수정 및 Import 문 최적화
- 더 이상 사용하지 않는 Swagger API 예제 코드(ExampleApiUsageViewModel) 삭제
- 프로젝트 구조를 `core` 및 `feature` 계층으로 분리하여 멀티 모듈 아키텍처 도입
- 공통 빌드 로직 관리를 위한 `build-logic` 도입 및 컨벤션 플러그인(Application, Library, Feature, Hilt 등) 구현
- 레이어별 핵심 모듈 생성: `:core:model`, `:core:domain`, `:core:data`, `:core:network`, `:core:designsystem`, `:core:datastore`
- 기능별 피처 모듈 생성: `:feature:auth`, `:feature:home`, `:feature:combination`, `:feature:onboarding`, `:feature:profile`
- `app` 모듈의 비대해진 `build.gradle.kts` 설정을 모듈별로 분산하고 의존성 구조 최적화
- 모듈화에 따른 패키지 이동 및 관련 소스코드 임포트 경로 일괄 수정
- 프로젝트 전체 SDK 버전을 36(Android 15)으로 상향 조정 및 Java 17 설정 적용
- 프로젝트 전반에 ktlint 스타일(android_studio) 적용 및 대규모 코드 포맷팅 수행
- GitHub Actions CI 환경에서 google-services.json stub 생성 로직 추가 (Secret 의존성 제거)
- TokenManager에 JWT Payload에서 userId를 추출하는 기능 구현 및 Repository 연동
- AuthInterceptor의 토큰 재발급(Reissue) 및 401 Unauthorized 에러 처리 로직 개선
- 레시피 등록/수정/삭제 시 실제 API 호출 및 이미지 Base64 인코딩 처리 로직 추가
- Navigation 및 Scaffold 하단 바 노출 조건 정교화 (로그인, 등록, 상세 페이지 등)
- Repository 및 ViewModel 내 Mock API 처리와 실제 서버 API 호출 로직 정비
- Compose UI 컴포넌트 내 불필요한 import 정리 및 스타일 가이드 준수
- Gradle 버전을 9.4.1로, AGP를 9.2.1로 업그레이드
- Kotlin 버전을 2.3.21로 업데이트 및 관련 KSP 버전 조정
- AGP 9 대응을 위해 build-logic의 `CommonExtension` 설정을 Application과 Library 타입별로 분리 및 리팩터링
- SDK 설정 방식을 AGP 9에서 권장하는 블록 형식(`version = release(36)`)으로 변경
- Foojay 툴체인 리졸버 플러그인 추가 및 JVM 도구 모음(toolchain) 설정 도입
- Compose BOM(2026.05.01), Retrofit(3.0.0), Hilt(2.59.2) 등 주요 의존성 라이브러리 대폭 업데이트
- `gradle.properties`에 AGP 및 빌드 성능 관련 최신 플래그 추가
@OnlyReadOneBook
OnlyReadOneBook merged commit 47abd33 into main May 31, 2026
3 checks passed
@OnlyReadOneBook
OnlyReadOneBook deleted the feat/24 branch May 31, 2026 09:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor: 단일 :app 모듈을 피처+코어 멀티모듈 구조로 전환 (NIA 스타일)

1 participant