Gradle

Gradle์ด๋ž€?

์ฐธ์กฐ : http://www.devkuma.com/books/pages/1064

https://kwonnam.pe.kr/wiki/gradle/buildlifecycle

์œ„ํ‚ค๋ฐฑ๊ณผ์—๋Š” Gradle์ด๋ž€ ๊ทธ๋ฃจ๋น„(Groovy)์„ ์ด์šฉํ•œ ๋นŒ๋“œ ์ž๋™ํ™” ์‹œ์Šคํ…œ์ด๋ผ๊ณ  ์ ํ˜€์žˆ๋‹ค.

  • ์—ฌ๊ธฐ์„œ ๊ทธ๋ฃจ๋น„(groovy)๋ž€, ์ž๋ฐ”์— ํŒŒ์ด์ฌ, ๋ฃจ๋น„ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์–ธ์–ด๋“ค์˜ ํŠน์ง•์„ ๋”ํ•œ ๋™์  ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ž˜์„œ Groovy๋Š” JVM์—์„œ ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ผ๊ณ  ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์›๋ž˜ ์‚ฌ์šฉํ•˜๋˜ ๋นŒ๋“œ ํˆด์ธ Ant๋‚˜ Maven์„ ์ œ์น˜๊ณ  Gradle์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์—ญ์‹œ ๊ธฐ์กด์˜ ๋นŒ๋“œ ํˆด๋“ค์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ  ์žฅ์ ๋งŒ ๋นผ์„œ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Maven๋ณด๋‹ค Gradle์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ๊ฐ€๋…์„ฑ : ํƒœ๊ทธ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ๊ตฌ์ ˆ์ ˆ ์ž‘์„ฑํ•˜๋‹ค ๋ณด๋‹ˆ, ์–‘์ด ๋งŽ์•„์งˆ ์ˆ˜๋ก ์•Œ์•„๋ณด๊ธฐ ํž˜๋“ค๋‹ค, ์˜์กด ๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉด ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ค๋‹ค.

  • ํŠน์ • ์„ค์ •์„ ์†Œ์ˆ˜์˜ ๋ชจ๋“ˆ์—์„œ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ถ€๋ชจ ๋ชจ๋“ˆ์„ ์ƒ์„ฑํ•ด์„œ ์ƒ์† ๋ฐ›์•„์•ผ ํ•˜๋Š” maven์˜ ๋‹จ์ ์„ ๋ณด์™„

  • Groovy ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ ์ธ ๋นŒ๋“œ๋„ ์›ํ•˜๋ฉด ๋”ฐ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ

  • Gradle์€ ์ž‘์—… ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ฐ˜๋ฉด Maven์€ ์„ ํ˜•์ ์ธ ๋‹จ๊ณ„์˜ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„ ์ฐจ์ด๋„ ๋งŽ์ด ๋‚œ๋‹ค! (์•ฝ 100๋ฐฐ)

Build๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๊ณ„์†ํ•ด์„œ ๋‚˜์˜ค๋Š”๋ฐ ํ”„๋กœ์ ํŠธ๋ฅผ build ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์„ ์ปดํ“จํ„ฐ๋‚˜ ํœด๋Œ€ํฐ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋…๋ฆฝ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š”(Jar, War ํŒŒ์ผ ๋“ฑ์œผ๋กœ) ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค.

Build phase

  1. Initialization : gradle์—์„œ๋Š” ๋‹จ์ผ, ๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋‹จ๊ณ„์—์„œ ์–ด๋–ค ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋‹จ๊ณ„์ด๋‹ค.

  2. Configuration : ๋นŒ๋“œ๋œ ํ”„๋กœ์ ํŠธ๋“ค์˜ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

  3. Execution : gradle์€ configuration ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ ๋ฐ ๊ตฌ์„ฑ๋œ ๋ถ€๋ถ„ tasks๋“ค์„ ๊ฒฐ์ •ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ์ •๋œ tasks๋“ค์„ ์‹คํ–‰ํ•œ๋‹ค.

Java Plugin tasks๊ฐ„ ์˜์กด๊ด€๊ณ„

Gradle์€ Maven์ด ๊ฐ€์ง€๋Š” ์ƒ์†๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ configuration์„ ํ†ตํ•ด์„œ ํ™•์žฅ์„ ์„ ํƒํ–ˆ๋‹ค. ์ด ํ™•์žฅ์€ plugins์— ์˜ํ•ด์„œ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

Gradle์€ plugins์— ๊ฐ’๋“ค์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ๋นŒ๋“œ์— ํ•„์š”ํ•œ task๊ฐ€ ์ถ”๊ฐ€๋  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ task๊ฐ„์˜ ์˜์กด๊ด€๊ณ„๊นŒ์ง€ ์„ค์ •ํ•จ์œผ๋กœ์จ ๋นŒ๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰

ํ”„๋กœ์ ํŠธ์—์„œ์˜ Gradle ๊ตฌ์กฐ

Gradle์„ ์„ ํƒํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ ์ด๋ ‡๋‹ค.

  • build.gradle

  • gradle

    • wrapper

      • gradle-wrapper.jar

      • gradle-wrapper.properties

  • gradlew

  • gradlew.bat

  • settings.gradle

  • src

    • main

    • test

๊ฐ ํŒŒ์ผ์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž

build.gradle์ด๋ž€?

Gradle์˜ ๊ธฐ๋ณธ ๋นŒ๋“œ ์„ค์ • ํŒŒ์ผ์ด๊ณ . project ๋นŒ๋“œ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด์„œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜๋Š” ๊ณณ์ด๋‹ค.

build.gradle์„ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ๋นŒ๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ์˜์กด์„ฑ์ด๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ๊ณผ ๊ฐ™์€ ์„ค์ •๋“ค์„ ํ•ด์ฃผ๋Š” ๊ณณ์ด๋‹ค.

= ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ํŒŒ์ผ์ด๋‹ค.

์ดˆ๊ธฐ์˜ build.gradle ๋ชจ์Šต

build.gradle์˜ ๋‚ด๋ถ€ ํƒœ๊ทธ

plugins?

Gradle ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋Šฅ์„ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. java๋‚˜ spring ๊ด€๋ จ ํ‚ค์›Œ๋“œ๋“ค์„ ๋„ฃ์–ด์ค€๋‹ค.

๊ธฐ์กด์—๋Š” apply plugin : 'java' ์ด๋Ÿฐ ์‹์œผ๋กœ ํ–ˆ์—ˆ๋Š”๋ฐ

plugins ๋ธ”๋ก์•ˆ์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์กฐ๊ฐ€ ๋”์šฑ ์‰ฝ๊ฒŒ ๋ฐ”๋€Œ์—ˆ๋‹ค.

'java' : Java ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ โ†’ gradle compile์€ ์ด๊ฑธ ์ถ”๊ฐ€ํ•ด์„œ ๊ฐ€๋Šฅ

'application' : ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ โ†’ gradle run์€ ์ด๊ฑธ ์ถ”๊ฐ€ํ•ด์„œ ๊ฐ€๋Šฅ

repositories?

Gradle์€ library๋ฅผ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ํ†ตํ•ฉํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— build.gradle ์•ˆ์—์„œ '์–ด๋–ค ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€' ๋ช…์‹œ๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋Œ€ํ‘œ์ ์œผ๋กœ mavenCentral()์„ ์‚ฌ์šฉํ•˜๊ณ  ์ด๋Š” Apache Maven ์ค‘์•™ ์ €์žฅ์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

****

dependencies?

์—ฌ๊ธฐ์— ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” library๋“ค์„ ๋ช…์‹œํ•ด์ค€๋‹ค. ์—ฌ๊ธฐ์— ๋ช…์‹œ๋ฅผ ํ•ด์ฃผ๋ฉด repositories์— ๋ช…์‹œํ•ด๋‘” ์ €์žฅ์†Œ์—์„œ ํ•„์š”ํ•œ library๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

configuration์œผ๋กœ 4๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  • compile : ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปดํŒŒ์ผ ๋  ๋•Œ,

  • runtime : ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ โ†’ compile์„ ๋ชจ๋‘ ํฌํ•จ

  • testCompile : ํ”„๋กœ์ ํŠธ์˜ ํ…Œ์ŠคํŠธ๊ฐ€ ์ปดํŒŒ์ผ ๋  ๋•Œ โ†’ ํ”„๋กœ์ ํŠธ์˜ ์ปดํŒŒ์ผ๋œ ํด๋ž˜์Šค๋“ค๊ณผ compile lib์˜ ์˜์กด์„ฑ ํฌํ•จ

  • testRuntime : ํ”„๋กœ์ ํŠธ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ โ†’ compile, runtime, testCompile์˜ ์˜์กด์„ฑ ํฌํ•จ

implementation?

์ฐธ์กฐ : https://bluayer.com/13

compile์€ ์• ์ดˆ์— Gradle 3.0 ์ดํ›„๋ถ€ํ„ฐ๋Š” ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

compile ๊ณผ ์ฐจ์ด๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด

compile ํ•˜๋ฉด ์—ฐ๊ฒฐ๋œ API ๋ชจ๋‘๊ฐ€ ํ”„๋กœ์ ํŠธ์— ์˜ํ•ด์„œ ๋…ธ์ถœ๋˜์ง€๋งŒ implementation์€ ์—ฐ๊ฒฐ๋œ API๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋‹ค.

๋˜ํ•œ ์˜์กดํ•˜๋Š” ๋ชจ๋“ˆ์ด ์ด๋ ‡๊ฒŒ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž

A๊ฐ€ B๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ๊ณ , B๊ฐ€ C๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์ด๋‹ค. = A โ†’ B โ†’ C

๋งŒ์•ฝ ๊ฐ€์žฅ ํ•˜์œ„์— ์žˆ๋Š” A ๋ชจ๋“ˆ์ด ์ˆ˜์ •๋˜๊ฒŒ ๋˜๋ฉด,

compile ์‚ฌ์šฉ ์‹œ, A๋ฅผ ์ง์ ‘, ๊ฐ„์ ‘ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” B์™€ C ๋ชจ๋‘ rebuild ๋˜์ง€๋งŒ

implementation ์‚ฌ์šฉ ์‹œ, A๋ฅผ ์ง์ ‘ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” B๋งŒ rebuild๋œ๋‹ค.

=> ๊ฒฐ๋ก  : ๋ชจ๋“ˆ์ด ๋งŽ์œผ๋ฉด ๋งŽ์„์ˆ˜๋ก compile์„ ์‚ฌ์šฉํ–ˆ๋ƒ implementation์„ ์‚ฌ์šฉํ–ˆ๋ƒ ๋กœ build ์†๋„์— ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค.

gradlew? gradlew.bat?

gradle์€ ๊ตณ์ด java๋‚˜ gradle์ด ์—†๋”๋ผ๋„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ๋˜์–ด์žˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด wrapper์ด๊ณ  ์œ„์˜ gradlew๋Š” gradle + wrapper ์ด๋ ‡๊ฒŒ ๋˜์–ด์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

  • wrapper๋ž€? : ์šด์˜์ฒด์ œ์— ๋งž์ถฐ์„œ gradle ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ

    • ๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ? : ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ์˜ ๋ช…๋ น๋“ค์„ ํ•˜๋‚˜์˜ ์ผ๊ด„(Batch)๋กœ ์ฒ˜๋ฆฌํ•ด์„œ ์ž๋™ํ™” ํ•ด์ฃผ๋Š” ํŒŒ์ผ

๊ทธ๋ƒฅ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๊ณ , ์ข…๋ฅ˜๋กœ๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

gradlew์€ linux๋‚˜ mac์ด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  gradlew.bat์€ ์œˆ๋„์šฐ๊ฐ€ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

settings.gradle

ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์— ์žˆ์–ด์„œ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค์ด ์žˆ์œผ๋ฉด ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ํŒŒ์ผ

์ด๊ณณ์—์„œ ๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ๋Š” Gradle์„ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•œ๋‹ค.

์ตœ์ƒ์œ„ ํ”„๋กœ์ ํŠธ์˜ setting.gradle์—์„œ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋“ค์„ ๋„ฃ์–ด์ค€๋‹ค. โ†’ ํŠธ๋ฆฌ ๋ฐฉ์‹์˜ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์งˆ ์‹œ ์‚ฌ์šฉ

๋งŒ์•ฝ ํ•˜๋‚˜์˜ task๋ฅผ ์‹คํ–‰ ์‹œ, ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์— ํ•ด๋‹น task๊ฐ€ ์žˆ๋‹ค๋ฉด ์ตœ์ƒ์œ„ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘์œผ๋กœ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์— ์žˆ๋Š” task๋„ ์‹คํ–‰๋œ๋‹ค.

src

ํฌ๊ฒŒ mainํด๋”์™€ testํด๋”๋กœ ๋‚˜๋‰˜๊ฒŒ ๋˜๋Š”๋ฐ,

main์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ”๋“œ๋“ค์„ ์ž‘์„ฑํ•ด์„œ ๋„ฃ์–ด์ฃผ๊ณ 

test์—๋Š” main์˜ ์ฝ”๋“œ๋“ค์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ฝ”๋“œ๋“ค์„ ์ž‘์„ฑํ•ด์„œ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

Gradle Task?

Task๋ž€ Gradle์˜ ์ž‘์—… ๋‹จ์œ„์ด๊ณ  gradle์—์„œ ์‚ฌ์šฉํ•˜๋Š” groovy ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. ์„ ์–ธ์€ build.gradle ์•ˆ์—์„œ ์„ ์–ธ์„ ํ•ด์ฃผ๊ณ , intellij ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ gradle์นธ โ†’ Tasks โ†’ other์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ task์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰ํ•  ๋•Œ๋Š” gradle 'task' ์ด ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰ํ•˜๋ฉด task๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.

ex) ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ "gradle bootrun" ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋Š” ์ด๋ฏธ ๋‚ด๋ถ€์—์„œ task๋กœ ์„ ์–ธ์ด ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฏธ๋ฆฌ ์„ ์–ธ๋˜์–ด ์žˆ๊ณ , ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ์žˆ์„ ๋งŒํ•œ ๊ทธ๋Ÿฐ Task

init : ํด๋”์— ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ด๋‚˜ ํด๋”๋“ค์„ ์ƒ์„ฑํ•˜๊ณ  ํด๋”๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

compileJava : Java ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•œ Task

run : ์ž๋ฐ” ํด๋ž˜์Šค๋‚˜ ํ”„๋กœ์ ํŠธ(์„œ๋ฒ„)๋“ฑ์„ ์‹คํ–‰, ์ฆ‰ main ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” Task

jar : ํด๋ž˜์Šค์™€ ํŒจํ‚ค์ง€๋ฅผ ์—ฎ์–ด์„œ jar ํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” Task โ†’ ๋งŒ๋“ค์–ด์ง„ ํŒŒ์ผ์€ build/libs์— ์ €์žฅ๋œ๋‹ค!

clean : ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œ ์‹œ, build ํน๋” ์•ˆ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํŒŒ์ผ๋“ค์ด ์ €์žฅ๋˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ํŒŒ์ผ๋“ค์„ ์ œ๊ฑฐํ•œ๋‹ค! ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ผฌ์˜€์„ ๋•Œ, ์ด๊ฑธ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ refreshํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค!

gradle Task์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ, ์‹คํ–‰ ํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ๊ณ„

gradle compileJava โ†’ gradle run โ†’ gradle jar : ํ”„๋กœ๊ทธ๋žจ์˜ ์ปดํŒŒ์ผ์„ ์ง„ํ–‰ โ†’ ํ”„๋กœ์ ํŠธ main ์‹คํ–‰ โ†’ ํ”„๋กœ์ ํŠธ์˜ jar ํŒŒ์ผ์„ ์ƒ์„ฑ

SpringBoot์—์„œ ์‚ฌ์šฉํ• ๋งŒํ•œ Task

bootRun : springboot ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” Task

bootJar / bootWar : jar / war๋กœ ํŒจํ‚ค์ง•์„ ํ•ด์ฃผ๋Š” Task

๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ ์ปค์Šคํ…€ํ•ด์„œ task์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ?

task์˜ ์„ ์–ธ

์‚ฌ์šฉํ•œ ์˜ˆ์‹œ

์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ cmd์—์„œ gradle hello์„ ์ž…๋ ฅํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฌผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค

์„ฑ๊ณต์ ์œผ๋กœ println 'THIS IS A TEST!!!!!' ์ด ์ถœ๋ ฅ ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

doFirst, doLast์„ ํ†ตํ•œ task ์ˆ˜ํ–‰ ์ˆœ์„œ ์กฐ์ •

์ด๋ ‡๊ฒŒ ์ƒˆ๋กœ์šด task ์„ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.

doFirst ๋ธ”๋Ÿญ ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ๋ฌธ์žฅ์ด ๊ฐ€์žฅ ๋จผ์ € ์ถœ๋ ฅ๋˜์•ผํ•˜๊ณ , doLast ๋ธ”๋Ÿญ ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ๋ฌธ์žฅ์ด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ถœ๋ ฅ๋˜์–ด์•ผํ•œ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š” First / sequence / Last ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•ด์•ผํ•จ!

์‹ค์ œ๋กœ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋„ ์ž˜ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. => -q ์˜ต์…˜์€ ๊ฒฐ๊ณผ๋ฌผ๋งŒ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก(๋ณด๊ธฐ ํŽธํ•˜๊ฒŒ) ๋‹ค๋ฅธ ์ถœ๋ ฅ๋“ค์„ ์ œ๊ฑฐํ•ด์ฃผ๋Š” ์—ญํ• 

task์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹คํ–‰ ๋ฐฉ๋ฒ•์€ ๊ทธ๋ƒฅ task๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜์ง€๋งŒ, ๋ณ€์ˆ˜๋Š” ๋’ค์— -P๋ณ€์ˆ˜๋ช…=๋ณ€์ˆ˜๊ฐ’ ์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋ฅผ ๋ถ™์—ฌ์ค˜์•ผ ํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

์‹คํ–‰ํ•  ๋•Œ๋Š” gradle ํƒœ์Šคํฌ๋ช… -P๋ณ€์ˆ˜๋ช…=๋ณ€์ˆ˜๊ฐ’

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์„œ ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค

Task์•ˆ์—์„œ ๋‹ค๋ฅธ Task์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

tasks.ํ˜ธ์ถœํ• task์ด๋ฆ„.execute()

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค๋ฅธ task์„ ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด์ฃผ๋ฉด after task์˜ doFirst์— ์˜ํ•ด์„œ bbb๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ  ๋‹ค์Œ์œผ๋กœ after๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

Last updated

Was this helpful?