Maven(๋ฉ์ด๋ธ)
1. ๋น๋(Build)
- ์์ค ํ์ผ์ ์ปดํจํฐ์์ ์คํํ ์ ์๋ ๋ ๋ฆฝ ์ํํธ์จ์ด ๊ฐ๊ณต๋ฌผ๋ก ๋ณํํ๋ ๊ณผ์ ๋๋ ๊ทธ์ ๋ํ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค.
- ์์ฑํ ์์ค(.java), ํ๋ก์ ํธ์์ ์ฐ์ธ ํ์ผ ๋ฐ ์์(.xml, .jpg, .jar, .properties)์ JVM์ด๋ ํฐ์บฃ ๊ฐ์ WAS๊ฐ ์ธ์ํ ์ ์๋ ๊ตฌ์กฐ๋ก ํจํค์ง ํ๋ ๊ณผ์ ๋ฐ ๊ฒฐ๊ณผ๋ฌผ์ด๋ผ๊ณ ํ ์ ์๋ค.
1) ๋น๋ ๋๊ตฌ(Build Tool)๋?
- ํ๋ก์ ํธ ์์ฑ, ํ ์คํธ ๋น๋, ๋ฐฐํฌ ๋ฑ์ ์์ ์ ์ํ ์ ์ฉ ํ๋ก๊ทธ๋จ์ด๋ค.
- ๊ณ์ํด์ ๋์ด๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถ๊ฐ, ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ๋๊ธฐํ์ ์ด๋ ค์์ ํด์ํ๋ค.
- ์ต๊ทผ ๋ํ์ ์ธ ๋น๋ ๋๊ตฌ๋ก๋ Maven, Gradle์ด ์๋ค.
- ๋ณต์กํ ํ๋ก์ ํธ, ๋ฉํฐ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ๋ Gradle์ด ๋ง์ด ์ฌ์ฉ๋๋ค.
2. Maven
- ์๋ฐ ํ๋ก์ ํธ์ฉ ๊ด๋ฆฌ ๋๊ตฌ๋ก ์ด๊ธฐ ๋ง์ด ์ฌ์ฉ๋๋ Apache Ant์ ๋์์ผ๋ก ๋ง๋ค์ด์ก๋ค.
- ํ๋ก์ ํธ์ ์ ์ฒด์ ์ธ ๋ผ์ดํ ์ฌ์ดํด์ ๊ด๋ฆฌํ๋ ๋๊ตฌ์ด๋ฉฐ, ๋ง์ ํธ๋ฆฌํจ์ด ์กด์ฌํด ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์๋ค.
- ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํน์ ๋ฌธ์(pom.xml)์ ์ ์ํด ๋์ผ๋ฉด ๋ด๊ฐ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฟ๋ง ์๋๋ผ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ํ๋ ๋ฐ์ ํ์ํ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๊น์ง ๊ด๋ฆฌํ์ฌ ๋คํธ์ํฌ๋ฅผ ํตํด์ ์๋์ผ๋ก ๋ค์ด๋ก๋ํ์ฌ ์ค๋ค.
- ์ค์ ์ ์ฅ์๋ฅผ ํตํ ์๋ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ์ค์ ์ ์ฅ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ ํ์ผ ์๋ฒ๋ผ๊ณ ๋ณผ ์ ์๊ณ , Maven์ ์๊ธฐ ํ์ฌ๋ง์ ์ค์ ์ ์ฅ์๋ฅผ ๊ตฌ์ถํ ์๋ ์๋ค.
- ๊ฐ๋จํ ์ค์ ์ ํตํ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๋ค.
1) LifeCycle
Maven์ ํ๋ ์์ํฌ์ด๊ธฐ ๋๋ฌธ์ ๋์ ๋ฐฉ์์ด ์ ํด์ ธ ์๊ณ , ๋ฏธ๋ฆฌ ์ ์ํ๊ณ ์๋ ๋น๋ ์์๊ฐ ์๋ค.
ํฌ๊ฒ Default, Clean, Site ๋ผ์ดํ ์ฌ์ดํด๋ก ๋๋๊ณ ์ธ๋ถ์ ์ผ๋ก ํ์ด์ฆ(phase)๊ฐ ์๋ค.
ํ์ด์ฆ๋ ์์กด(Dependency) ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ด ํ์ด์ฆ๊ฐ ์ํ๋๋ ค๋ฉด ์ด์ ๋จ๊ณ์ ํ์ด์ฆ๊ฐ ๋ชจ๋ ์ํ๋์ด์ผ ํ๋ค.
- Default(Build): ์ผ๋ฐ์ ์ธ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์ํ ๋ชจ๋ธ
- Compile: ํ๋ก์ ํธ์ ์์ค์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ๋จ๊ณ
- Test: ์ ๋(๋จ์) ํ ์คํธ๋ฅผ ์ํํ๋ ๋จ๊ณ๋ก ํ ์คํธ ์คํจ ์ ๋น๋ ์คํจ๋ก ์ฒ๋ฆฌํ๋ค. (์คํต ๊ฐ๋ฅ)
- Pacakge: ์ค์ ์ปดํ์ผ๋ ์์ค ์ฝ๋์ ๋ฆฌ์์ค๋ค์ jar, war ๋ฑ๋ฑ์ ํ์ผ ๋ฑ์ ๋ฐฐํฌ๋ฅผ ์ํ ํจํค์ง๋ก ๋ง๋๋ ๋จ๊ณ
- Install: ํจํค์ง๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ์ค์นํ๋ ๋จ๊ณ
- Deploy: ๋ง๋ค์ด์ง package๋ฅผ ์๊ฒฉ ์ ์ฅ์์ release ํ๋ ๋จ๊ณ
- Clean: ๋น๋ ์ ์์ฑ๋์๋ ํ์ผ๋ค์ ์ญ์ ํ๋ ๋จ๊ณ
- Site: ํ๋ก์ ํธ ๋ฌธ์์ ์ฌ์ดํธ ์์ฑ, ์์ฑํ๋ ๋จ๊ณ
- Validate: ํ๋ก์ ํธ๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ๊ณ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ํ์ธํ๋ ๋จ๊ณ
- Verify: ํตํฉ ํ ์คํธ ๊ฒฐ๊ณผ์ ๋ํ ๊ฒ์ฌ๋ฅผ ์คํํ์ฌ ํ์ง ๊ธฐ์ค์ ์ถฉ์กฑํ๋์ง ํ์ธํ๋ ๋จ๊ณ
2) ์ค์ ํ์ผ
- settings.xml: Maven Tool๊ณผ ๊ด๋ จํ ์ค์ ํ์ผ๋ก MAVEN_HOME/conf ๋๋ ํฐ๋ฆฌ์ ์์นํ๋ค.
- pom.xml: POM(Project Object Model)์ ์ค์ ํ๋ ๋ถ๋ถ์ผ๋ก ํ๋ก์ ํธ ๋ด ๋น๋ ์ต์ ์ ์ค์ ํ๋ ๋ถ๋ถ์ด๋ค.
3) ์ฌ์ฉํ๋ ์ด์
Maven์ ์ฃผ์ ๊ธฐ๋ฅ์ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๊ฒ์ด๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์๋ค์ด ํธํ๊ฒ ์๋ก ์ผํ ์ ์๋๋ก ๋์์ค๋ค.
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ์ฌ์ฉํ๊ฒ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์ ๋์ด๋ ๊ฒ์ด๊ณ ๋ง์์ง์๋ก ๊ด๋ฆฌ๋ ํ๋ค ๊ฒ์ด๋ค. ๊ฐ๋ฐ์ ๋ชจ๋ ๊ฐ์ ํ๊ฒฝ์์ ๊ฐ๋ฐ์ ์งํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณ์ํด์ ๊ณต์ ํ๊ณ ํจ๊ป ๊ด๋ฆฌํด์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ณ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ import ํ๋ ๊ฒ๋ณด๋จ pom.xml๋ง ๊ณต์ ํ์ฌ ๊ด๋ฆฌํ๋ ๊ฒ์ด ํจ์ฌ ํจ์จ์ ์ด๋ค. ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊น์ง ๋ฒ์ ์ ๋ง๊ฒ ๋ฐ์์ฃผ๊ธฐ ๋๋ฌธ์ ๊ด๋ฆฌ๋ ์ฉ์ดํ๋ค.