Maven๊ณผ Gradle

niireymikยท2024๋…„ 1์›” 9์ผ
0

๐Ÿ’ก
Maven๊ณผ Gradle์€ ๋Œ€ํ‘œ์ ์ธ ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ์ด๋‹ค. ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ ์–ด๋–ป๊ฒŒ ๋ฐœ์ „ํ•ด ์™”๋Š”์ง€ ์ดํ•ดํ•˜๊ณ , Maven๊ณผ Gradle์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž :>

๐Ÿ“Œ ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ๋ž€?

  • ๋นŒ๋“œ(Build)
    ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์œผ๋กœ์„œ, ์ปดํŒŒ์ผ๊ณผ ๋งํ‚น ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•œ๋‹ค(์†Œ์Šค ์ฝ”๋“œ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์„ ๋ชจ์•„ ์‹คํ–‰ ํŒŒ์ผ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋‹ค).

  • ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ
    : ๋นŒ๋“œ์™€ ๋”๋ถˆ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ, ํ…Œ์ŠคํŒ… ๋“ฑ์„ '์ž๋™ํ™”'ํ•˜์—ฌ ์ˆ˜ํ–‰ํ•ด ์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.

  • ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 
    • ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ž๋™ํ™”ํ•ด ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง์ ‘ ๋‹ค์šด๋กœ๋“œ ๋ฐ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค.
    • ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ์„ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.

๐Ÿ“Œ ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ์˜ ์—ญ์‚ฌ

1์„ธ๋Œ€ Make

: ์œ ๋‹‰์Šค ๊ณ„์—ด OS(์šด์˜์ฒด์ œ)์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ

  • ๋นŒ๋“œ์˜ ๊ฐœ๋…์„ ์ฒ˜์Œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด Make์ด๋‹ค.
  • ์ฃผ๋กœ Makefile์ด๋ผ๋Š” ํŒŒ์ผ๋ช…์„ ๊ฐ€์ง„๋‹ค.
  • C์–ธ์–ด๋กœ ๊ฐœ๋ฐœ๋œ ์†Œํ”„ํŠธ์›จ์–ด์—์„œ๋Š” ํ˜„์žฌ๋„ Make๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

2์„ธ๋Œ€ Ant

: ์ž๋ฐ” ์–ธ์–ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ž๋™ํ™”๋œ ์†Œํ”„ํŠธ์›จ์–ด ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ

  • 1990๋…„๋Œ€ ๋“ฑ์žฅํ•œ Java์— Make๋ฅผ ์ ์šฉํ•˜๋ ค๋‹ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด Ant๊ฐ€ ๋“ฑ์žฅํ–ˆ๋‹ค.
  • XML ๊ธฐ์ˆ ์„ ๋„์ž…ํ•ด(๊ธฐ๋ณธ์ ์ธ ํŒŒ์ผ๋ช…์€ build.xml) ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ์„ ํ™•๋ณดํ–ˆ๋‹ค.
  • ๊ฐ„๋‹จํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žฅํ™ฉํ•ด์ง„๋‹ค.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด๊ด€๊ณ„๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์—†์–ด์„œ[๋นŒ๋“œ์˜ ๊ธฐ๋Šฅ'๋งŒ' ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ] ์ˆ˜์ž‘์—…์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๊ณ ์ƒ์ด ์žˆ์—ˆ๋‹ค.

3์„ธ๋Œ€ Maven

: ์ž๋ฐ” ์–ธ์–ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋„๊ตฌ

  • Ant์˜ ๋Œ€์•ˆ์œผ๋กœ์„œ ๋งŒ๋“ค์–ด์ง„ ๋„๊ตฌ : Ant์™€ ๋™์ผํ•˜๊ฒŒ XML์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, POM(ํ”„๋กœ์ ํŠธ ๊ฐ์ฒด ๋ชจ๋ธ)์„ ๋„์ž…ํ•˜๋ฉด์„œ '์žฅํ™ฉํ•œ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ' ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

4์„ธ๋Œ€ Gradle

: ๊ทธ๋ฃจ๋น„(Groovy)๋ฅผ ์ด์šฉํ•œ ๋นŒ๋“œ ์ž๋™ํ™” ์‹œ์Šคํ…œ
(๊ทธ๋ฃจ๋น„(Groovy) - ์ž๋ฐ”์— ํŒŒ์ด์ฌ, ๋ฃจ๋น„, ์Šค๋ชฐํ† ํฌ ๋“ฑ์˜ ํŠน์ง•์„ ๋”ํ•œ JVM์˜ ๋™์  ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด)

  • XML์—์„œ ๋ฒ—์–ด๋‚˜ (Make์ฒ˜๋Ÿผ) ์Šคํฌ๋ฆฝํŠธ๋กœ ํšŒ๊ท€ํ•˜๋ฉฐ ์œ ์—ฐ์„ฑ์„ ๋†’์˜€๋‹ค.

๐Ÿ“Œ ๋ฉ”์ด๋ธ(Maven)

Maven์€ ์•ž์„œ ์‚ดํŽด๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ, Ant์˜ ๋Œ€์•ˆ์œผ๋กœ ๋“ฑ์žฅํ•œ Java์˜ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋„๊ตฌ์ด๋‹ค. POM(Project Object Model)์˜ ๊ฐœ๋…์„ ๋„์ž…ํ•ด ํ”„๋กœ์ ํŠธ์˜ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ , Lifecycle์˜ ๊ฐœ๋…์˜ ๋„์ž…์œผ๋กœ ์œ ์ง€๋ณด์ˆ˜์˜ ํŽธ๋ฆฌ์„ฑ์„ ๋†’์ธ ๊ฒƒ์ด ๊ฐ€์žฅ ๋‘๋“œ๋Ÿฌ์ง€๋Š” ํŠน์ง•์ด๋‹ค. ์ด ๊ฐœ๋…๋“ค์€ ์•„๋ž˜์—์„œ ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ž.

๋ฉ”์ด๋ธ์˜ POM

: Project Object Model(ํ”„๋กœ์ ํŠธ ๊ฐ์ฒด ๋ชจ๋ธ)๋กœ, ํ”„๋กœ์ ํŠธ์˜ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด ๋ชจ๋ธ์ด๋ฉฐ, pom.xml ํŒŒ์ผ์„ ๋งํ•œ๋‹ค.
(ํ•˜๋‚˜์˜ ์ž๋ฐ” ํ”„๋กœ์ ํŠธ์— ๋นŒ๋“œ ํˆด์„ Maven์œผ๋กœ ์„ค์ •ํ•˜๋ฉด, ํ”„๋กœ์ ํŠธ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ(root)์— "pom.xml"์ด๋ผ๋Š” ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.)
Maven์˜ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๋Š” POM์€ ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค 1๊ฐœ๋งŒ ์กด์žฌํ•˜๋ฉฐ, pom.xml๋งŒ ๋ณด๋ฉด ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ์„ค์ •, ์˜์กด์„ฑ ๋“ฑ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ์ •๋ณด๊ฐ€ pom.xml ํŒŒ์ผ์— ๋“ค์–ด ์žˆ๊ธฐ์— pom ํŒŒ์ผ์ด ์กด์žฌํ•ด์•ผ ๋นŒ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

pom.xml์— ๋“ค์–ด๊ฐ€๋Š” ๋‚ด์šฉ

  • ๊ธฐ๋ณธ ์ •๋ณด : ํ”„๋กœ์ ํŠธ ์ •์˜, ์—ฐ๊ด€ ์ •๋ณด
  • ํ”„๋กœ์ ํŠธ ์ •๋ณด(์„ ํƒ)
  • ๋นŒ๋“œ ์„ค์ • : ๋นŒ๋“œ ์ •์˜, ๋ฆฌํฌํŠธ ์ •์˜
  • ํ™˜๊ฒฝ์„ค์ •(์„ ํƒ)
    (+) project, modelVersion, groupId, artifactId, version ์ด 5๊ฐ€์ง€๋Š” ๋ฉ”์ด๋ธ์ด ํ—ˆ์šฉํ•œ ์ตœ์†Ÿ๊ฐ’์ด๋‹ค.

pom.xml์˜[Maven์˜] ํƒœ๊ทธ(tag)

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>maven-pom-project</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>

pom.xml ํŒŒ์ผ์€ ์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ, ํƒœ๊ทธ<>๋ฅผ ์‚ฌ์šฉํ•ด ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. ๋‹ค์Œ์€ POM์˜ ๋Œ€ํ‘œ์ ์ธ ํƒœ๊ทธ๋“ค์ด๋‹ค.

  • project : ํ”„๋กœ์ ํŠธ์˜ ์ •๋ณด๋ฅผ ๊ธฐ์ˆ ํ•œ๋‹ค.
  • modelVersion : maven์˜ ๋ฒ„์ „์„ ์˜๋ฏธ
  • groupId : ํ”„๋กœ์ ํŠธ ๊ทธ๋ฃน Id๋ฅผ ๋œปํ•˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€ํ‘œํ•˜๋Š” ์‚ฌ์ดํŠธ ๋„๋ฉ”์ธ์„ ์—ญ์ˆ ๋กœ ์ ์–ด ์‚ฌ์šฉ(ex. tukorea.tino -> tino.tukorea)
  • artifactId : groupId ์™ธ์— ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์™€๋Š” ๊ตฌ๋ถ„๋  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜ Id๋ฅผ ์ž‘์„ฑ
  • version : ํ”„๋กœ์ ํŠธ์˜ ๋ฒ„์ „์„ ์˜๋ฏธํ•˜๋ฉฐ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž‘์„ฑ
  • name : ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„
  • description : ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ๊ฐ„๋žตํ•œ ์„ค๋ช…์„ ์ž‘์„ฑ
  • properties : pom.xml ํŒŒ์ผ ๋‚ด์—์„œ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ์ค‘๋ณต ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ์˜์—ญ (ํ•ด๋‹น ์˜์—ญ์˜ ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ${ํƒœ๊ทธ๋ช…}์˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.)
  • dependencies : ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์˜์กด์„ฑ์„ ๊ฐ€์ง€๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ •์˜ํ•˜๋Š” ์˜์—ญ (๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งˆ๋‹ค dependenncy ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ๋ถ„ํ•œ๋‹ค.)
    // ์‚ฌ์‹ค์ƒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„. ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์•„์ด๋””๋ฅผ ๊ธฐ์ž…ํ•ด ์คŒ์œผ๋กœ์จ ์˜์กด์„ฑ์„ ๋ถ€์—ฌํ•ด ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค!
  • build : ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์„ค์ •ํ•˜๋Š” ์˜์—ญ
    // ์–ด๋–ค ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด๋‚ผ์ง€, ์–ด๋–ค ์‹์œผ๋กœ ๋ฐฐํฌํ• ์ง€ ์ •ํ•ด๋‘๋Š” ๊ฒƒ์ด๋‹ค.

๋ฉ”์ด๋ธ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด(Lifecycle)

๋ฉ”์ด๋ธ์€ ํ”„๋ ˆ์ž„์›Œํฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—… ๋ฐฉ์‹์ด ์ •ํ•ด์ ธ์žˆ๊ณ , ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ๋นŒ๋“œ ์ˆœ์„œ๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ๋ผ์ดํ”„์‚ฌ์ดํด(Lifecycle)์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋ผ์ดํ”„์‚ฌ์ดํด์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ์œ„ํ•ด, ๋‹ค์Œ์˜ ์šฉ์–ด๋“ค์„ ์šฐ์„ ์ ์œผ๋กœ ์‚ดํŽด๋ณด์ž.

  • Phase : ๋นŒ๋“œ ๋ผ์ดํ”„์‚ฌ์ดํด์˜ ๊ฐ ๋‹จ๊ณ„
  • Plugin : ๊ฐ Phase์—์„œ ์‹คํ–‰๋˜๋Š” ๋„๊ตฌ๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ
  • Goal : ํŠน์ • ์ž‘์—… [์ตœ์†Œํ•œ์˜ ์‹คํ–‰ ๋‹จ์œ„]

๐Ÿ’ก ์„ค๋ช…์„ ๋ถ™์ด์ž๋ฉด, ์‚ฌ์šฉ์ž๋Š” ํ•„์š”์— ๋”ฐ๋ผ ๊ฐ ํŽ˜์ด์ฆˆ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•˜๋‚˜์˜ ํ”Œ๋Ÿฌ๊ทธ ์•ˆ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค. ๊ฐ ํŽ˜์ด์ฆˆ๋Š” ์˜์กด๊ด€๊ณ„(Dependency)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๋ฉฐ, ํŽ˜์ด์ฆˆ์— ์•„๋ฌด๋Ÿฐ Goal์ด ์—†๋‹ค๋ฉด ํ•ด๋‹น ํŽ˜์ด์ฆˆ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.
phase๋Š” ๋นŒ๋“œ ์ˆœ์„œ์— ๋งž๊ฒŒ ์ง€์ •์ด ๋ผ์žˆ์œผ๋ฏ€๋กœ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ๋ฐ”๊ฟ€ ํ•„์š”๋„ ์—†๋‹ค. ๋Œ€์‹  phase๋‹จ๊ณ„์— ์ˆ˜ํ–‰ํ•  ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๊ณ  ์‹ถ์œผ๋ฉด phase์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” goal์„ ์ˆ˜์ •ํ•จ์œผ๋กœ Maven์„ ์œ ์—ฐํ•˜๊ฒŒ ํ™•์žฅ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค(ํŽ˜์ด์ฆˆ ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ๊ฐ๊ฐ์—๋Š” Goal์ด ์žˆ๋‹ค).

Maven์—์„œ๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€์˜ Lifecycle์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฐ๊ฐ์˜ Build Lifecycle์€ ์‚ฌ์ „์— ์ •์˜๋œ ์ž‘์€ Phase๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋‹ค์Œ์€ 3๊ฐ€์ง€ Lifecycle์ธ Clean, Default, Site์™€ ๊ฐ ๋ผ์ดํ”„์‚ฌ์ดํด์˜ ์ฃผ์š” ๋‹จ๊ณ„๋ฅผ ์ •๋ฆฌํ•œ ๊ฒƒ์ด๋‹ค.

[Lifecycle - Clean]
์—ญํ•  : Maven์˜ ๊ฒฐ๊ณผ๋ฌผ/์‚ฐ์ถœ๋ฌผ ์ œ๊ฑฐ

  • Clean : ์ด์ „ ๋นŒ๋“œ์—์„œ ์ƒ์„ฑ๋œ ํŒŒ์ผ๋“ค์„ ์‚ญ์ œ
    (๊ธฐ๋ณธ์ ์œผ๋กœ Maven์€ {project๊ฒฝ๋กœ}/target ํด๋”๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฐ์ถœ๋ฌผ์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น goal์ด ์‹คํ–‰๋˜๋ฉด target ํด๋”๋ฅผ ์‚ญ์ œํ•œ๋‹ค.)

[Lifecycle - Default]
์—ญํ•  : ์†Œ์Šค์ฝ”๋“œ ์ปดํŒŒ์ผ, ํ…Œ์ŠคํŠธ, ์••์ถ•(ํŒจํ‚ค์ง•), ๋ฐฐํฌ

  • compile : ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ์ž๋ฐ”์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ์ฝ”๋“œ(*.class)๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  • test : JUnit๊ณผ ๊ฐ™์€ ๋‹จ์œ„ํ…Œ์Šคํฌ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋นŒ๋“œ ์‹คํŒจ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.
  • package : pom.xml์˜ ๊ฐ’(jar, war ๋“ฑ)์— ๋”ฐ๋ผ ์••์ถ•ํ•œ๋‹ค.
  • install : ๋กœ์ปฌ ์ €์žฅ์†Œ(๊ฐœ์ธ PC)์— ์••์ถ•ํ•  ํŒŒ์ผ์„ ๋ฐฐํฌํ•œ๋‹ค.
  • deploy : ์›๊ฒฉ ์ €์žฅ์†Œ์— ์••์ถ•ํ•œ ํŒŒ์ผ์„ ๋ฐฐํฌํ•œ๋‹ค.

[Lifecycle - Site]
์—ญํ•  : ํ”„๋กœ์ ํŠธ์˜ ๋„ํ๋จผํŠธ ์‚ฌ์ดํŠธ๋ฅผ ์ƒ์„ฑ

  • site : Maven ์„ค์ • ํŒŒ์ผ ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฌธ์„œํ™”ํ•œ ๊ฐ„๋‹จํ•œ ์›น์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
  • site-deploy : ์ƒ์„ฑ๋œ ๋ฌธ์„œ ์‚ฌ์ดํŠธ๋ฅผ ์„ค์ •๋œ ์„œ๋ฒ„์— ๋ฐฐํฌํ•œ๋‹ค.

๐Ÿ“Œ ๊ทธ๋ž˜๋“ค(Gradle)

Gradle์€ JVM์˜ Groovy ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์šฉํ•œ ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ๋กœ, Ant์™€ Maven๋ฅผ ๋ณด์™„ํ•œ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ๋ฐ˜์˜ build ์ž๋™ํ™” ์‹œ์Šคํ…œ์ด๋‹ค.

XML์„ ์‚ฌ์šฉํ•œ Ant, Maven๊ณผ ๋‹ฌ๋ฆฌ Gradle์€ ๊ธฐ์กด์˜ (1์„ธ๋Œ€) Make์™€ ๊ฐ™์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋™์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ณ , ์ถ”๊ฐ€์ ์ธ ๋กœ์ง์„ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์Šคํฌ๋ฆฝํŠธ ๋กœ์ง์„ ์ง์ ‘ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ ๊ทธ๋ž˜๋“ค์˜ ํŠน์ง•

  • ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ์˜ ํ‘œ์ค€ ๋นŒ๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ฑ„ํƒ
  • ๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ(Multi-Project)์˜ ๋นŒ๋“œ์— ์ตœ์ ํ™”ํ•˜์—ฌ ์„ค๊ณ„๋จ
  • Maven์— ๋น„ํ•ด ๋” ๋น ๋ฅธ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ(์ตœ๋Œ€ 100๋ฐฐ)
  • Maven์— ๋น„ํ•ด ๋” ๊ฐ„๊ฒฐํ•œ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•จ // ์•„๋ฌด๋ž˜๋„ Groovy Script๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— xml์˜ ํƒœ๊ทธ์™€ ์œ„์ƒ์— ๋Œ€ํ•œ ์ •๋ ฌ์ด ์—†์œผ๋ฏ€๋กœ!

๐Ÿ“Œ Maven / Gradle ๋น„๊ต

  • Maven์€ XML์„ ์‚ฌ์šฉ, Gradle์€ Groovy Script๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • Gradle์˜ ์„ฑ๋Šฅ์ด ๋” ๋›ฐ์–ด๋‚˜๋‹ค.
  • Gradle์˜ ๊ตฌ์„ฑ์ด ๋”์šฑ ๊ฐ„๊ฒฐํ•ด ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ์œ ๋ฆฌํ•˜๋‹ค.

๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€, XML์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Gradle์ด ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, Gradle์€ Groovy๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— (XML์ด ์•„๋‹Œ Java๋กœ ์“ธ ์ˆ˜ ์žˆ์–ด์„œ) ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹ค์Œ์˜ ์˜ˆ์‹œ๋Š” '๊ฐ„๊ฒฐํ•จ'์— ๋Œ€ํ•œ ์ง๊ด€์  ์ดํ•ด๋ฅผ ๋•๋Š”๋‹ค.

์˜์กด๊ด€๊ณ„ ํ‘œํ˜„ ์˜ˆ์‹œ : Maven๊ณผ Gradle

๋‹ค์Œ์˜ ์ฒซ ๋ฒˆ์งธ ์‚ฌ์ง„์€ XML๋กœ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•œ ๊ฒƒ, ๋‘ ๋ฒˆ์งธ ์‚ฌ์ง„์€ Groovy๋กœ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•œ ๊ฒƒ์ด๋‹ค. ๋‘˜์€ ๋™์ผํ•œ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋‹ค.


์ด์ฒ˜๋Ÿผ Groovy๋ฅผ ์‚ฌ์šฉํ•œ Gradle(ํ›„์ž)์˜ ํ‘œํ˜„ ๋ฐฉ์‹์ด ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•จ์„ ํ•œ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฝ”๋“œ์˜ ๊ธธ์ด๊ฐ€ ์งง๊ณ , ๊ฐ€๋…์„ฑ๋„ ๋†’๋‹ค. ๊ธธ์ด ์ž์ฒด๊ฐ€ ์งง์œผ๋ฏ€๋กœ ์ปดํ“จํ„ฐ์—์„œ๋„ ๋” ๋นจ๋ฆฌ ์ฝ์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์ด Maven๊ณผ Gradle์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์ด๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด Gradle์€ ์•ž์„  ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ๋“ค์ธ Make, Ant, Maven์˜ ์žฅ๋‹จ์ ์„ ์ ˆ์ถฉํ•ด ๋งŒ๋“ค์–ด๋‚ธ ๊ฒฐ๊ณผ๋ฌผ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์ฒ˜๋Ÿผ Gradle์€ Maven๋ณด๋‹ค๋„ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ๊ณผ ํ™•์‹คํ•œ ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ๊นŒ์ง€ Maven์ด ์ฃผ๋กœ ์‚ฌ์šฉ๋˜์–ด ์™”๊ธฐ์— ํ˜„์žฌ๋Š” Gradle๋ณด๋‹ค Maven์˜ ์ ์œ ์œจ์ด ๋” ๋†’์€ ์ƒํ™ฉ์ด๋‹ค. ๋ฌผ๋ก  Gradle์˜ ์ ์œ ์œจ๋„ ์˜ค๋ฅด๋Š” ์ค‘์ด๊ธฐ์—, Maven๊ณผ Gradle ๋ชจ๋‘ ์•Œ์•„๋‘ ์ด ์ข‹๊ฒ ๋‹ค.

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด