๐Ÿ“˜ Maven and Gradle

Maven ์†Œ๊ฐœ

  • ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ
  • ๋นŒ๋“œ ์ž๋™ํ™” ๊ธฐ๋Šฅ๊ณผ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณต
    • ํ”„๋กœ์ ํŠธ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) ๊ด€๋ฆฌ : porm.xmlํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ๊ด€๋ จ๋œ jarํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ํ•˜๊ณ  ๊ด€๋ฆฌ, ํ”„๋กœ์ ํŠธ ์‚ฐ์ถœ๋ฌผ์„ ์ผ๊ด€๋„๋‹ˆ ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌ
    • ๋นŒ๋“œ ์ž๋™ํ™” : ๋นŒ๋“œ ์ž‘์—…๋“ค์„ ๊ด€๋ฆฌํ•˜๊ณ  ์‰ฝ๊ฒŒ ๊ทธ๋ฆฌ๊ณ  ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ตํ•ฉ ํ™˜๊ฒฝ์„ ์ œ๊ณต, ๋นŒ๋“œ๋Š” ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์„ ์‹คํ–‰ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •

ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ

  • ์ผ๋ฐ˜ ๊ฐœ๋ฐœ์ž ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ์„ค์ •๋“ค์„ ๋ฉ”์ด๋ธ์ด ๋ฏธ๋ฆฌ ์ •์˜ํ•œ ์„ค์ •๋“ค๋กœ ๋Œ€์ฒดํ•œ๋‹ค.
  • ์ •ํ˜•ํ™”๋œ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ๊ด€๋ฆฌ(porm.xml)
  • ์˜์กด์„ฑ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ : ํŽธ๋ฆฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ
  • ๋นŒ๋“œ ํ”„๋กœ์…‹์Šค๋ฅผ ๊ด€๋ฆฌ : ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •์„ ํ†ตํ•œ ๋นŒ๋“œ ์ž๋™ํ™”

์˜์กด ๊ด€๊ณ„(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)์„ค์ • (porm.xml)

  • ํ”„๋กœ์ ํŠธ ๋‹น ํ•œ ๊ฐœ์˜ porm.xmlํŒŒ์ผ ๊ด€๋ฆฌ
    • ๋ชจ๋“  POM์€ Super Pom(๊ธฐ๋ณธ POM)์œผ๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›๋Š”๋‹ค
      • Super POM์€ ๊ธฐ๋ณธ ์„ค์ • ์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค
      • Super POM์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด POM์—์„œ ์˜ค๋ฐ”๋ผ์ด๋“œ ํ•œ๋‹ค.
  • ์ตœ์ƒ์œ„ ์—˜๋ฆฌ๋จผํŠธ : project
  • 3๊ฐœ์˜ ํ•„์ˆ˜ ํ•„๋“œ๋ฅผ ๊ฐ€์ง
    • groupid : ํ”„๋กœ์ ํŠธ ์กฐ์ง ๊ณ ์œ  ๋„๋ฉ”์ธ
    • artifactid : ํ”„๋กœ์ ํŠธ ๋ช…
    • version : ํ”„๋กœ์ ํŠธ ๋ฒ„์ „
  • ํ”„๋กœ์ ํŠธ ์˜์กด๊ด€๊ณ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ : dependecy

๋นŒ๋“œ ์„ค์ •

  • ํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ ์ •๋ณด, ์ €์žฅ์†Œ,ํ”„๋กœํผํ‹ฐ,๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ
  • ํ”Œ๋Ÿฌ๊ทธ์ธ
  • ๊ณจ

Maven Repositroy

  • ๋ฉ”์ด๋ธ ์ €์žฅ์†Œ๋Š” ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ jar ํŒŒ์ผ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ jarํŒŒ์ผ๋“ค์ด ์œ„์น˜ํ•˜๋ฉฐ 3๊ฐ€์ง€ ํƒ€์ž…์ด ์žˆ๋‹ค.
    1. ์ง€์—ญ(local)์ €์žฅ์†Œ : ๋กœ์ปฌ ์ €์žฅ์†Œ๋Š” ๋ฉ”์ด๋ธ์„ ๋นŒ๋“œํ•  ๋•Œ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ €์žฅ์†Œ ์ด๋‹ค.
    2. ์ค‘์•™ ์ €์žฅ์†Œ : ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋ฉ”์ด๋ธ ํ”Œ๋Ÿฌ๊ทธ์ธ , ๋ฉ”์ด๋ธ ์•„ํ‚คํƒ€์ž…์„ ๊ด€๋ฆฌํ•˜๋Š” ์ €์žฅ์†Œ์ด๋‹ค.
    3. ์›๊ฒฉ ์ €์žฅ์†Œ : ๋ฉ”์ด๋ธ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฉ”์ด๋ธ ์ค‘์•™ ์ €์žฅ์†Œ์— ์กด์žฌํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ์ค‘์•™ ์ €์žฅ์†Œ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋ณ„๋„์˜ ๋ฉ”์ด๋ธ ์ €์žฅ์†Œ๋ฅผ ์„ค์น˜ํ•ด ๊ด€๋ฆฌํ•˜๋Š”๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฉ”์ด๋ธ ์˜์กด์„ฑ ๊ฒ€์ƒ‰ ์ ˆ์ฐจ

1๋‹จ๊ณ„ : ์ง€์—ญ ์ €์žฅ์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค. ์ฐพ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ 2๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ„๋‹ค 2๋‹จ๊ณ„ : ์ค‘์•™ ์ €์žฅ์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค. ์ฐพ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ง€์—ญ ์ €์žฅ์†Œ์— ์ €์žฅํ•œ๋‹ค. ๋งŒ์•ฝ ์ฐพ๋Š”๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—†์„๊ฒฝ์šฐ 3๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ๋งŒ์•ฝ ์›๊ฒฉ ์ €์žฅ์†Œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์ข…๋ฃŒํ•œ๋‹ค 3๋‹จ๊ณ„ : ์›๊ฒฉ์ €์žฅ์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค. ์ฐพ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ง€์—ญ ์ €์žฅ์†Œ์— ์ €์žฅํ•œ๋‹ค. ๋งŒ์•ฝ ์ฐพ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.

๋นŒ๋“œ ์ž๋™ํ™” ๊ธฐ๋Šฅ

  • ๋ฉ”์ด๋ธ์€ ์†Œํ”„ํŠธ์›จ์–ด ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„ ์›Œํฌ
    • ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •์„ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ์œ„์ž„
  • ๋นŒ๋“œ ๋‹จ๊ณ„(์ปดํŒŒ์ผ,ํ…Œ์ŠคํŠธ,ํŒจํ‚ค์ง•,๋ฐฐํฌ)๋“ค์„ ๋นŒ๋“œ ๋ผ์ดํ”„ ์‚ฌ์ดํด์ด๋ผ๊ณ ํ•œ๋‹ค.
  • ๊ฐ ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…์„ ๊ณจ ์ด๋ผ๊ณ ํ•œ๋‹ค
  • ์‹ค์ œ ๊ณจ์€ ๊ทธ ๋‹จ๊ณ„์— ์—ฐ๊ฒฐ๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜ํ•ด ์‹คํ–‰๋œ๋‹ค.

Maven ๋นŒ๋“œ ๋ผ์ดํ”„ ์‚ฌ์ดํด

  • ๋ผ์ดํ”„ ์‚ฌ์ดํด์€ ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ๋นŒ๋“œ ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • Maven์€ build,clean,site3๊ฐœ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์ด ์žˆ๋‹ค.
  • build ๋ผ์ดํ”„ ์‚ฌ์ดํด์€ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์˜ ํŽ˜์ด์ฆˆ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ ํŽ˜์ด์ฆˆ๋Š” ์˜์กด๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„๋‹ค, compile,test,package,deploy์ˆœ์„œ๋กœ ์ง„ํ–‰๋œ๋‹ค
  • clean๋ผ์ดํ”„์‚ฌ์ดํด์€ cleanํŽ˜์ด์ฆˆ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด์ „ ๋นŒ๋“œ์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ํŒŒ์ผ๋“ค์„ ์‚ญ์ œํ•œ๋‹ค
  • site๋ผ์ดํ”„ ์‚ฌ์ดํด์€ site,site-deployํŽ˜์ด์ฆˆ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ๋ฌธ์„œ๋“ค์„ ๋Œ€์ƒ ์‚ฌ์ดํŠธ์— ๋ฐฐํฌํ•œ๋‹ค.

์ผ๋ถ€ ๋‹จ๊ณ„

๋ฆฌ์†Œ์Šค ์ค€๋น„ : ๋ฆฌ์†Œ์Šค๊ฐ€ ์ค€๋น„๋˜์–ด ๋ณต์‚ฌ๋œ๋‹ค. ์ปดํŒŒ์ผ : ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•œ๋‹ค. ํ…Œ์ŠคํŠธ : junit๊ณผ ๊ฐ™์€ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธํ•œ๋‹ค ํŒจํ‚ค์ง€ : porm.xml์˜ ์—˜๋ฆฌ๋จผํŠธ๊ฐ’(jar,war,ear)๋“ฑ์— ๋”ฐ๋ผ ์••์ถ•ํ•œ๋‹ค ์ธ์Šคํ†จ : ํŒจํ‚ค์ง€๋ฅผ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ๋ฐฐํฌํ•œ๋‹ค ๋ฐฐํฌ : ์›๊ฒฉ ๋ฉ”์ด๋ธ ์ €์žฅ์†Œ์— ์••์ถ•ํ•œ ํŒŒ์ผ์„ ๋ฐฐํฌํ•œ๋‹ค.

Maven Phase & Goal

  • ๋นŒ๋“œ ๋ผ์ดํ”„์‚ฌ์ดํด์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ณจ์„์ˆ˜ํ–‰ํ•˜๋Š” ํŽ˜์ด์ง€๋“ค๋กœ ๊ตฌ์„ฑ
  • ๊ฐ ํŽ˜์ด์ฆˆ ๋ณ„๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด ์ž‘์—…์„ Goal์ด๋ผ๊ณ  ํ•œ๋‹ค.

Maven Plugin

  • ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ๋“ค์„ ํ”Œ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด์„œ ์ œ๊ณต๋œ๋‹ค
  • clean : ๋นŒ๋“œ ์ดํ›„์— target๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ญ์ œํ•œ๋‹ค
  • compiler : ์ž๋ฐ” ์†Œ์Šค ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•œ๋‹ค.
  • surefile : junit ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๋ฆฌํฌํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
  • jar : ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋กœ๋ถ€ํ„ฐ jar file๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
  • war : ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋กœ๋ถ€ํ„ฐ warfile๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
  • javadoc : ํ”„๋กœ์ ํŠธ์˜ javadoc๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
  • antrun : ๋นŒ๋“œ ํŽ˜์ด์ง€ ๋‹จ๊ณ„์—์„œ ํŠน์ • ant ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค.

Gradle๊ฐœ์š”

  • JVM์—์„œ ์‹คํ–‰
  • Maven์ฒ˜๋Ÿผ Convention(๊ทœ๋ฒ”)์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ๊ณผ ๋นŒ๋“œ ์ˆ˜ํ–‰
  • Maven์ฒ˜๋Ÿผ ์ €์žฅ์†Œ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ์ œ๊ณต
  • ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ ์ธ ์ œ๊ณต
  • ๋นŒ๋“œ ์„ค์ • ์Šคํฌ๋ฆฝํŠธ๋ฅผ Grovy๊ธฐ๋ฐ˜์˜ DSL์‚ฌ์šฉ
  • Gradle ์„ค์น˜ ์—†์ด Gradle Wrapper๋ฅผ ์ด์šฉํ•˜์—ฌ ๋นŒ๋“œ ์ง€์›
  • ๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ : ํ•˜๋‚˜์˜ repository๋‚ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑ

๊ตฌ์กฐ

gradle-wrapper.jar : gradel task๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ WrapperํŒŒ์ผ . Wrapper๋Š” ์„ ์–ธ๋œ ๋ฒ„์ „์˜ gradle์„ ํ˜ธ์ถœํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฏธ๋ฆฌ ๋‹ค์šด๋กœ๋“œ . ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ๋นŒ๋“œ ๊ฐ€๋Šฅ gradle-wrapper.properties : gradle wrapper ์„ค์ • ์ •๋ณด ํŒŒ์ผ build.gradle : ํ”„๋กœ์ ํŠธ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ, ํ”Œ๋Ÿฌ๊ทธ์ธ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ €์žฅ์†Œ ๋“ฑ์„ ์„ค์ • ํ•  ์ˆ˜ ์žˆ๋Š” ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ Gradlew : ๋ฆฌ๋ˆ…์Šค ๋˜๋Š” ๋งฅOS์šฉ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ gradlew.bat : ์œˆ๋„์šฐ์šฉ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ setting.gradle : ํ”„๋กœ์ ํŠธ์˜ ์„ค์ • ์ •๋ณด ํŒŒ์ผ

build.gradle ์„ค์ •

  • plugin : ์ž‘์—… ์ˆ˜ํ–‰ ํ™˜๊ฒฝ์„ ๋ช…์‹œ
  • Version ๋ฐ Group : ํŒจํ‚ค์ง€ ์ƒ์˜ ์ ์šฉ ๋ฒ”์œ„์™€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „ , java๋ฒ„์ „์„ ๋ช…์‹œ
  • profile : ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋”ฐ๋ฅธ profileํ™˜๊ฒฝ ํŒŒ์ผ
  • buildscript : ์•ž์„œ ์„ ์–ธํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌ
  • dependencies(library) : ๊ธฐ๋ณธ์ ์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ด์™ธ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ ๊ด€๋ฆฌ

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: