๊นจ์•Œ ๊ฐœ๋… ๐Ÿ“‘/๊ธฐํƒ€

Gradle, ๋ฒ„์ „ ์นดํƒˆ๋กœ๊ทธ

interfacer_han 2025. 11. 26. 18:38

#1 ์ด์ „ ๊ธ€

 

Maven, Artifact, GAV

#1 Module๊ณต์‹ ํ™ˆํŽ˜์ด์ง€GitHubJava ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ์ข…ํ•ฉ ๋„๊ตฌ. Java ํ”„๋กœ์ ํŠธ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ, ์†Œ์Šค ์ฝ”๋“œ์˜ ์ปดํŒŒ์ผใ†๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. #2 ArtifactArtifact๋ž€ ์‰ฝ๊ฒŒ ๋งํ•ด Maven์—์„œ๋งŒ ์“ฐ๋Š”(Maven์˜ ๊ณผ๊ฑฐ ์ธ๊ธฐ

kenel.tistory.com

์œ„์˜ ๊ฒŒ์‹œ๊ธ€์—์„œ ์ด์–ด์ง„๋‹ค.

 

#2 Gradle

#2-1 What

Maven์—์„œ ํŒŒ์ƒํ•œ ๋„๊ตฌ๋‹ค. Gradle์˜ ๋‹จ์  ์ค‘ ํ•˜๋‚˜์ธ ์žฅํ™ฉํ•จ ๋“ฑ์„ ๊ฐœ์„ ํ–ˆ๋‹ค. Maven์˜ Artifact ๊ฐœ๋…๋„ ๊ทธ๋Œ€๋กœ ๊ณ„์Šนํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Maven Repository๋ฅผ Gradle๋„ Maven๊ณผ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ๋‹ค.

 

#2-2 vs Maven DSL

Maven DSL โ†’ Gradle DSL
groupId โ†’ group
artifactId โ†’ name
version โ†’ version (๋™์ผ)
groupId + ":" + artifactId โ†’ module

Gradle์€ Maven์„ ๊ณ„์Šนํ–ˆ์ง€๋งŒ, DSL์—์„œ๋Š” ์œ„์™€ ๊ฐ™์ด ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ๋ˆˆ์—ฌ๊ฒจ๋ณผ ๊ฒƒ์€ 'module'์ด๋‹ค. ๊ฐ€๋ น, Maven์—์„œ groupId๊ฐ€ "androidx.hilt"๊ณ  artifactId๊ฐ€ "hilt-navigation-compose"์ธ Artifact๋ฅผ, Gradle์—์„  ๊ฐ’์ด "androidx.hilt:hilt-navigation-compose"์ธ module์„ ๊ฐ€์ง€๋Š” Artifact๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

module์— ์•„์ฃผ ํŠน๋ณ„ํ•œ ์˜๋ฏธ๊ฐ€ ๊นƒ๋“  ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ํ‘œํ˜„ ๋ฐฉ์‹์˜ ์ฐจ์ด์ผ ๋ฟ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ์•„๋ž˜์— ์žˆ๋Š” (1)๊ณผ (2)๋Š” Gradle์—์„œ ์™„์ „ํžˆ ๋™์ผํ•œ Artifact๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

 

(1) group = "androidx.hilt", name = "hilt-navigation-compose", version = "1.2.0"
(2) module = "androidx.hilt:hilt-navigation-compose", version = "1.2.0"

 

#2-3 vs Android Module

 

[Android] Module ๊ตฌ์กฐ

#1 Module?#1-1 Whatํ•˜๋‚˜์˜ build.gradle์— ์ข…์†๋œ ์ฝ”๋“œ์˜ ๋ฒ”์œ„= ๋นŒ๋“œ์˜ ์ตœ์†Œ ๋‹จ์œ„= ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ตœ์†Œ ๋‹จ์œ„์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์€ Gradle๋กœ ๋นŒ๋“œ๋˜๊ณ , ๊ทธ ๋นŒ๋“œ์˜ ๋ช…์„ธ๋Š” build.gradle์— ์ ํžŒ๋‹ค. ๋ชจ๋“ˆ์ด build.gradle ํŒŒ

kenel.tistory.com

Artifact์˜ '๋˜ ๋‹ค๋ฅธ ์ •์˜'๋ฅผ ๋ณด๋ฉด, Android์—์„œ ์ •์˜ํ•œ 'Module'๊ณผ ์˜๋ฏธ๋ก ์ (์ถ”์ƒ์ )์œผ๋ก  ๊ฐ™๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ ์ ์—์„œ Gradle์ด group(groupId) ๋ฐ name(artifactId)์„ ํ•ฉ์ณ module์ด๋ผ ๋ถ€๋ฅด๋Š” ๊ฑด (๊ธฐ์–ตํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์ธก๋ฉด์—์„œ) ์ข‹์€ ์ผ์ด๋‹ค. Gradle์˜ module์€ version ์ •๋ณด๋งŒ ์—†์„ ๋ฟ์ธ Artifact ๊ทธ ์ž์ฒด๋ผ ํ•ด๋„ ๋˜๋‹ˆ๊นŒ.

 

#3 ๋ฒ„์ „ ์นดํƒˆ๋กœ๊ทธ

#3-1 What

 

Version Catalogs

To access items in a version catalog defined in the standard libs.versions.toml file located in the gradle directory, you use the libs object in your build scripts. For example, to reference a library, you can use libs. , and for a plugin, you can use libs

docs.gradle.org

๋ฒ„์ „ ์นดํƒˆ๋กœ๊ทธ(Version Catalog)๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Artifact)๋“ค์˜ GAV ๊ฐ’์„ ๋ชจ์•„๋†“์€ ํŒŒ์ผ์ด๋‹ค. Gradle 7.4 ๋ฒ„์ „์—์„œ๋ถ€ํ„ฐ ๋„์ž…๋˜์—ˆ๋‹ค. Android Project๋„ Gradle์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋”ฐ๋ผ ๋„์ž…๋˜์—ˆ๋‹ค.

 

#3-2 ๋„์ž… ๋ฐฐ๊ฒฝ

1. ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋งŒ ๋ณด์ž๋ฉด, ๋ฒ„์ „ ์ •๋ณด๋ฅผ gradle/libs.versions.toml ๋‹จ ํ•˜๋‚˜๋งŒ ๋ชฐ์•„๋„ฃ์–ด ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ฆ๋Œ€
2. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์ ํŠธ๋ผ๋ฆฌ ๋น„๊ตํ•˜์ž๋ฉด, ์˜์กด์„ฑ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) ์ •๋ณด ๊ธฐ์ž…์„ ์œ„ํ•œ ์žฅ์†Œ๋ฅผ gradle/libs.versions.toml๋กœ ์•ฝ์†(ํ‘œ์ค€ํ™”)ํ•˜๋Š” ํšจ๊ณผ

 

#3-3 TOML ํŒŒ์ผ ํ˜•์‹

JSON์ฒ˜๋Ÿผ ํ‚ค-๊ฐ’ ์Œ์„ ์ €์žฅํ•˜๋Š”, ์„ค์ • ํŒŒ์ผ ์–‘์‹์ด๋‹ค. TOML ์–‘์‹์ด ๋ฒ„์ „ ์นดํƒˆ๋กœ๊ทธ ํŒŒ์ผ์˜ ์–‘์‹์œผ๋กœ ์ฑ„ํƒ๋œ ๊ฒƒ์€, ์•„๋งˆ ๋‹ค๋ฅธ ์–‘์‹๋“ค์— ๋น„ํ•ด ๊ฐ€๋…์„ฑ์ด ํ›Œ๋ฅญํ•˜๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ด๋‹ค.

 

#3-4 ๊ตฌ์กฐ

[versions] # ๋ฒ„์ „ ๊ฐ’ ๊ธฐ์ž…
ktx = "1.9.0"
androidGradlePlugin = "7.4.1"
...

[libraries] # Artifact์˜ GAV ๊ฐ’ ๊ธฐ์ž…
androidx-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "ktx" }
...

[plugins] # Gradle Plugin์˜ id ๋ฐ ๋ฒ„์ „ ๊ฐ’ ๊ธฐ์ž…
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
...

๊ตฌ์กฐ๊ฐ€ ์–ด๋–ค์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ, ๋ฒ„์ „ ์นดํƒˆ๋กœ๊ทธ ํŒŒ์ผ(libs.versions.toml)์˜ ์˜ˆ์‹œ๋‹ค.

 

Gradle Plugin์€ ๊ฒ‰์œผ๋กœ๋Š” GAV๊ฐ€ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์‹ค์ œ๋ก (= ๋‚ด๋ถ€์ ์œผ๋ก ) Artifact๋‹ค(= GAV๊ฐ€ ์žˆ๋‹ค). ์šฐ๋ฆฌ(ํ”„๋กœ๊ทธ๋ž˜๋จธ)๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ id ๋ฐ ๋ฒ„์ „ ๊ฐ’์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด, Gradle์ด ์•Œ์•„์„œ ๋งคํ•‘๋œ GAV๋กœ Artifact๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ด์„œ ๊ฐ€์ ธ์˜จ๋‹ค.

 

GAV ๊ฐ’์—์„œ "version"์ด ์•„๋‹ˆ๋ผ "version.ref"(= version reference)๋ผ๋Š” ํ‚ค๊ฐ€ ์“ฐ์ธ ๊ฒƒ์€, [versions]์— ์žˆ๋Š” ๊ฐ’์„ ์ฐธ์กฐ(reference)ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ์•„๋ž˜์ฒ˜๋Ÿผ ์จ๋„ ๋œ๋‹ค. ๋‹ค๋งŒ, ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์ƒ๊ฐํ•ด ์ง€์–‘ํ•˜์ž.

 

androidx-ktx = { group = "androidx.core", name = "core-ktx", version = "1.9.0" }

 

#4 ๊ธฐ์กด ๋ฐฉ์‹ โ†’ ๋ฒ„์ „ ์นดํƒˆ๋กœ๊ทธ

 

๋ฒ„์ „ ์นดํƒˆ๋กœ๊ทธ๋กœ ๋นŒ๋“œ ์ด์ „  |  Android Studio  |  Android Developers

Gradle ๊ตฌ์„ฑ ํŒŒ์ผ์„ Gradle ๋ฒ„์ „ ์นดํƒˆ๋กœ๊ทธ๋กœ ์ด์ „ํ•ฉ๋‹ˆ๋‹ค.

developer.android.com

์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ์— ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ๋‹ค. 

 

#5 ๋ฒ„์ „ ์นดํƒˆ๋กœ๊ทธ โ†’ ๊ธฐ์กด ๋ฐฉ์‹

#4์˜ ์—ญ์ˆœ์ด๋‹ค.