[TIL] 2025-01-02_Gradle

Yuriยท2025๋…„ 1์›” 2์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
19/59
post-thumbnail

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณผ์ œ ํ™˜๊ฒฝ ๊ตฌ์ถ•์„ ํ•˜๋ฉด์„œ New Project๋ฅผ ํ•  ๋•Œ, ๋‹น์—ฐํžˆ ๊ธฐ๋ณธ์„ธํŒ…(IntelliJ)์œผ๋กœ ํ•˜๊ณ  ๋„˜์–ด๊ฐ”์—ˆ๋Š”๋ฐ ์˜ค๋Š˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ 'Gradle'๋กœ ์„ค์ •ํ•˜์˜€๋‹ค. Gradle์ด๋ž€ ๋ฌด์—‡์ด๊ณ , ์™œ Gradle ์„ ์‚ฌ์šฉํ•˜๋Š” ์ง€ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๐Ÿ˜

๐Ÿ‘‰ ์˜ค๋Š˜ ํ”„๋กœ์ ํŠธ๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ 'Gradle', JDK ๋ฒ„์ „์€ 17 ๋ฒ„์ „, Gradle DSL์€ Groovy๋กœ ํ•˜์—ฌ Create ํ•˜์˜€๋‹ค.

1. Gradle์ด๋ž€?

Gradle(๊ทธ๋ž˜๋“ค)์€ Groovy(๊ทธ๋ฃจ๋น„)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์˜คํ”ˆ์†Œ์Šค ๋นŒ๋“œ ๋„๊ตฌ์ด๋‹ค.

Gradle์€ ๋Œ€๊ทœ๋ชจ ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋นŒ๋“œ๋ถ€ํ„ฐ ๋‹ค์–‘ํ•œ ์–ธ์–ด์— ๊ฑธ์นœ ๋น ๋ฅธ ๊ฐœ๋ฐœ ์ž‘์—…์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋œ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚œ ๋นŒ๋“œ ์ž๋™ํ™” ๋„๊ตฌ์ด๋‹ค. Gradle์˜ ๋ชจ๋“ˆ์‹ ์„ฑ๋Šฅ ์ง€ํ–ฅ ์•„ํ‚คํ…์ณ๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜์–ด Java, Kotlin, Scala, Android, Groovy, C++, Swift ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ์†”๋ฃจ์…˜์ด๋‹ค.

๐Ÿ› ๏ธ ๋นŒ๋“œ : ์†Œ์Šค์ฝ”๋“œ ํŒŒ์ผ์„ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋…๋ฆฝ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐ€๊ณต๋ฌผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ • ๋˜๋Š” ๊ทธ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฌผ
๐Ÿ“’ Apache Groovy: Java๋ฅผ ๋ฐœ์ „์‹œํ‚จ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค. 2003๋…„์— ์ฒ˜์Œ ๊ณต๊ฐœ๋˜์—ˆ๊ณ , 2015๋…„๋ถ€ํ„ฐ ์•„ํŒŒ์น˜ ์†Œํ”„ํŠธ์›จ์–ด ์žฌ๋‹จ์ด ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค.

  • ์ง์ ‘ ์„ค์น˜ํ•˜์—ฌ ์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ IDE์—์„œ ๊ธฐ๋ณธ ์ œ๊ณตํ•œ๋‹ค.
  • ๋‹ค์–‘ํ•œ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(IDE) ๋ฐ ์ง€์†์ ์ธ ํ†ตํ•ฉ(CI) ์‹œ์Šคํ…œ๊ณผ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ๊ตฌ์ถ•๋˜์–ด ๊ฐ„์†Œํ™”๋œ ์›Œํฌํ”Œ๋กœ์— ๋Œ€ํ•œ ๊ด‘๋ฒ”์œ„ํ•œ ์ง€์›์„ ์ œ๊ณตํ•œ๋‹ค.
    • ์ง€์› IDE: Android Studio, IntelliJ IDEA, Eclipse, Visual Studio Code
    • ์ง€์†์ ์ธ ํ†ตํ•ฉ(CI): Jenkins, GitHub Actions, GitLab CI ...

๊ณต์‹ ๋ฌธ์„œ์—์„œ ์†Œ๊ฐœํ•˜๋Š” ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜์—ฌ ๋ชจ๋“  ํ”Œ๋žซํผ์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ‚ค์ง€์ด๋‹ค.
  2. ํ’๋ถ€ํ•œ API์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ํ†ตํ•ฉ์˜ ์ƒํƒœ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ์ดˆ๊ณ ์† ๋นŒ๋“œ๋กœ ํ™•์žฅ ๊ฐœ๋ฐœ์„ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. ์ปดํŒŒ์ผ ํšŒํ”ผ, ๊ณ ๊ธ‰ ์บ์‹ฑ์œผ๋กœ ์„ฑ๋Šฅ์„ ์ถ”๊ตฌํ•œ๋‹ค.

'Gradle'์˜ ํŠน์ง•

๐Ÿœ Ant

  • XML ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • ์ž์œ ๋กญ๊ฒŒ ๋นŒ๋“œ ๋‹จ์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ„๋‹จํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๋‹ค.
  • ์œ ์—ฐํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฐฉ๋Œ€ํ•ด์ง€๋Š” ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ ๊ด€๋ฆฌ๋‚˜ ๋นŒ๋“œ ๊ณผ์ •์ด ๋ณต์žกํ•ด์ง„๋‹ค.
  • ์ƒ๋ช…์ฃผ๊ธฐ(Lifecycle)์„ ๊ฐ–์ง€ ์•Š์•„ ๊ฐ๊ฐ์˜ ๊ฒฐ๊ณผ๋ฌผ์— ๋Œ€ํ•œ ์˜์กด๊ด€๊ณ„ ๋“ฑ์„ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.
โ†’ Eclipse IDE์—์„œ ์ž๋ฐ” 1.8 ํ”„๋กœ์ ํŠธ๋ฅผ jar๋กœ ๋ฌถ์œผ๋ ค Ant ๋นŒ๋“œํ–ˆ๋”๋‹ˆ "JRE 11๋ฏธ๋งŒ ๋ฒ„์ „์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ์—๋Ÿฌ๋ฅผ ๊ฒช์—ˆ๋Š”๋ฐ ๋ณด์•ˆ ๊ด€๋ จ ์ด์Šˆ๋กœ Eclipse ์ž์ฒด์—์„œ ๋นŒ๋“œ๋ฅผ ๋ง‰์•„๋ฒ„๋ ธ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ํšŒ์‚ฌ์—์„œ๋Š” ์ž๋ฐ” 1.8์ด ํ˜„์—ญ์ด์—ˆ๊ณ  Ant ๋ฒ„์ „์„ ๋‚ด๋ ค๋ณด๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ์‹œ๋„๋ฅผ ํ•˜๋‹ค๊ฐ€ ๊ฒฐ๊ตญ Eclipse๋กœ export jar ํ•ด์„œ ํŒŒ์ผ์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค..

๐Ÿชถ Maven

  • XML ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.
  • ์ƒ๋ช…์ฃผ๊ธฐ(LifeCycle)์™€ ํ”„๋กœ์ ํŠธ ๊ฐ์ฒด ๋ชจ๋ธ(POM, Project Object Model)์ด๋ผ๋Š” ๊ฐœ๋…์ด ๋„์ž…๋๋‹ค.
  • Ant์˜ ์žฅํ™ฉํ•œ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐœ์„ ํ–ˆ๋‹ค.
  • pom.xml์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ์–ธํ•˜๋ฉด ์ž๋™์œผ๋กœ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ํŽธ๋ฆฌํ•˜๋‹ค.
  • ์ƒ๋Œ€์ ์œผ๋กœ ํ•™์Šต ์žฅ๋ฒฝ์ด ๋†’๋‹ค.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์„œ๋กœ ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

Ant์™€ Maven๊ณผ ๊ฐ™์€ ์ด์ „ ์„ธ๋Œ€ ๋นŒ๋“œ ๋„๊ตฌ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ  ์žฅ์ ์„ ์ทจํ•ฉํ•˜์—ฌ ๋งŒ๋“ค์—ˆ๋‹ค.

์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๊ณ  ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ XML ์–ธ์–ด๊ฐ€ ์•„๋‹Œ JVM์—์„œ ๋™์ž‘ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด '๊ทธ๋ฃจ๋น„'๊ธฐ๋ฐ˜์˜ DSL(Domain Specific Language)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. โ†’ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์‹ฌ์ง€์–ด Maven์˜ pom.xml์„ Gradle์šฉ์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Maven์˜ ์ค‘์•™ ์ €์žฅ์†Œ๋„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ชจ๋‘ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

build.gradle

build.gradle ํŒŒ์ผ์€ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ผ๊ณ  ํ•˜๋ฉฐ ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ๋นŒ๋“œ ๊ตฌ์„ฑ ์Šคํฌ๋ฆฝํŠธ(Build Configuration Script)๋ผ๊ณ  ํ•œ๋‹ค. ์˜์กด์„ฑ์ด๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ • ๋“ฑ๊ณผ ๊ฐ™์€ ๋นŒ๋“œ์— ํ•„์š”ํ•œ ์„ค์ •์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

task

Gradle์˜ ์‹คํ–‰ ์ž‘์—… ๋‹จ์œ„, Gradle์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํƒœ์Šคํฌ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ์‹คํ–‰ํ•˜๋ฉฐ, ํƒœ์Šคํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

2. Gradle์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  1. ๊ฐ„๊ฒฐํ•œ ์Šคํฌ๋ฆฝํŠธ
    XML์€ ํƒœ๊ทธ ๋ฌธ๋ฒ•์œผ๋กœ ๋ณต์žกํ•œ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ๊นŒ๋‹ค๋กญ๋‹ค. Groovy๋Š” XML์™€ ๋น„๊ตํ•ด ๊ฐ„๊ฒฐํ•˜๋‹ค.
  2. ๋นŒ๋“œ ์†๋„
    Gradle์€ ์บ์‹ฑ(caching)์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ ๋นŒ๋“œ ๋„๊ตฌ๋ณด๋‹ค ๋นŒ๋“œ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  3. ๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ
    ๋Œ€๊ทœ๋ชจ ์ž๋ฐ” ํ”„๋กœ์ ํŠธ๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ ์•ˆ์— ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์ด ๋™์‹œ์— ๊ฐœ๋ฐœ๋˜๊ณ , ๊ฐ ๋ชจ๋“ˆ์ด ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ๋„ ๋งŒ๋“ค์–ด์ง€๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์ด ๋™์‹œ์— ๊ฐœ๋ฐœ๋˜๋Š” ๊ฒฝ์šฐ ๊ฐ๊ฐ ๋”ฐ๋กœ ๋นŒ๋“œ์ž‘์—…์„ ํ•˜๋ฉด ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์‹ค์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    Gradle์€ ๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ž‘์—… ์‹ค์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ซ ์ฐธ๊ณ ์ž๋ฃŒ
Gradle์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ?
Gradle์ด๋ž€? ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„ ๋ณด์ž.

์•„์ง์€ ๊ฐœ๋ฐœํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ฐ„๋‹จํ•œ ์‹ค์Šต ๊ณผ์ œ์—ฌ์„œ ์ฒด๊ฐ์ด ์ž˜ ๋˜์ง€ ์•Š์ง€๋งŒ ๋‚˜์ค‘์— ๋ณธ๊ฒฉ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ๋‹จ๊ณ„์— ๋“ค์–ด๊ฐ€์„œ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฌด๊ฑฐ์›Œ์ง€๋ฉด Gradle์˜ ์ง„๊ฐ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋  ๋“ฏํ•˜๋‹ค.


๐Ÿ“ TO-DO

  1. Java ๋ฌธ๋ฒ• ์ข…ํ•ฉ๋ฐ˜ ๊ฐ•์˜ ์ˆ˜๊ฐ•
  2. ์‹ค์Šต๊ณผ์ œ Lv2, Lv3
  3. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ์นดํƒ€
  4. ๋ธ”๋กœ๊ทธ ์ •๋ฆฌ

๐Ÿ’ญ Diary
๋งค์ผ ์Œ“์ด๊ณ  ์Œ“์—ฌ ์–ธ์  ๊ฐ€ ๋Œ์•„๋ดค์„ ๋•Œ ๋‚˜์—๊ฒŒ ํฐ ๋„์›€์ด ๋  2025๋…„์˜ ์ฒซ TIL!
์ทจ์—…์„ ์ค€๋น„ํ•˜๋ฉฐ ํŠน๊ฐ•๊ณผ ๋ผ์ด๋ธŒ ์„ธ์…˜์„ ๋งŽ์ด ๋“ฃ๊ฒŒ ๋˜๋ฉด์„œ ์™œ ์ „์—๋Š” ์ฐพ์•„๋“ฃ์ง€ ์•Š์•˜์„๊นŒ ํ›„ํšŒ๋˜๋Š” ๋‚˜๋‚ ์ด๋‹ค.
๋‚ด๊ฐ€ ๊ฒฝํ—˜ํ•˜์ง€ ๋ชปํ•œ ๋‹ค๋ฅธ ๊ธธ์„ ๊ฒฝํ—˜ํ•œ ํŠœํ„ฐ๋“ค์˜ ๊ฐ€์น˜๊ด€๊ณผ ๊ด€์ ์„ ๋“ฃ๊ณ  ์žˆ์œผ๋ฉด "๊ฐœ๋ฐœ์ž" ๋ผ๋Š” ์ง์—…์— ๋Œ€ํ•ด ๋” ๊ฐ€๊นŒ์›Œ์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

profile
์•ˆ๋…•ํ•˜์„ธ์š” :)

0๊ฐœ์˜ ๋Œ“๊ธ€