Skip to content

domain·core:model 을 순수 JVM 모듈로 — 레이어 경계를 테스트 아닌 타입으로 강제 (#1150 상위안) #1151

Closed

Description

@OnlyReadOneBook

📜 Overview (Required)

domain 모듈이 afternote.android.domain → afternote.android.library 기반이라 안드로이드 SDK 가 클래스패스에 있습니다. 그래서 import android.net.Uri 가 컴파일됩니다. #1150 이 konsist 테스트로 막자는 것이고, 이 이슈는 타입 시스템으로 막자는 쪽입니다 — JVM 모듈이면 애초에 컴파일이 안 됩니다.

실측 — 생각보다 가깝습니다

항목 실측
domain 7개 모듈의 android.* 임포트 0건
domain 의 androidx.* 임포트 androidx.paging.PagingData 4건
domain 이 쓰는 DI javax.inject.Inject 4건 + @Singleton 1건 — Hilt 플러그인 불필요 (생성자 주입은 :app 의 KSP 가 처리)
core:model 소스 4파일, android.* 임포트 0건
순수 JVM 선례 konsist 모듈 (java-library + kotlin.jvm)

순서가 강제됩니다

java-library 모듈은 android-library 를 의존할 수 없습니다. domain 이 :core:model 을 물고 있고 그게 android-library 라, core:model 이 먼저 가야 합니다.

core:model (android.library + hilt)  ← 먼저 JVM 으로
  └ core:domain
      └ feature/{afternote,receiver,timeletter,mindrecord,setting,onboarding}/domain

반대로 core:model 을 의존하는 11개 모듈(presentation·data·app)은 그대로 둡니다 — 안드로이드 모듈이 JVM 모듈을 의존하는 건 정상입니다.

🚀 해야할 일

  • core:model → java-library + kotlin.jvm. Hilt 플러그인 제거 (쓰는 곳 확인 후)
  • AndroidDomainConventionPlugin → JVM 판 컨벤션 플러그인 신설. afternote.android.hilt 대신 javax.inject 만 물린다
  • domain 7개 모듈 전환
  • androidx.paging:paging-common 이 jvm 변종으로 해석되는지 확인 — 현재는 paging-common.aar(KMP 의 android 타깃)로 붙고 있고, 그 안에 android.util.Log 사용처가 1곳 있다. JVM 모듈에선 jvm 변종이 붙어야 한다
  • namespace / AndroidManifest 제거, testDebugUnitTest → test 로 바뀌는 태스크 이름을 CI·kover 설정에서 갱신
  • :koverXmlReportCi 집계 대상에서 빠지지 않는지 확인

📍 왜 지금이 아닌가 (판단)

#1150 을 먼저 넣고, 이건 나중에. 근거:

즉 가치는 있지만 급하지 않고, 급한 쪽(#1150)이 훨씬 싸다.

📍 Note

Activity

  1. OnlyReadOneBook commented on Aug 27, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    도메인 소유권과 독립 머지 가능성을 기준으로 #1151을 분리했습니다.

    #1307은 기존 afternote.android.domain을 유지하며 타 담당 도메인 파일을 변경하지 않습니다. #1151은 세 후속 이슈가 완료될 때까지 우산 이슈로 열어 둡니다.

  2. changed the title [-]refactor(core): domain·core:model 을 순수 JVM 모듈로 — 레이어 경계를 테스트 아닌 타입으로 강제 (#1150 상위안)[/-] [+]domain·core:model 을 순수 JVM 모듈로 — 레이어 경계를 테스트 아닌 타입으로 강제 (#1150 상위안)[/+] on Aug 28, 2026
  3. added
    refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
    area:core공용 코어·네트워크 기능 영역
    and removed
    enhancementNew feature or request
    on Aug 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:core공용 코어·네트워크 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions