Conversation
- datastore 모듈 생성 - designsystem 모듈 생성 - network 모듈 생성
- Android Application, Library, Compose, Hilt, Kotlin JVM Convention 플러그인 추가 - 각 플러그인에 대한 기본 설정 및 의존성 추가 - build-logic 모듈에 Convention 플러그인 등록 - 버전 카탈로그에 Convention 플러그인 등록
- 기존 빌드 스크립트 파일에서 중복된 설정 conventions 플러그인으로 분리 - 각 모듈에 필요한 의존성 정의 및 불필요한 의존성 제거 - 테스트 관련 기본 파일 삭제
- 기본 화면(로그인, 홈) 추가 - 임시 네비게이션 로직 구현
- 앱이름 빛나길로 변경 - 인터넷 권한 추가 - domain 모듈 model 패키지 임시 파일 추가
|
""" Walkthrough프로젝트가 멀티모듈 구조로 대대적으로 리팩토링되었습니다. app, core, domain, presentation 등 여러 모듈이 생성되었으며, 각 모듈별 Gradle 설정과 디렉터리, 예제 코드, 기본 리소스, ProGuard 설정 등이 추가되었습니다. build-logic 디렉터리에는 커스텀 Gradle 플러그인과 공통 빌드 설정이 구현되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant App as MainActivity
participant DI as Hilt
participant UI as MainScreen
participant Nav as MainNavHost
participant Login as LoginScreen
participant Home as HomeScreen
App->>DI: @AndroidEntryPoint로 Hilt DI 적용
App->>UI: setContent { MainScreen() }
UI->>Nav: MainNavHost(navigator)
Nav->>Login: Route.Login 진입 시 LoginScreen(onLoginClick)
Login->>Nav: onLoginClick() 호출 시 Route.Home로 이동
Nav->>Home: Route.Home 진입 시 HomeScreen()
Assessment against linked issues
Assessment against linked issues: Out-of-scope changes해당 변경사항에서 이슈 요구사항과 무관한 변경은 발견되지 않았습니다. Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms (1)
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 10
♻️ Duplicate comments (2)
core/network/.gitignore (1)
1-1: 중복: .gitignore 디렉터리 패턴 개선 제안domain 모듈과 동일하게
/build대신/build/로 디렉터리 무시를 명시하는 것이 좋습니다.
(위 domain/.gitignore에서 제안한 내용과 동일합니다.)core/datastore/src/main/AndroidManifest.xml (1)
1-4: 중복: AndroidManifest namespace 설정 검증data 모듈과 동일하게, 빌드 스크립트에서 해당 라이브러리 모듈의
namespace가 제대로 선언되었는지 확인해야 합니다.
[data/src/main/AndroidManifest.xml에서 제안된 내용과 동일합니다.]
🧹 Nitpick comments (26)
domain/.gitignore (1)
1-1: .gitignore 디렉터리 패턴 명시성 강화 제안현재
/build로 디렉터리를 무시하고 있는데,/build/처럼 뒤에 슬래시를 추가해 디렉터리만 명시적으로 무시하도록 하면 가독성이 높아집니다.data/src/main/AndroidManifest.xml (1)
1-4: AndroidManifest 최소 구조 확인 및 namespace 설정 검증 제안빈
<manifest>만 정의된 최소 구조는 적절하지만, 빌드 스크립트(build.gradle.kts)에서 해당 모듈의namespace(또는package)가 올바르게 설정되었는지 확인하세요.build-logic/settings.gradle.kts (2)
1-12: 버전 카탈로그 파일 경로가 하드코딩돼 있어 재배포·별도 저장소 사용 시 깨질 위험이 있습니다
from(files("../gradle/libs.versions.toml"))같은 상대 경로는 루트 위치가 바뀌면 곧바로 실패합니다.
rootDir.resolve("gradle/libs.versions.toml")형태로 명시적 절대 경로를 사용하거나,settings.gradle.kts(루트)의 카탈로그를 그대로 재사용하는 방식(Composite build 의존)으로 변경하면 안정성이 올라갑니다.
14-15: 프로젝트 이름 중복 가능성 검토
루트 빌드와 동일한 네이밍(build-logic)이 겹치면 IDE 표시나 Gradle task path가 헷갈릴 수 있습니다. 내부 전용 서브-빌드라면bitnagil-build-logic등으로 구분해 두는 편이 추후 유지보수 시 편리합니다.gradle/libs.versions.toml (1)
168-185: 커스텀 플러그인 버전을unspecified로 두면 의존성 캐시가 매번 초기화됩니다
version = "unspecified"는 Gradle가 캐싱을 건너뛰도록 만듭니다.
version = "${project.version}"혹은convention모듈의 version을1.0.0-SNAPSHOT형태로 정의해서 캐싱 이점을 누리세요.build-logic/convention/build.gradle.kts (1)
23-50: 플러그인 marker-artifact 퍼블리싱 설정 누락
gradlePlugin { plugins { … } }선언만으로는 플러그인 id -> impl 클래스 매핑 JAR(marker)가 로컬 maven repo에 퍼블리시되지 않습니다.
다중 모듈이 독립적으로 플러그인을 적용할 때pluginBundle { … }혹은publishing {}블록으로 marker artifact를 배포하도록 설정해야 CI 캐시가 깨지지 않습니다.build-logic/convention/.gitignore (1)
1-1: 빌드 아티팩트 무시 목록 확장 제안
현재/build디렉토리만 무시되고 있습니다. Gradle 플러그인 프로젝트에서는.gradle/,*.iml,.idea/등 추가 빌드/IDE 아티팩트를 함께 무시하는 것이 좋습니다.+ .gradle/ + *.iml + .idea/domain/build.gradle.kts (1)
5-7: 테스트 의존성 추가 고려
현재domain모듈에 단위 테스트 설정이 없습니다. 필요 시testImplementation(kotlin("test"))또는 JUnit 의존성을 추가해 보세요.presentation/src/main/AndroidManifest.xml (1)
1-4: 빈 매니페스트 파일 유지 필요성 검토
Android 라이브러리 모듈에서는build.gradle.kts의namespace설정만으로 네임스페이스가 정의됩니다. 해당 빈 매니페스트가 불필요하다면 파일 제거를 고려하세요.core/network/src/main/AndroidManifest.xml (1)
1-4: 빈 매니페스트 파일 정리 제안
라이브러리 모듈의 경우build.gradle.kts에서namespace를 정의하면 별도package속성이 없어도 동작합니다. 내용이 없다면 매니페스트 파일을 제거해도 무방합니다.core/network/build.gradle.kts (1)
11-13: 의존성 블록 문서화 제안
현재 빈dependencies {}블록인데, 네트워크 모듈에는 Retrofit, Ktor 등 HTTP 클라이언트 라이브러리 의존성이 필요할 것입니다. TODO나 주석으로 향후 추가 계획을 남겨두세요.core/datastore/build.gradle.kts (1)
11-13: 테스트 의존성 추가 제안
androidx.datastore외에도 DataStore 로직 검증을 위한kotlinx-coroutines-test나junit테스트 의존성을 추가하면 유닛 테스트 작성이 수월해집니다.core/designsystem/build.gradle.kts (1)
10-11: 디펜던시 블록 문서화 제안
현재 빈dependencies블록이지만, 디자인 시스템 모듈에는 Compose Material, Foundation 등의 API 의존성이 필요합니다. TODO 주석이나 실제 의존성 추가 일정을 남겨두세요.app/src/main/java/com/threegap/bitnagil/BitnagilApplication.kt (1)
1-11: Hilt 애플리케이션 클래스 설정 적절
@HiltAndroidApp을 통한 Hilt 초기화가 올바르게 적용되었습니다. 추가 초기화 로직(예: 로깅, Crashlytics 등)이 필요하다면onCreate에 구현해주세요.core/network/proguard-rules.pro (1)
1-21: ProGuard 규칙 템플릿 확인
현재 모든 규칙이 주석 처리되어 있어 실제로 적용되는 룰이 없습니다. 모듈의build.gradle.kts에consumerProguardFiles("proguard-rules.pro")를 추가하고, 필요한-keep룰을 활성화해 최적화 및 난독화를 설정하세요.data/proguard-rules.pro (1)
1-21: ProGuard 규칙 템플릿 확인
템플릿으로 추가된 ProGuard 파일이지만, 모든 규칙이 주석 처리되어 있어 적용되지 않습니다.build.gradle.kts에consumerProguardFiles("proguard-rules.pro")설정을 확인하고, 필요한 룰을 주석 해제해 주세요.core/designsystem/proguard-rules.pro (1)
1-21: ProGuard 규칙 템플릿 확인
현재 모든 규칙이 주석 처리되어 실제로 적용되지 않습니다. 모듈 빌드 스크립트에consumerProguardFiles("proguard-rules.pro")를 추가하고, 디자인 시스템에 필요한-keep규칙을 활성화해주세요.build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidComposePlugin.kt (1)
10-17: Android Library 플러그인 의존성 명시가 필요할 수 있습니다본 플러그인은
com.android.library를 적용하지 않고LibraryExtension을 바로 구성합니다.
모듈 쪽에서bitnagil.android.library와bitnagil.android.compose.library둘 다를 적용한다면 문제없지만, 실수로 compose 플러그인만 적용했을 때 NPE 가 발생합니다.안전 장치를 위해 다음과 같이 라이브러리 플러그인 적용을 보장하는 코드 추가를 고려해 주세요:
pluginManager.withPlugin("com.android.library") { extensions.configure<LibraryExtension> { configureComposeAndroid(this) } }build.gradle.kts (1)
14-18: ktlint 플러그인 root 프로젝트 적용은 과도할 수 있습니다
allprojects { … }블록으로 인해 루트(=aggregate) 프로젝트에도ktlint플러그인이 적용됩니다. 루트에서 소스가 없으면 불필요한 task 생성만 늘어나고 CI 시간이 증가할 수 있습니다. 기존처럼subprojects로 제한하거나rootProject.name == "Bitnagil"등의 가드 조건을 추가하는 편이 권장됩니다.build-logic/convention/src/main/java/com/threegap/bitnagil/convention/KotlinJvmPlugin.kt (1)
10-27: 중첩with(target)블록은 불필요 – 간결화 가능
apply()내부에서 두 번의with(target)을 사용하고 있어 가독성이 떨어집니다. 아래처럼 한 번으로 줄이면 동일한 효과를 얻습니다.- override fun apply(target: Project): Unit = with(target) { - with(target) { - pluginManager.apply { - apply("java-library") - apply("org.jetbrains.kotlin.jvm") - } - } + override fun apply(target: Project): Unit = with(target) { + pluginManager.apply { + apply("java-library") + apply("org.jetbrains.kotlin.jvm") + } ... }app/src/main/java/com/threegap/bitnagil/MainNavHost.kt (1)
20-28: 로그인 화면 뒤로가기 스택 정리 필요
navController.navigate(Route.Home)만 호출하면Login→Home이동 후 백 버튼 누를 때 다시Login으로 돌아갑니다. 로그인 성공 시 스택을 비워야 한다면popUpTo옵션을 추가하세요.navigator.navController.navigate(Route.Home) { popUpTo(navigator.startDestination) { inclusive = true } }build-logic/convention/src/main/java/com/threegap/bitnagil/convention/HiltPlugin.kt (1)
11-20: 버전 카탈로그에 정의된 플러그인-ID 사용 고려
pluginManager.apply { … }에서 문자열 리터럴 대신libs.findPlugin("hilt.android").get().get().pluginId형태로 버전 카탈로그의 플러그인-ID를 사용하면 의존성 관리 일관성이 높아집니다. 동일하게 라이브러리·KSP 의존성 선언도add("implementation", …)형태로 통일하면 가독성이 조금 더 좋아집니다.build-logic/convention/src/main/java/com/threegap/bitnagil/convention/extension/KotlinCoroutine.kt (1)
12-15: Coroutine 테스트 의존성도 함께 추가 검토프로덕션 코드용
implementation번들만 추가되어 있습니다. 모듈 전반에서 코루틴 테스트 유틸(kotlinx-coroutines-test) 사용 가능성을 고려해 아래 항목도 포함하면 실용적입니다.dependencies { "implementation"(libs.findBundle("coroutine").get()) + "testImplementation"(libs.findLibrary("kotlinx.coroutines.test").get()) }app/src/main/java/com/threegap/bitnagil/MainNavigator.kt (1)
8-18:MainNavigator객체에 안정성 어노테이션 추가 제안Compose Recomposition 시 객체 안정성을 명시하기 위해
@Stable(또는@Immutable)을 클래스 위에 선언하면 성능 이점이 있습니다.-class MainNavigator( +@Stable +class MainNavigator( val navController: NavHostController, ) {build-logic/convention/src/main/java/com/threegap/bitnagil/convention/extension/KotlinAndroid.kt (2)
9-9: 사용되지 않는 import 제거 권장
org.gradle.kotlin.dsl.provideDelegate는 본 파일에서 사용되지 않습니다. 정리하여 가독성을 높여 주세요.
50-62:warningsAsErrors처리 로직 재검토 필요
val warningsAsErrors: String? by project가 null 일 경우toBoolean()은false를 반환합니다.
프로퍼티가 정의되지 않았을 때 기본값을 명시적으로 처리하거나, 타입 안정성을 위해getOrElse("false").toBoolean()과 같이 설정값을 캐싱하는 방법을 고려해 주세요.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (53)
app/build.gradle.kts(1 hunks)app/src/androidTest/java/com/threegap/bitnagil/ExampleInstrumentedTest.kt(0 hunks)app/src/main/AndroidManifest.xml(1 hunks)app/src/main/java/com/threegap/bitnagil/BitnagilApplication.kt(1 hunks)app/src/main/java/com/threegap/bitnagil/MainActivity.kt(1 hunks)app/src/main/java/com/threegap/bitnagil/MainNavHost.kt(1 hunks)app/src/main/java/com/threegap/bitnagil/MainNavigator.kt(1 hunks)app/src/main/java/com/threegap/bitnagil/MainScreen.kt(1 hunks)app/src/main/java/com/threegap/bitnagil/Route.kt(1 hunks)app/src/main/res/values/strings.xml(1 hunks)app/src/test/java/com/threegap/bitnagil/ExampleUnitTest.kt(0 hunks)build-logic/convention/.gitignore(1 hunks)build-logic/convention/build.gradle.kts(1 hunks)build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidApplicationPlugin.kt(1 hunks)build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidComposePlugin.kt(1 hunks)build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidLibraryPlugin.kt(1 hunks)build-logic/convention/src/main/java/com/threegap/bitnagil/convention/HiltPlugin.kt(1 hunks)build-logic/convention/src/main/java/com/threegap/bitnagil/convention/KotlinJvmPlugin.kt(1 hunks)build-logic/convention/src/main/java/com/threegap/bitnagil/convention/extension/ComposeAndroid.kt(1 hunks)build-logic/convention/src/main/java/com/threegap/bitnagil/convention/extension/KotlinAndroid.kt(1 hunks)build-logic/convention/src/main/java/com/threegap/bitnagil/convention/extension/KotlinCoroutine.kt(1 hunks)build-logic/gradle.properties(1 hunks)build-logic/settings.gradle.kts(1 hunks)build.gradle.kts(1 hunks)core/datastore/.gitignore(1 hunks)core/datastore/build.gradle.kts(1 hunks)core/datastore/proguard-rules.pro(1 hunks)core/datastore/src/main/AndroidManifest.xml(1 hunks)core/designsystem/.gitignore(1 hunks)core/designsystem/build.gradle.kts(1 hunks)core/designsystem/proguard-rules.pro(1 hunks)core/designsystem/src/main/AndroidManifest.xml(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/Color.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/Theme.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/Type.kt(1 hunks)core/network/.gitignore(1 hunks)core/network/build.gradle.kts(1 hunks)core/network/proguard-rules.pro(1 hunks)core/network/src/main/AndroidManifest.xml(1 hunks)data/.gitignore(1 hunks)data/build.gradle.kts(1 hunks)data/proguard-rules.pro(1 hunks)data/src/main/AndroidManifest.xml(1 hunks)domain/.gitignore(1 hunks)domain/build.gradle.kts(1 hunks)gradle/libs.versions.toml(1 hunks)presentation/.gitignore(1 hunks)presentation/build.gradle.kts(1 hunks)presentation/proguard-rules.pro(1 hunks)presentation/src/main/AndroidManifest.xml(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeScreen.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/login/LoginScreen.kt(1 hunks)settings.gradle.kts(3 hunks)
💤 Files with no reviewable changes (2)
- app/src/test/java/com/threegap/bitnagil/ExampleUnitTest.kt
- app/src/androidTest/java/com/threegap/bitnagil/ExampleInstrumentedTest.kt
🧰 Additional context used
🧬 Code Graph Analysis (8)
build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidApplicationPlugin.kt (3)
build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidLibraryPlugin.kt (2)
apply(10-22)apply(11-21)build-logic/convention/src/main/java/com/threegap/bitnagil/convention/extension/KotlinAndroid.kt (1)
configureKotlinAndroid(13-64)build-logic/convention/src/main/java/com/threegap/bitnagil/convention/extension/ComposeAndroid.kt (1)
configureComposeAndroid(10-29)
build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidLibraryPlugin.kt (2)
build-logic/convention/src/main/java/com/threegap/bitnagil/convention/extension/KotlinAndroid.kt (1)
configureKotlinAndroid(13-64)build-logic/convention/src/main/java/com/threegap/bitnagil/convention/extension/KotlinCoroutine.kt (1)
configureKotlinCoroutine(9-17)
presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeScreen.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/Theme.kt (1)
BitnagilTheme(27-50)
app/src/main/java/com/threegap/bitnagil/MainScreen.kt (2)
app/src/main/java/com/threegap/bitnagil/MainNavigator.kt (1)
rememberMainNavigator(14-18)app/src/main/java/com/threegap/bitnagil/MainNavHost.kt (1)
MainNavHost(10-30)
build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidComposePlugin.kt (3)
build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidLibraryPlugin.kt (2)
apply(10-22)apply(11-21)build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidApplicationPlugin.kt (2)
apply(12-31)apply(13-30)build-logic/convention/src/main/java/com/threegap/bitnagil/convention/extension/ComposeAndroid.kt (1)
configureComposeAndroid(10-29)
app/src/main/java/com/threegap/bitnagil/MainActivity.kt (2)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/Theme.kt (1)
BitnagilTheme(27-50)app/src/main/java/com/threegap/bitnagil/MainScreen.kt (1)
MainScreen(9-22)
app/src/main/java/com/threegap/bitnagil/MainNavHost.kt (2)
presentation/src/main/java/com/threegap/bitnagil/presentation/login/LoginScreen.kt (1)
LoginScreen(19-42)presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeScreen.kt (1)
HomeScreen(15-27)
presentation/src/main/java/com/threegap/bitnagil/presentation/login/LoginScreen.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/Theme.kt (1)
BitnagilTheme(27-50)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: build
🔇 Additional comments (32)
core/datastore/.gitignore (1)
1-1:.gitignore에/build디렉터리 무시 설정이 추가되었습니다.모듈 빌드 산출물을 제외하기 위한 올바른 설정이며, 다른 모듈과 일관성이 유지됩니다.
build-logic/gradle.properties (1)
1-3: Gradle 설정 호환성 검증 요청
org.gradle.configureondemand=true설정은 Gradle 버전 7.x 이상에서 deprecated 되었거나 제거될 수 있습니다. 현재 프로젝트의 Gradle 버전에서 이 옵션이 유효한지 확인해 주세요.build-logic/convention/src/main/java/com/threegap/bitnagil/convention/extension/ComposeAndroid.kt (1)
18-20: 컴파일러 플러그인 옵션의 Gradle 버전 호환성 확인 필요
includeSourceInformation옵션은 Kotlin 2.x + Compose Compiler 1.5 이상에서만 동작합니다. 팀원 IDE 또는 CI가 구버전을 사용하면 빌드 실패할 수 있으니 최소 버전을 명시·검증해 주세요.gradle/libs.versions.toml (1)
3-6: compileSdk / targetSdk 35는 정식 릴리스 전 버전일 가능성이 높습니다
AGP 8.1x 라인에서는 Android 35 Preview SDK를 공식 지원하지 않습니다. CI 이미지나 팀원 로컬에서 빌드가 깨질 수 있으니, 안정 버전(34)로 고정하거나 Canary AGP로 올릴지 결정이 필요합니다.core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/Type.kt (1)
1-1: 패키지 변경 👍
모듈 분리에 맞춰designsystem패키지로 이동된 점 확인했습니다. 다른 소스에서의 import 수정도 함께 이루어졌는지 점검만 해 주세요.core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/Theme.kt (1)
1-1: 패키지 선언이 모듈 구조와 일치하는지 확인
기존ui.theme에서designsystem으로 변경된 패키지가 새로운 모듈 설정과 완전히 일치하는지, 해당 파일을 참조하는 모든 import 구문이 올바르게 갱신되었는지 점검이 필요합니다.core/designsystem/.gitignore (1)
1-1: Git ignore에 build 디렉터리 제외 추가
/build디렉터리를 버전 관리에서 제외하도록 설정하여 다른 모듈과 일관성을 유지하고 있습니다.core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/Color.kt (1)
1-1: 컬러 리소스 패키지 변경 확인
com.threegap.bitnagil.designsystem으로 업데이트된 패키지가 core/designsystem 모듈 정의와 일치하는지, 참조 코드의 import 구문이 모두 갱신되었는지 확인해주세요.data/.gitignore (1)
1-1: data 모듈 Git ignore 설정
/build디렉터리를 제외하도록 구성하여 버전 관리 대상에서 빌드 산출물이 배제됩니다. 프로젝트 전반과 일관됩니다.presentation/.gitignore (1)
1-1: presentation 모듈 Git ignore 설정
/build디렉터리를 버전 관리에서 제외하여 모듈 간 ignore 규칙을 일관되게 적용했습니다.app/src/main/res/values/strings.xml (1)
2-2: 다국어 로케일 대응 확인 필요
앱 이름을 한국어빛나길로 변경하셨습니다. 기본 리소스 외에 영어(values-en) 등 다른 로케일을 지원해야 하는지 검토해보세요.domain/build.gradle.kts (1)
1-3: Kotlin 플러그인 alias 검증 요청
alias(libs.plugins.bitnagil.kotlin)이 version catalog 및 custom convention에 정의된 올바른 Kotlin JVM 플러그인인지 확인해주세요.core/designsystem/src/main/AndroidManifest.xml (1)
1-4: 라이브러리 모듈 매니페스트 구조 확인
빈<manifest>만으로 라이브러리 모듈의 기본 구성이 충족됩니다. 추가 권한 선언이나 명시적package속성이 필요한지 컨벤션 플러그인 정의에서 확인해주세요.core/network/build.gradle.kts (1)
1-5: 플러그인 적용 및 컨벤션 검토
bitnagil.android.library,bitnagil.android.hilt,kotlin.serialization플러그인 적용 순서가 적절합니다. 이 컨벤션 플러그인들이compileSdk,minSdk,targetSdk및 Hilt/KSP 설정을 모두 포함하는지 빌드-로직에서 확인해주세요.core/datastore/build.gradle.kts (1)
1-5: DataStore 플러그인 구성 검토
android.library,android.hilt,kotlin.serialization플러그인 적용이 보입니다. Preferences DataStore 사용 시에는kotlin.serialization이 필요 없을 수 있으니 컨벤션 플러그인 정의를 통해 실제 사용 시 타입(Preferences vs. Proto)에 맞춰 설정되는지 확인하세요.core/designsystem/build.gradle.kts (1)
1-4: Compose 라이브러리 컨벤션 검토
bitnagil.android.library와bitnagil.android.compose.library플러그인 적용이 적절합니다. 컨벤션 플러그인에 Compose UI, Material, Foundation 등의 기본 의존성이 포함되는지 빌드-로직에서 확인해주세요.app/src/main/AndroidManifest.xml (2)
5-5: INTERNET 권한 추가
네트워크 호출을 위해android.permission.INTERNET권한이 올바르게 추가되었습니다.
8-8: 커스텀 Application 클래스 등록
BitnagilApplication이<application>태그에 등록되어 Hilt 초기화가 가능해졌습니다.presentation/build.gradle.kts (3)
1-4: 컨벤션 플러그인 적용
bitnagil.android.library와bitnagil.android.compose.library플러그인을 일관되게 적용한 점이 좋습니다.
6-8: Android 네임스페이스 설정 확인
namespace = "com.threegap.bitnagil.presentation"이 올바르게 설정되어 컴파일 구성과 일치합니다.
10-15: Presentation 모듈 의존성 검토
UI 계층에서 도메인(projects.domain)이나 데이터(projects.data) 모듈을 참조한다면, 해당 의존성을 추가해야 합니다. 사용 여부를 확인하고 필요한 경우implementation(projects.domain)등을 선언해주세요.data/build.gradle.kts (1)
14-18: 의존성 BOM 정합성 확인 필요
okhttp.bom과retrofit.bom을 동시에 사용하면 내부적으로okhttp버전이 두 번 정의됩니다(한 번은 OkHttp BOM, 한 번은 Retrofit BOM 내부). 버전 충돌은 없겠지만 Gradle 경고가 발생할 수 있으니retrofit2:retrofit-bom만 사용하거나enforcedPlatform으로 명시적으로 조정할지 검토하세요.core/datastore/proguard-rules.pro (1)
1-21: 템플릿 파일 추가 확인프로가드 규칙이 모두 주석 처리된 템플릿이므로 빌드에 영향은 없습니다. 추후 실제 난독화 규칙이 필요할 때 이 파일을 업데이트하면 됩니다.
presentation/proguard-rules.pro (1)
1-21: 템플릿 파일 추가 확인
presentation모듈도 동일한 프로가드 템플릿이 추가되었습니다. 현재 상태로는 문제 없습니다.build.gradle.kts (1)
4-11: 플러그인 alias 선언 누락 여부 확인 필요
libs.versions.toml에 새로 추가된android.library,compose.compiler,kotlin.jvm,kotlin.serialization,ksp,hilt엔트리가 실제로 존재하는지 확인해 주세요. 누락되면 Gradle 동기화 단계에서 즉시 실패합니다.settings.gradle.kts (1)
1-4:enableFeaturePreview향후 제거 고려Gradle 8.7부터
TYPESAFE_PROJECT_ACCESSORS는 기본 활성화 예정으로 알려져 있습니다. 추후 버전 업 시 불필요한 프리뷰 호출이 경고로 바뀔 수 있으니 체크해 두세요.app/src/main/java/com/threegap/bitnagil/MainActivity.kt (1)
7-18:@AndroidEntryPoint적용 및 테마/네비게이션 연결 확인 완료Hilt 의존성 주입과 디자인 시스템 모듈 연동이 올바르게 적용되었습니다.
MainScreen()호출만으로 UI 루트를 위임한 점도 깔끔합니다. 별다른 문제 없어 보입니다.build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidLibraryPlugin.kt (1)
17-20: Android 라이브러리 플러그인 구성 확인 완료공통 Kotlin/Coroutine 설정을 한 곳에서 호출해 재사용성을 높였습니다. 별다른 문제 없이 동작할 것으로 보입니다.
build-logic/convention/src/main/java/com/threegap/bitnagil/convention/AndroidApplicationPlugin.kt (2)
14-18: Compose 플러그인 ID 확인 필요
org.jetbrains.kotlin.plugin.compose는 Kotlin 1.9+에서 제공되는 멀티플랫폼 Compose 플러그인입니다.
순수 Android Jetpack Compose만 사용한다면 불필요할 수 있으므로 실제 사용 의도를 다시 한 번 검증해 주세요.
24-28: 버전 정보 타입 불일치 가능성 점검
libs.findVersion("versionCode")·versionName을 version catalog의version타입으로 읽고 있습니다.
versionCode처럼 정수 값을 version catalog의 version으로 관리하면"1"→ Int 파싱이 필요합니다. toml에서int나number로 정의되었는지 확인해 주세요.app/build.gradle.kts (2)
1-5: Hilt 사용 시kapt플러그인 포함 여부 확인
bitnagil.android.hilt플러그인이kapt적용까지 대행한다면 문제없지만, 그렇지 않다면 별도로kapt플러그인을 추가해야 컴파일 에러를 방지할 수 있습니다.
15-22: 앱 모듈에서 UI 의존성 누락 여부 확인
현재 의존성이 내부 모듈로만 구성돼 있습니다. 만약 앱 모듈에서 직접 Jetpack Compose UI, Hilt, Accompanist 등을 사용한다면 BOM 및 라이브러리 의존성 추가가 필요합니다.
...-logic/convention/src/main/java/com/threegap/bitnagil/convention/extension/ComposeAndroid.kt
Show resolved
Hide resolved
There was a problem hiding this comment.
Actionable comments posted: 0
♻️ Duplicate comments (1)
app/src/main/java/com/threegap/bitnagil/MainScreen.kt (1)
10-13: 기존 컴파일 오류가 해결된 점 확인되었습니다
navigator기본값에서rememberMainNavigator()를 제거하여 @composable 컨텍스트 밖 호출 문제를 잘 해결하셨습니다.
🧹 Nitpick comments (1)
app/src/main/java/com/threegap/bitnagil/MainScreen.kt (1)
17-20: NavHost Modifier에 외부 Modifier를 함께 전달하는 것이 더 안전합니다현재
MainNavHost에Modifier.padding(innerPadding)만 전달되면서, 호출측에서MainScreen에 부여한modifier(예:testTag,semantics등)가 NavHost까지 전파되지 않습니다. 필요 시 다음과 같이 체이닝하여 외부 Modifier를 보존할 수 있습니다.- modifier = Modifier.padding(innerPadding), + modifier = modifier.padding(innerPadding),필요하다면 고려해 주세요.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
app/src/main/java/com/threegap/bitnagil/MainActivity.kt(1 hunks)app/src/main/java/com/threegap/bitnagil/MainScreen.kt(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- app/src/main/java/com/threegap/bitnagil/MainActivity.kt
🧰 Additional context used
🧬 Code Graph Analysis (1)
app/src/main/java/com/threegap/bitnagil/MainScreen.kt (1)
app/src/main/java/com/threegap/bitnagil/MainNavHost.kt (1)
MainNavHost(10-30)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: build
Docstrings generation was requested by @l5x5l. * #6 (comment) The following files were modified: * `presentation/src/main/java/com/threegap/bitnagil/presentation/common/mviviewmodel/MviViewModel.kt`
[ PR Content ]
Related issue
Screenshot 📸
-N/A
Work Description
To Reviewers 📢
Summary by CodeRabbit
새로운 기능
개선 및 변경
버그 수정
빌드/설정