본문 바로가기

카테고리 없음

Android 멀티 모듈 도입기

반응형

신규 프로젝트를 하면서 화면 UI는 전체 컴포즈, 그리고 모듈은 멀티모듈로 작업했습니다.

기존의 프로젝트에서 멀티모듈을 제대로 활용하지 못하고 있었는데요.

그래서 이번 프로젝트는 멀티모듈을 잘 도입하고자 했습니다.

1. ✅ 왜 멀티 모듈을 도입했는가?

  • 기존 문제점
    • 단일 모듈 구조에서 빌드 시간이 너무 길어짐
    • 기능이 많아지면서 의존성 관리가 어려움
    • 코드 변경이 전체 앱에 영향을 미침 (작은 수정 → 전체 리빌드)
    • 협업 중 충돌 발생 확률 증가
  • 도입 목적
    • 빌드 시간 단축
    • 기능 별로 독립적인 개발 및 테스트 가능
    • 책임 영역 명확화 (도메인 별로 나누기)
    • 병렬 개발과 CI/CD 효율화

2. 🧩 모듈 구조 어떻게 나눴는가?

  • 기본 구조 예시
app/               # 엔트리포인트 (presentation)
core/              # 공통 모듈
  └ util/
  └ design/
  └ network/
feature/           # 기능 단위 모듈
  └ login/
  └ home/
  └ player/
domain/            # usecase, model 등 비즈니스 로직
data/              # repository, API, DB

의존성 방향

  • app → feature-*, core-*
  • feature-* → domain, core-*
  • domain → data
  • 단방향 의존성 유지 (Acyclic)

3. 🛠 도입 과정에서 부딪힌 문제들

  • 의존성 순환 문제
    • 잘못된 의존성 추가로 순환 참조 발생
    • 해결: 모듈 간 관계 명확히 하고, interface로 의존성 역전
    • 문제는 보통 한 모듈이 너무 커서 발생하는 것으로 모듈이 더 작게 나눠서 해결
  • 모듈 나누는 기준 고민
    • 화면 단위? 기능 단위? 팀 단위?
    • 일단은 큰 기능 기준으로 나누고 리팩토링 중
    • 공통적으로 쓸 수 있는 화면은 또 별도의 feature:화면 으로 모듈 생성 중
  • 빌드 스크립트 중복
    • 공통 build.gradle.kts 추출해서 build-logic으로 정리

4. ⏱ 도입 후 효과

  • 빌드 시간 단축!! -> 병렬로 돌면서 엄청 빨리 끝남!!
  • 커플링이 없는 코드를 개발하게 프로그램적으로 막힌 느낌!

5. ✨ 팁 & 배운 점

  • 모듈은 작게 시작해서, 점차 쪼개도 됨 (Big Bang 금지)
  • feature 모듈은 항상 interface 레이어를 만들고, 구현과 분리하면 나중에 DI나 테스트가 편해짐
  • core는 쓰다 보면 덩어리가 커지기 쉬우니, 진짜 공통만 넣거나 아니면 진짜 더 쪼갤 수 있는 방법이 없는지 고민해봐야함
  • Gradle의 configuration caching 적극 활용

https://developer.android.com/topic/modularization?hl=ko

반응형