Maven - MoonGyeongHyeon/Keyword_Study GitHub Wiki

Maven

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

Maven์€ ํ”„๋กœ์ ํŠธ์˜ ์ „์ฒด์ ์ธ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ์ด๋ฉฐ ๋งŽ์€ ํŽธ๋ฆฌํ•จ๊ณผ ์ด์ ๋“ค์ด ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ถ”์„ธ๋Š” Gradle๋กœ?

LifeCycle, Phase

Maven์—์„œ๋Š” ๋ฏธ๋ฆฌ ์ •์˜ํ•˜๊ณ  ์žˆ๋Š” ๋นŒ๋“œ ์ˆœ์„œ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด ์ˆœ์„œ๋ฅผ LifeCycle ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. ๋ผ์ดํ”„ ์‚ฌ์ดํด์˜ ๊ฐ ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ Phase ๋ผ๊ณ  ํ•œ๋‹ค. ๋˜ํ•œ ๊ฐ Phase๋Š” ์˜์กด ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • Clean : ์ด์ „ ๋นŒ๋“œ์—์„œ ์ƒ์„ฑ๋œ ํŒŒ์ผ๋“ค์„ ์‚ญ์ œํ•˜๋Š” ๋‹จ๊ณ„
  • Validate : ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜๊ณ  ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋‹จ๊ณ„
  • Compile : ํ”„๋กœ์ ํŠธ์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ ํ•˜๋Š” ๋‹จ๊ณ„
  • Test : ์œ ๋‹›(๋‹จ์œ„) ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ ํ•˜๋Š” ๋‹จ๊ณ„(ํ…Œ์ŠคํŠธ ์‹คํŒจ์‹œ ๋นŒ๋“œ ์‹คํŒจ๋กœ ์ฒ˜๋ฆฌ, ์Šคํ‚ต ๊ฐ€๋Šฅ)
  • Pacakge : ์‹ค์ œ ์ปดํŒŒ์ผ๋œ ์†Œ์Šค ์ฝ”๋“œ์™€ ๋ฆฌ์†Œ์Šค๋“ค์„ jar๋“ฑ์˜ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ํŒจํ‚ค์ง€๋กœ ๋งŒ๋“œ๋Š” ๋‹จ๊ณ„
  • Verify : ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ’ˆ์งˆ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋‹จ๊ณ„
  • Install : ํŒจํ‚ค์ง€๋ฅผ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์„ค์น˜ํ•˜๋Š” ๋‹จ๊ณ„
  • Site : ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„
  • Deploy : ๋งŒ๋“ค์–ด์ง„ package๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์— release ํ•˜๋Š” ๋‹จ๊ณ„

Phase์™€ Goal

Maven์—์„œ ์ œ๊ณต๋˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. Maven์€ LifeCycle์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” Phase๋งˆ์ €๋„ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•˜์—ฌ ์‹ค์งˆ์ ์ธ ์ž‘์—…์ด ์ˆ˜ํ–‰๋œ๋‹ค. ์ฆ‰, ๊ฐ๊ฐ์˜ Phase๋Š” ์–ด๋–ค ์ผ์„ ํ• ์ง€ ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ์–ด๋–ค ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ Goal์„ ์‹คํ–‰ํ• ์ง€ ์„ค์ •ํ•œ๋‹ค.

Maven์—์„œ๋Š” ํ•˜๋‚˜์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋ฉฐ, ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ(๋ช…๋ น)์„ Goal์ด๋ผ๊ณ  ํ•œ๋‹ค.

POM

pom์€ Project Object Model์˜ ์•ฝ์ž๋กœ, ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ Project Object Model์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํŒŒ์ผ์ด๋‹ค. ์ด ํŒŒ์ผ์—์„œ ์ฃผ์š”ํ•˜๊ฒŒ ๋‹ค๋ฃจ๋Š” ๊ธฐ๋Šฅ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

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

POM์€ pom.xml ํŒŒ์ผ์„ ๋งํ•˜๋ฉฐ Maven์˜ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ POM์ด ์‚ฌ์šฉ๋œ๋‹ค.