-
Notifications
You must be signed in to change notification settings - Fork 2
[AN] Bottari Convention Plugin Guide
๋ฉํฐ๋ชจ๋ Android ํ๋ก์ ํธ์ ๋น๋ ์ค์ ์ ์ค์ํํ๊ณ ,
๋ชจ๋ ๊ฐ ์ผ๊ด๋ ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด ์ค๊ณ๋ Convention Plugin ์ธํธ์ ๋๋ค.
๊ฐ ํ๋ฌ๊ทธ์ธ์ ์ญํ ยท์ ์ฉ ์์ญยท์ฌ์ฉ ๋ฐฉ๋ฒ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ,
์ค์ ํ๋ก์ ํธ์์๋ alias(libs.plugins.bottari.*) ํํ๋ก ์ ์ธํด ์ฌ์ฉํฉ๋๋ค.
Convention Plugin์ ๋ชฉ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฐ๋ณต๋๋ Android/Kotlin ์ค์ ์ ๊ฑฐ
- ๋ชจ๋ ๊ฐ compileSdk/minSdk ๋ฑ ํ๊ฒฝ ํต์ผ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ/Feature/App ๋ ๋ฒจ์ ๊ณตํต ๋ก์ง ์๋ํ
- Compose, Hilt, KSP ๋ฑ ์ข ์๋ ๊ธฐ๋ฅ์ ์ ์ธ์ ๋ฐฉ์์ผ๋ก ํ์ฑํ
- ๋ชจ๋ ๊ตฌ์กฐ๊ฐ ์ปค์ ธ๋ ์ ์ง๊ด๋ฆฌ ๋น์ฉ์ด ์ฆ๊ฐํ์ง ์๋ ํ๊ฒฝ ๊ตฌ์ฑ
ํ๋ก์ ํธ ๋ด ํ๋ฌ๊ทธ์ธ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ด ๋๋ฉ๋๋ค.
| Plugin | Target | Purpose |
|---|---|---|
| AndroidApplicationConventionPlugin | app | ๊ธฐ๋ณธ Android/Kotlin ์ค์ |
| AndroidApplicationComposeConventionPlugin | app | Compose ์ธํ |
| AndroidLibraryConventionPlugin | library modules | ๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ |
| AndroidLibraryComposeConventionPlugin | library modules | Compose + ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| AndroidFeatureConventionPlugin | feature modules | Feature ์กฐํฉํ ํ๋ฌ๊ทธ์ธ |
| AndroidHiltConventionPlugin | any | Hilt/KSP ์ค์ |
| JvmKotlinConventionPlugin | domain | ์์ JVM ๋ชจ๋ ์ค์ |
โ ์ญํ
- compileSdk/minSdk/targetSdk ๊ธฐ๋ณธ ์ค์
- versionCode, versionName ์๋ ์ฃผ์
- debug/release buildTypes ์ ์ (minify ์ต์ ํฌํจ)
- :domain, :di, :presentation, :logger ๊ธฐ๋ณธ ์์กด์ฑ ์ฐ๊ฒฐ
- Kotlin ์ต์ (JVM Target ๋ฑ) ํต์ผ ์ ์ฉ
โ ์ญํ
- Compose build feature ์๋ ํ์ฑํ
- Compose BOM ๋ฐ ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ (material, ui-tooling ๋ฑ)
- Debug Tooling Preview ํ๊ฒฝ ๊ตฌ์ฑ
โ ์ญํ
Android ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋์์ ๊ณตํต ์ค์ ์ ์ ๊ณต:
- compileSdk/minSdk/targetSdk ์ผ๊ดํ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฉ buildTypes ๊ตฌ์ฑ
- ํ ์คํธ ํ๊ฒ ํ๊ฒฝ ํต์ผ
- Java/Kotlin ์ค์ ๊ณตํตํ
โ ์ญํ
Compose UI๊ฐ ํฌํจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋์์ ํ์ํ ์ค์ ์ ์๋ ์ ์ฉ:
- Compose build feature
- Compose BOM ๋ฐ ๊ธฐ๋ณธ ์์กด์ฑ
- Preview/Tooling ์ง์
Feature ๋ชจ๋์ ์ํ ์กฐํฉํ ํ๋ฌ๊ทธ์ธ์ ๋๋ค.
โ ์ญํ
๋ค์ ํ๋ฌ๊ทธ์ธ์ ํ ๋ฒ์ ์ ์ฉ:
- AndroidLibraryConventionPlugin
- AndroidLibraryComposeConventionPlugin
- AndroidHiltConventionPlugin ๊ธฐ๋ณธ ์์กด์ฑ์ ์๋ ์ถ๊ฐ:
- :domain
- :di
- :logger
โ ์ญํ
- Hilt ํ๋ฌ๊ทธ์ธ ์๋ ์ ์ฉ
- KSP ์ ์ฉ ๋ฐ Hilt compiler ์ฐ๊ฒฐ
- Hilt core/runtime ์์กด์ฑ ์๋ ์ฃผ์
Android ๋น์์กด ๋ชจ๋(domain ๋ฑ)์ ์ํ JVM ์ค์ ํ๋ฌ๊ทธ์ธ.
โ ์ญํ
- kotlin-jvm, java-library ํ๋ฌ๊ทธ์ธ ์๋ ์ ์ฉ
- JDK/Toolchain ํต์ผ
- JVM Target ์ค์ ์ค์
- ํ ์คํธ ํ๊ฒฝ ๊ธฐ๋ณธ ์ค์
Convention Plugin์ ์ ์ฉํ๋ฉด ์ป์ ์ ์๋ ํจ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
โ ์ผ๊ด๋ ๋น๋ ํ๊ฒฝ
๋ชจ๋ Android/Kotlin ์ปดํ์ผ ์ต์ ์ ํ๋์ ๊ตฌ์กฐ์์ ๊ด๋ฆฌ.
โ ๋ชจ๋ ์ค์ ๋๋ฝ ๋ฐฉ์ง
๊ฐ ๋ชจ๋์์ ๋น๋ ์ต์ ์ ์ง์ ๊ด๋ฆฌํ ํ์ ์์.
โ ์ฝ๋ ์ค๋ณต ๊ฐ์
build.gradle.kts ํ์ผ๋ค์ด 50% ์ด์ ๊ฐ๊ฒฐํด์ง.
โ ์ ์ง๋ณด์์ฑ ํฅ์
SDK ๋ฒ์ , Compose ๋ฒ์ , Hilt ์์กด์ฑ์ด ๋ชจ๋ ์ค์์์ ๊ด๋ฆฌ๋จ.
โ ๋ชจ๋ ์ฆ๊ฐ์๋ ๊ด๋ฆฌ ๋น์ฉ ์ผ์
ํ๋ก์ ํธ ๊ตฌ์กฐ๊ฐ ์ปค์ ธ๋ ์ค์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ์ง ์์.
- ํ ๋ฌธํ
- ์๋น์ค ์๊ฐ ๋ฐ ์ฌ์ฉ์ ์๋๋ฆฌ์ค
- Git Convention & ์ ๋ต
- 3์ฐจ ์คํ๋ฆฐํธ์์ ๊ตฌํํ ํต์ฌ ๊ธฐ๋ฅ ๋ชฉ๋ก
- Kotlin Convention
- Resource Naming Convention
- Compose Convention
- ๋ฒ์ ๋ฐ ๊ธฐ์ ์คํ ์ ์
- ์ฝ๋ ๋ฆฌ๋ทฐ ํ๋ก์ธ์ค
- ํ ์คํธ ์ ๋ต
- ์ธ๋ถ ๋ชจ๋ํฐ๋ง ๋๊ตฌ ์ฐ๋
- ๋ก๊น ์ ๋ต
- SSE ํด๋ผ์ด์ธํธ ๊ตฌํ
- ConventionPlugin Guide
- Java Convention
- ๋ฒ์ ๋ฐ ๊ธฐ์ ์คํ ์ ์
- ๊ฐ๋ฐ ์๋ฒ ์์ ๋ด์ฉ ๋ฐ์ ๋ฐฉ๋ฒ
- ๊ฐ๋ฐ ์๋ฒ ๋ฐฐํฌ ์๋ํ ํ์ดํ๋ผ์ธ
- ๋ฌด์ค๋จ ๋ฐฐํฌ ์๋ํ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
- ์ด์ ์๋ฒ ์ธํ๋ผ ์ํคํ ์ฒ
- ๋ชจ๋ํฐ๋ง ๋๊ตฌ ์ ํ ์ด์
- ํ ๋ณด๋ฐ๋ฆฌ ๋ณ๊ฒฝ ์ฌํญ ์ค์๊ฐ ๋ฐ์ ๊ตฌํ ๊ฒํ
- ๋ก๊ทธ ์ ๋ต ๋ฐ ๋ก๊ทธ ํ์ผ ์ ์ฅ ์์น ๊ด๋ จ ์ค์
- Table DROP ๋ฐฉ์ง
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์ดํฐ ๋ณ ์ญ์ ์ ๋ต
- ์๋น์ค ์ฃผ์ ์ฟผ๋ฆฌ ์ฑ๋ฅ ์ ๊ฒ ๋ฐ ์ธ๋ฑ์ค ์ ๋ต
- APP ์๋ฒ / SSE ์๋ฒ ๋ถ๋ฆฌ ์ค๊ณ ๋ฌธ์
- Read Write DB ๋ถ๋ฆฌ
- ๋ถํํ ์คํธ ๊ณผ์ ๋ฐ ๊ฒฐ๊ณผ
- SSE์์ ํธ๋ฆฌ๊น ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๊ณ GET์ ํ๋ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝ
- ํ ์คํธ ํ๊ฒฝ์์ ๋ฐ์ํ DB ์ปค๋ฅ์ ๊ณ ๊ฐ ์ด์ ์ ๋ฆฌ
- CI/CD - Docker Hub ์ฅ์ ๋์ ๋ฐ GHCR Fallback