-
Notifications
You must be signed in to change notification settings - Fork 0
Feature 및 라이브러리 모듈용 Convention Plugin을 추가합니다. #3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR introduces convention plugins to standardize and simplify the build configuration across the Android project. The changes aim to reduce boilerplate code and ensure consistent configuration across modules.
Key changes:
- Added new convention plugins (
tuk.android.library,tuk.feature,tuk.hilt) to standardize module configurations - Introduced utility functions for Hilt, Navigation, and Orbit setup
- Consolidated build configuration settings (buildConfig, packaging) into shared functions
Reviewed Changes
Copilot reviewed 19 out of 27 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| gradle/libs.versions.toml | Added KSP version and new convention plugin declarations |
| feature/*/build.gradle.kts | Simplified by replacing boilerplate with convention plugins |
| core/*/build.gradle.kts | Replaced standard Android library configuration with convention plugin |
| build-logic/convention/src/main/kotlin/*.kt | Added new convention plugins and configuration utilities |
| app/build.gradle.kts | Removed redundant plugin declarations |
| hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } | ||
| android-juni5 = { id = "de.mannodermaus.android-junit5", version.ref = "android-junit5" } | ||
| jetbrains-kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } | ||
| kotlin-ksp = { id = "com.google.devtools.ksp" , version.ref = "ksp"} |
Copilot
AI
Jul 17, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is an extra space before the comma in the plugin definition. It should be version.ref = "ksp"} without the space.
| kotlin-ksp = { id = "com.google.devtools.ksp" , version.ref = "ksp"} | |
| kotlin-ksp = { id = "com.google.devtools.ksp", version.ref = "ksp"} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code review by ChatGPT
| alias(libs.plugins.jetpack.compose.compiler) | ||
| alias(libs.plugins.tuk.android.application) | ||
| alias(libs.plugins.tuk.android.application.compose) | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 패치에서 몇 가지 문제가 있습니다.
-
플러그인 제외:
com.android.application,org.jetbrains.kotlin.android, 그리고jetpack.compose.compiler플러그인을 제외하는 것은 위험할 수 있습니다. 이 플러그인들은 Android 프로젝트에서 필수적일 수 있으며, 이러한 플러그인이 없으면 앱의 빌드 및 실행에 문제가 발생할 수 있습니다. -
의존성 관리: 새로운
tuk플러그인을 도입하는 이유와 그 유효성에 대한 명확한 설명이 없습니다.libs.plugins.tuk.android.application및libs.plugins.tuk.android.application.compose가 기존 플러그인보다 효과적인지, 어떤 추가 기능이나 이점이 있는지 검토해야 합니다. -
문서화 부족: 이런 변경사항은 다른 개발자에게 혼란을 줄 수 있습니다. 관련된 이유나 목적을 주석으로 추가하는 것이 좋습니다.
이러한 이유로 이 코드는 현재 상태로는 병합하기에 적절하지 않아 보입니다. 변경 사항에 대한 더 많은 정보와 확인이 필요합니다.
| implementationClass = "HiltConventionPlugin" | ||
| } | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 리뷰 요약
-
의존성 주의:
compileOnly(libs.ksp.gradle.plugin)를 추가했습니다. 이 의존성이 필요한지 확인해야 합니다. KSP(Kotlin Symbol Processing)가 프로젝트의 다른 부분에 영향을 미치거나 필요하지 않은 경우, 빌드 시 문제를 일으킬 수 있습니다. -
플러그인 등록의 일관성: 새로운 플러그인을 등록할 때, 각 플러그인에 대한 구현 클래스(
implementationClass)가 올바른지 및 존재하는지 확인해야 합니다. 특히,AndroidLibraryConventionPlugin,FeatureConventionPlugin,HiltConventionPlugin의 구현이 존재하고 제대로 정의되어 있는지 검토가 필요합니다. -
테스트 필요: 추가한 플러그인이 다양한 상황에서 잘 작동하는지 확인하기 위한 단위 테스트나 통합 테스트를 작성해야 합니다. 새로운 플러그인이 기존의 동작을 방해하지 않도록 하는 확인이 필요합니다.
-
문서화: 새로운 플러그인을 팀원이나 사용하는 개발자에게 알리기 위해 문서화가 필요합니다. 각 플러그인에 대한 설명과 사용 방법을 추가하는 것이 좋습니다.
-
코드 정리: 코드 스타일의 일관성을 유지하고, 필요하다면 적절한 주석을 추가하여 나중에 유지보수하는 데 도움이 되도록 해야 합니다.
총평: 위의 문제들을 검토 및 수정한 후에 머지를 진행해야 할 것으로 보입니다.
| pluginManager.apply("com.android.application") | ||
|
|
||
| extensions.configure<ApplicationExtension> { | ||
| configureAndroidCompose(this) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 패치는 몇 가지 잠재적인 문제와 개선 사항을 가지고 있습니다.
-
네이티브 객체 접근:
pluginManager를 사용할 때project를 명시적으로 다시 사용하는 대신 직접 참조하는 것은 노드 접근성을 저하시킬 수 있습니다. 이 경우는 문제가 없지만, 혼란을 줄 수 있으니 일관성을 유지하는 것이 좋습니다. -
예외 처리 부족:
pluginManager.apply메서드 호출에 오류가 발생할 경우, 이를 처리할 방법이 없습니다. 예외 처리를 추가하여 문제 진단을 용이하게 할 필요가 있습니다. -
주석 추가: 코드의 의도를 명확히 하기 위해,
configureAndroidCompose메서드의 목적과 사용 이유에 대한 주석을 추가하는 것이 좋습니다. 이는 코드 유지 관리에 도움을 줄 수 있습니다. -
테스트: 변경 사항에 대한 단위 테스트가 존재하는지 확인할 필요가 있습니다.
AndroidApplicationComposeConventionPlugin의 적용이 의도한 대로 작동하는지를 보장하기 위해 테스트를 작성해야 합니다.
이러한 이유로, 현재 코드 패치는 머지하기에 적합하지 않으며 추가적인 수정이 필요합니다.
| } | ||
|
|
||
| buildTypes { | ||
| getByName("release") { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 코드 패치에는 몇 가지 우려 사항이 있습니다:
-
함수 호출 누락:
configurePackaging()함수를 주석 처리하여 호출하지 않았습니다. 이 함수가 우리의 패키징 설정을 제대로 구성하는 데 필요한 경우, 주석 처리로 인해 애플리케이션의 빌드 또는 패키징 과정에서 문제가 발생할 수 있습니다. 따라서 이 함수가 필요 없는 경우에만 주석 처리했는지 확인해야 합니다. -
빌드 기능 누락:
buildFeatures블록 내의 코드가 삭제되었습니다. 이러한 변화를 통해 실제로 관련 기능이 비활성화되었는지 여부를 검토해야 합니다. 예를 들어,buildConfig의 값을true로 설정하지 않으면 빌드 구성 관련 문제가 발생할 수 있습니다. -
주석 처리 이유 불명확: 주석 처리한 이유가 코드의 다른 부분에 설명되어 있지 않습니다. 나중에 이 코드를 읽는 사람들에게 혼란을 줄 수 있습니다. 해당 변경 요청의 목적과 이유에 대한 명확한 설명을 주석으로 추가하는 것이 좋습니다.
-
안전성 확인 필요:
apply메소드에서 사용하는 플러그인이 올바르게 적용되었는지 확인해야 합니다. 만약 이 플러그인들이 실제로 필요 없다면, 제거해야 할 것입니다. 또한, 이 코드가 실행될 프로젝트에 대해 예상되는 영향도 확인해야 합니다.
이러한 문제를 해결한 후에 이 코드를 병합하는 것이 좋습니다.
| } | ||
| } | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 패치에는 몇 가지 잠재적인 버그와 개선 사항이 있습니다.
-
의존성 확인:
configureKotlinAndroid(this)메소드가LibraryExtension객체에 대해 무엇을 수행하는지 확인할 필요가 있습니다. 코드 내에서 이 함수가 정의되어 있지 않으면 NullPointerException을 발생시킬 수 있습니다. 이 메소드가 외부 라이브러리에서 가져온 것이라면 올바르게 import 되었는지 확인해야 합니다. -
실행 시간 오류:
buildTypes블록 안에서 `getByName(
| } | ||
| } | ||
|
|
||
| dependencies { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
다음은 코드 패치에 대한 리뷰 코멘트입니다:
-
플러그인 변경:
libs.plugins.com.android.library에서libs.plugins.tuk.android.library로 플러그인이 변경되었습니다. 이 변경이 필요한지 확인해야 하며, 새로운 플러그인이 기존의 기능을 올바르게 지원하는지 검토해야 합니다. -
SDK 정보 제거:
compileSdk,minSdk, 및 기타 구성 세부사항이 주석 처리되어 있습니다. 이로 인해 현재 모듈의 빌드가 정상적으로 작동하지 않을 수 있으며, 의도하지 않은 문제를 일으킬 수 있습니다. 이러한 중요한 설정은 유지해야 합니다. -
Build Types 및 Proguard 설정 제거:
buildTypes와 관련된 설정이 제거되었습니다. 이는 배포에 영향을 줄 수 있으며, 코드 난독화 등의 이점을 잃게 됩니다. 개발 및 배포 과정에서의 안정성을 고려했을 때, 이러한 설정을 반드시 포함해야 합니다. -
Java 및 Kotlin 호환성:
compileOptions와kotlinOptions의 설정이 누락되어 있습니다. 이는 앱의 Java 및 Kotlin 버전 호환성에 영향을 줄 수 있습니다. 이 또한 반드시 명시해야 합니다. -
Dependency 블록 불완전성: 주석 처리된 부분에서는
dependencies {가 열려 있지만, 그 이후 코드가 없습니다. 누락된 의존성 레코드를 추가해야 하며, 현재상태로는 기능에 필요한 라이브러리나 의존성을 잃을 수 있습니다.
이러한 문제점들을 해결한 후에야 합병을 고려할 수 있습니다.
| } | ||
| } | ||
|
|
||
| dependencies { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 패치는 여러 가지 주의할 점이 있습니다:
-
플러그인 변경:
libs.plugins.com.android.library를libs.plugins.tuk.android.library로 변경했습니다. 이 변경이 라이브러리의 기능이나 호환성에 어떤 영향을 주는지 검토해야 합니다. 특히, 'tuk'라는 플러그인의 안정성과 문서화 여부를 확인해야 합니다. -
구성 삭제: 많은 안드로이드 관련 구성을 삭제했습니다.
compileSdk,defaultConfig,buildTypes,compileOptions,kotlinOptions등이 삭제되었는데, 이는 프로젝트의 기본 설정이 되지 않을 수 있습니다. 특히minSdk가 지정되지 않으면 호환성 문제를 일으킬 수 있습니다. -
의존성 누락 가능성: 의존성의 변경으로 인해 필요한 라이브러리나 모듈이 누락될 위험이 있습니다. 새로운 플러그인이 어떤 의존성을 요구하는지 확인해야 합니다.
-
테스트 관련 설정:
testInstrumentationRunner와consumerProguardFiles설정이 삭제되어 디버깅과 배포 시의 안정성에 영향을 미칠 수 있습니다. 이 설정들이 필요하다면 복원해야 합니다. -
Java/Kotlin 버전 호환성:
compileOptions와kotlinOptions를 삭제하여 Java 및 Kotlin 버전의 호환성을 보장하지 않고 있습니다. 이는 나중에 다양한 문제를 일으킬 수 있습니다.
전반적으로, 플러그인 변경과 대량의 구성 요소 삭제는 코드의 안정성에 큰 영향을 미칠 수 있으므로, 신중한 검토가 필요합니다.
| implementation(libs.material) | ||
| testImplementation(libs.junit) | ||
| androidTestImplementation(libs.androidx.test.ext.junit) | ||
| androidTestImplementation(libs.espresso.core) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 리뷰
해당 코드 패치는 몇 가지 우려 사항과 개선점이 있습니다:
-
플러그인 변경:
com.android.library와org.jetbrains.kotlin.android에서tuk.android.library와tuk.feature로 변경되었습니다. 이로 인해 해당 플러그인이 제공하는 기능이 달라질 수 있습니다. 이에 대한 테스트가 필요하며, 이전 플러그인의 기능을 대체할 수 있는지 확인해야 합니다. -
Android 설정 제거:
compileSdk,minSdk,defaultConfig,buildTypes,compileOptions,kotlinOptions와 같은 설정이 제거되었습니다. 이러한 설정은 앱의 호환성과 성능에 큰 영향을 미치므로, 최소한의 설정이라도 유지해야 합니다. 특히,minSdk설정이 없으면 앱이 지원하는 최소 OS 버전이 정의되지 않아 예상치 못한 오류가 발생할 수 있습니다. -
의존성 제거:
implementation으로 선언된 의존성들이 여러 개 제거되었습니다. 이러한 의존성들은 앱의 기능에 필수일 가능성이 높으므로, 삭제 시 기능이 제약될 수 있습니다. 삭제된 의존성이 없다고 가정할 수 있을까요? -
테스트 의존성: 테스트 관련 의존성(
junit,androidTestImplementation)은 유지되고 있지만, 다른 필수 의존성이 제거되면서 전체적인 테스트 신뢰성이 저하될 수 있습니다. -
주석 및 문서화 부족: 코드 변경 사항에 대한 주석이 부족하여, 다른 개발자들이 이 변경의 의도를 파악하기 어려울 수 있습니다. 설명을 추가하여 변경 이유와 관련된 문서를 작성하는 것이 좋습니다.
결론적으로, 해당 변경 사항은 전체적으로 안정성을 해칠 위험이 있으므로, 추가적인 검토 및 테스트 후에 병합하는 것이 좋습니다.
| implementation(libs.material) | ||
| testImplementation(libs.junit) | ||
| androidTestImplementation(libs.androidx.test.ext.junit) | ||
| androidTestImplementation(libs.espresso.core) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 패치 리뷰
잠재적 결함 및 위험 요소
- 의존성 제거:
implementation구문으로 추가된 의존성이 줄어듭니다. 특히,:core:domain,:core:designsystem,:core:ui와 같은 중요 모듈들이 제거되었는데, 이로 인해 의존성 문제나 런타임 오류가 발생할 수 있습니다. 이 의존성이 정말로 필요하지 않은지 다시 한 번 확인해야 합니다. - SDK 버전 설정:
compileSdk와minSdk가 삭제되었습니다. 이 설정이 제거되면, 기본 SDK 버전이 사용되어 의도치 않은 결과를 초래할 수 있습니다. SDK 버전을 명시적으로 설정하는 것이 중요합니다. - Build Types:
buildTypes섹션이 제거되어, 이를 통해 설정했던release환경에 대한 설정이 사라집니다. 이로 인해 앱의 최적화 및 보안이 저하될 수 있습니다. - 컴파일 옵션:
compileOptions와kotlinOptions설정이 삭제되었습니다. 이로 인해 코드 호환성이 축소되고, 잠재적인 버그가 발생할 수 있습니다. Java 11 호환성을 유지하기 위해서는 이 설정이 필요합니다.
개선 제안
- 의존성 검토: 제거된 의존성이 프로젝트에서 필수적인지 확인해야 합니다. 필요한 의존성은 다시 추가하는 것이 좋습니다.
- SDK 버전 재설정:
compileSdk및minSdk값을 명확히 설정해야 합니다. 예를 들어,compileSdk = 36및minSdk = 26을 다시 추가하는 것이 좋습니다. - Build Types 복원:
release빌드 타입을 복원하여 최적화와 보안 설정을 재구성해야 합니다. - 컴파일 및 코틀린 옵션 추가:
compileOptions와kotlinOptions을 다시 추가하여 최신 Java 및 Kotlin 기능을 활용할 수 있도록 해야 합니다.
| tuk-android-application-compose = { id = "tuk.android.application.compose", version = "unspecified" } | ||
| tuk-android-library = { id = "tuk.android.library", version = "unspecified" } | ||
| tuk-feature = { id = "tuk.feature", version = "unspecified" } | ||
| tuk-hilt = { id = "tuk.hilt", version = "unspecified" } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 리뷰
-
KSP 추가:
ksp와ksp-gradle-plugin을 추가한 것은 좋으나, 이 버전이 현재 프로젝트와 호환되는지 확인해야 합니다. 특정 버전에서 발생할 수 있는 버그나 호환성 문제를 고려해야 합니다. -
중복성 제거:
navigation-runtime-ktx와lifecycle-runtime-compose의 설정을 변경하면서 그룹과 이름을 교환하였습니다. 그러나 이는 혼란을 야기할 가능성이 있습니다. 기존 정의를 유지하면서 모듈 이름을 명확히 하는 것이 좋습니다. -
우선 순위 정의 부족: 추가한 플러그인들에 대한 우선 순위를 정의하는 방법이 없습니다. 충돌이 발생할 경우를 대비해 각 플러그인의 우선 순위를 정해야 합니다.
-
문서화: 변경 사항에 대해 충분한 주석이 없어서 다른 개발자들이 변경 내용을 이해하기 힘듭니다. 코드에 간략한 주석을 추가하여 왜 이러한 변경을 했는지 설명하는 것이 좋습니다.
-
테스트 필요: 새로운 의존성을 추가했으므로, 이와 관련된 기능에 대한 유닛 테스트를 추가하거나 기존 테스트를 업데이트해야 합니다. 새롭게 추가된 라이브러리나 플러그인이 프로젝트에 미치는 영향을 평가하기 위해 자동화된 테스트가 필요합니다.
-
미지정 버전:
unspecified로 버전을 설정한 플러그인이 있는 경우, 향후 사용자가 어떤 버전을 사용할 것인지 예측하기 어렵습니다. 이를 구체적으로 명시하는 것이 바람직합니다.
작업