Java๋ก Spring Boot ๊ฐ๋ฐ์ ํด๋ดค๋ค๋ฉด ํ๋ก์ ํธ ์ด๊ธฐ ์์ฑ ์์ Maven๊ณผ Gradle ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ์ค ๋ฌด์์ ์ ํํด์ผ ํ๋์ง ์๋ฌธ์ด ์์์ ๊ฒ์ด๋ค.
๊ทธ ๊ถ๊ธ์ฆ์ ํด๊ฒฐํ๊ธฐ ์ํด Maven๊ณผ Gradle์ ๋ํด ์์๋ณด์.
Build ๋?
Java๋ก ์ด์ฌํ ์ฝ๋ฉ์ ํ๋ฉด .java๋ผ๋ ํ์ผ์ด ๋ง๋ค์ด์ง๋ค.
ํ์ง๋ง ์ด ํ์ผ์ ๊ทธ๋ฅ ๋ฉ๋ชจ์ฅ์ ์ ํ ๊ธ์จ์ผ ๋ฟ, ์ปดํจํฐ๊ฐ ๋ฐ๋ก ์ฝ์ด์ ์คํํ ์๋ ์๋ค.
๋น๋(Build)๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ ์์ค์ฝ๋์ ์ด๋ฏธ์ง, ์ค์ ํ์ผ๋ค์ ๋ชจ์์ ์ปดํจํฐ๊ฐ ์คํํ ์ ์๋ ํ๋์ ์ ํ(.jar ๋๋ .war ํ์ผ)์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ ๋งํ๋ค.
=> ์ ํํ๊ฒ๋ Java์ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ธ .jar์ด๋ .war ํ์ผ์ ํน์ OS(์๋์ฐ, ๋ฆฌ๋
์ค ๋ฑ)์ ์ข
์๋ ํ์ผ์ด ์๋๋ผ, JVM์ด ์ฝ๋ ๋ฐ์ดํธ์ฝ๋(.class ํ์ผ)๋ก ์ด๋ฃจ์ด์ ธ ์์. ์ด ํ์ผ ํ๋๋ง ์์ผ๋ฉด ๊ฐ OS์ฉ JVM์ด ์คํ ์์ ์ ํด๋น OS์ ์ต์ ํ๋ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ์ฌ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ํจ
(์ฆ, Java๋ฅผ Buildํ ๋๋ ์๋์ฐ์ฉ, ๋ฆฌ๋ ์ค์ฉ Build๋ฅผ ๋ฐ๋กํ๋๊ฒ X)
JAR(Java ARchive)๋ ์๋ฐ ํ๋ก์ ํธ๋ฅผ ์์ถํ๋ ๊ฐ์ฅ ํ์ค์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์๋ฐ ํด๋์ค ํ์ผ(.class), ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ค์ ํ์ผ๋ค์ ํ๋๋ก ๋ฌถ์ ๋ ์ฌ์ฉํ๋ค.
์๋ฐ ๋ฐํ์(JRE)๋ง ์ค์น๋์ด ์๋ค๋ฉด ์ด๋์๋ ๋ฐ๋ก ์คํํ ์ ์๊ณ ์ฃผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ ๋ฆฝ์ ์ธ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ๋ ์ฌ์ฉํ๋ค.
=> ์์ฆ์ Spring Boot๋ก ๋น๋ํ๋ฉด ๋ด์ฅ Tomcat์ด ํฌํจ๋ Fat JAR๊ฐ ๋ง๋ค์ด์ง๊ธฐ์ ์๋ฒ ์ค์น ์์ด ํ์ผ ํ๋๋ง ์คํํ๋ฉด ๋ฐ๋ก ์น ์๋น์ค๊ฐ ๊ตฌ๋ ๊ฐ๋ฅํจ
WAR(Web Application ARchive)๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ํด ๋ณ๋๋ก ๊ท๊ฒฉํ๋ ํฌ์ ๋ฐฉ๋ฒ์ผ๋ก ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ ์ํ๋ '์น ์๋น์ค' ์ ์ฒด๋ฅผ ๋ฐฐํฌํ ๋ ์ฌ์ฉํ๋ค.
=> ํผ์์๋ ์คํ๋ ์ ์๊ณ , ๋ฐ๋์ WAS(Tomcat ๊ฐ์ ์๋ฒ) ์์ ๋ฃ์ด์ค์ผ ์๋ํ๋ฉฐ ์ธ๋ถ ์๋ฒ ํ๊ฒฝ์ ๋ด ํ๋ก๊ทธ๋จ์ ์น์ด์ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ(ex. ํ์ฌ ๊ณต์ฉ ์๋ฒ๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ)์ ์ฃผ๋ก ์ฌ์ฉํจ
Java/Spring Boot์์ ๋น๋๋ฅผ ์๊ฐํด๋ณด๋ฉด
1. ์ฐ๋ฆฌ๊ฐ ์ด ์๋ฐ ์ฝ๋๋ฅผ ์ปดํจํฐ ์ธ์ด(๋ฐ์ดํธ ์ฝ๋)๋ก ๋ฒ์ญํ๋ ์ปดํ์ผ ๊ณผ์
2. ์น์ฌ์ดํธ์ ๋ค์ด๊ฐ ์ฌ์ง์ด๋ ์ค์ ๊ฐ๋ค์ ์ ์ ํ ์์น๋ก ์ฎ๊ธฐ๋ ๋ฆฌ์์ค ๋ณต์ฌ ๊ณผ์
(์ด๋ฏธ์ง๋ ์ค์ ํ์ผ ๊ฐ์ด ๋ณํ์ง ์๋ ์ ์ ํ์ผ๋ค์ ๋ฒ์ญ ๊ณผ์ ์์ด ๋ฐ์ดํธ์ฝ๋ ํ์ผ๋ค๊ณผ ํจ๊ป .jar ์์ ์๋ณธ ๊ทธ๋๋ก ํฌํจ๋์ด ํจํค์ง๋จ)
3. ์ฝ๋๊ฐ ์ ๋๋ก ์๋ํ๋์ง ์ํํด๋ณด๋ ํ ์คํธ ๊ณผ์
4. ๋ฒ์ญ๋ ์ฝ๋์ ์์๋ค์ ํ๋๋ก ๋ฌถ์ด .jar๋ผ๋ ์์ถ ํ์ผ์ ๋ง๋๋ ํจํค์ง ๊ณผ์
์ ๊ฑฐ์ณ์ ํ์ผ์ด ์์ฑ๋์ด์ผ๋ง WAS(Wep Application Server)๋ผ๋ ์น ํ๋ก๊ทธ๋จ์ ๋๋ ค์ฃผ๋ ์์ง(ex. Tomcat) ์์ ์ฌ๋ ค์ ์น ์ฌ์ดํธ๋ฅผ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๋ณด์ฌ์ค ์ ์๊ฒ ๋๋ค.
Build Tool ์ด๋?
์์ ์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ ์์ ์ ํ ๊ฒ์ฒ๋ผ ์ปดํ์ผํ๊ณ , ํ์ผ์ ์ฎ๊ธฐ๊ณ , ์์ถ์ ํด์ผ ํ๊ธฐ์ ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด ์ ์ฒ ๊ฐ์ ํ์ผ์ ์ผ์ผ์ด ๊ด๋ฆฌํ๊ธฐ๊ฐ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค.
๊ทธ๋์ ์ด๋ฐ ๋ ธ๊ฐ๋ค๋ฅผ ๋์ ํด์ค ์๋ํ ๋น์๊ฐ ์๊ธด๊ฑด๋ฐ, ๊ทธ๊ฒ ๋ฐ๋ก ๋น๋ ๋๊ตฌ(Build Tool)์ด๋ค.
Java(์ ํํ๋ JVM์์์ ๋์๊ฐ๋ ์ธ์ด๋ค)์ ๋ํ์ ์ธ ๋น๋ ๋๊ตฌ๋ค์ ์ดํด๋ณด์
Ant
๊ฐ์ฅ ์ด์ฐฝ๊ธฐ์๋ Ant๋ผ๋ ๋๊ตฌ๊ฐ ์์๋๋ฐ ์ด Ant๋ ๋งค์ฐ ์์ ๋ก์ ์ง๋ง, ํ๋๋ถํฐ ์ด๊น์ง ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฌํญ์ ๋ค ์ ์ด์ค์ผํ๋ค.
"A ํด๋ ํ์ผ ๋ฒ์ญํด, B ํด๋๋ก ์ฎ๊ฒจ, ๊ทธ ๋ค์ ์์ถํด..."
์ด๋ ๊ฒ ๋ณด๋ฉด ์๋์ผ๋ก ๋น๋ํ๋๊ฑฐ๋ ๋ค๋ฅผ๊ฒ ๋ญ์ง? ๋ผ๋ ์๊ฐ์ด ๋ค ์ ์๋๋ฐ ์ฒ์ ํ ๋ฒ๋ง build.xml ์ ์ง์ ์ฌํญ์ ์ ์ด๋๋ฉด, ๊ทธ ๋ค๋ก๋ ant build ๊ฐ์ ๋ช ๋ น์ด ํ ์ค๋ง ์น๋ฉด ๋๋๊ธฐ ๋๋ฌธ์ ์๋ ๋น๋ ์ ๋ฐ์ํ ์ ์๋ ์ค์๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
ํ์ง๋ง ๋ฌด์๋ณด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด ์์ด์, ๊ฐ๋ฐ์๊ฐ ์ง์ ์ธํฐ๋ท์์ ํ์ผ์ ์ฐพ์ ๋ค์ด๋ก๋ํ๊ณ ํ๋ก์ ํธ์ ์๋์ผ๋ก ๋ฃ์ด์ค์ผํ๋ ํฐ ๋ถํธํจ์ด ์์๋ค.
Maven

์ด๋ฐ Ant์ ๋ถํธํจ์ ํด๊ฒฐํ๊ธฐ ์ํด 2004๋ ์ํ์น ์ฌ๋จ์์ ๋ง๋ ๊ฒ์ด Maven์ด๋ค.
Ant์ ๋ถํธํจ ์์์ ํ์ํ Maven์ ํ์คํ ์ฅ์ ์ด ์กด์ฌํ๋ค.
- ์ฐ์ Maven์ pom.xml ์ด๋ผ๋ ๋ฌธ์์ "๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ํด"๋ผ๊ณ ์ด๋ฆ๊ณผ ๋ฒ์ ๋ง ์ ์ผ๋ฉด, Maven์ด ์ธํฐ๋ท ์ฐฝ๊ณ ์์ ์์์ ๋ค์ด๋ก๋๋ฅผ ํด์จ๋ค.
=> ์ธํฐ๋ท ์ฐฝ๊ณ ์ ์ ํํ ๋ช ์นญ์ Maven Central Repository๋ผ๋ ๊ณณ์ผ๋ก, ์ ์ธ๊ณ Java ๊ฐ๋ฐ์๋ค์ด ๋ง๋ ๊ฒ์ฆ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ๋ชจ์ฌ ์์ - ๋ชจ๋ Maven ํ๋ก์ ํธ๋ ํด๋ ๊ตฌ์กฐ๊ฐ ๋๊ฐ๊ธฐ์ ์ฒ์ ๋ณด๋ ํ๋ก์ ํธ๋ผ๋ ์ด๋์ ์ฝ๋๊ฐ ์๋์ง ์ฝ๊ฒ ์ ์ ์๋ค.
=> Maven์ Java ์ฝ๋๋ ๋ฌด์กฐ๊ฑด src/main/java, ์ค์ ํ์ผ์ ๋ฌด์กฐ๊ฑด src/main/resources, ํ ์คํธ ์ฝ๋๋ ๋ฌด์กฐ๊ฑด src/test/java ์ ๊ฐ์ ๋น๋ ์ ํด๋ ๊ตฌ์กฐ์ ํ์คํ๊ฐ ๋์ด์์ง๋ง
Ant์ ๊ฒฝ์ฐ ์์ค ์ฝ๋๋ฅผ my_code ํด๋์ ๋๊ฑฐ๋ฉด ๋น๋ ์คํฌ๋ฆฝํธ์ srcDir = "my_code" ์ ๊ฐ์ด ์ง์ ์ผ์ผ์ด ์ ์ด์ค์ผํ์
(Maven๋ ์ค์ ์ ๋ฐ๊พธ๋ฉด ํด๋ ์์น๋ฅผ ๋ณ๊ฒฝํ ์ ์์ง๋ง ์ด๋ฌ๋ฉด Maven์ ์ฅ์ ์ด๋ผ๊ณ ํ ์ ์๋ ๊ธฐ๋ฅ์ ํฌ๊ธฐํ๋ ๊ผด์) - clean(์ฒญ์ - ์ด์ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ ์ญ์ ) -> compile(๋ฒ์ญ - .java๋ฅผ .class ๋ฐ์ดํธ ์ฝ๋๋ก ์ปดํ์ผ) -> test(ํ
์คํธ) -> package(ํฌ์ฅ - ์ปดํ์ผ๋ ์ฝ๋์ ๋ฆฌ์์ค๋ฅผ ๋ฌถ์ด .jar๋ .war๋ก ๋ง๋ฌ) -> install(์ค์น - ๋ด ์ปดํจํฐ์ ๋ก์ปฌ ์ ์ฅ์์ ์์ฑ๋ ํจํค์ง ์ ์ฅ) -> deploy(๋ฐฐํฌ - ์ต์ข
ํจํค์ง๋ฅผ ์๊ฒฉ ์ ์ฅ์์ ์ฌ๋ฆผ) ์ด๋ผ๋ ๋ผ์ดํ ์ฌ์ดํด์ด ์ด๋ฏธ ์ ํด์ ธ์๋ค.
=> ์ด๋ฐ ๋ผ์ดํ์ฌ์ดํด์ด ์กด์ฌํ๊ธฐ์ ํน์ ๋จ๊ณ๋ฅผ ๋ช ๋ นํ๋ฉด ๊ทธ ์์ ๋จ๊ณ๋ค์ด ์์๋๋ก ์๋ ์คํ๋๋ ํธ๋ฆฌํจ์ด ์กด์ฌํจ
ํ์ง๋ง ๋น์ฐํ๊ฒ๋ ์ด๋ฐ Maven๋ ๋จ์ ์ด ์กด์ฌํ๋๋ฐ
- XML ํ์์ ์ฌ์ฉํ๊ธฐ์, ์ค์ ์ด ๊ธธ์ด์ง๋ฉด ํ์ผ์ด ๋๋ฌด ๋ณต์กํด์ ธ์ ์ฝ๊ธฐ๊ฐ ์ด๋ ต๋ค.
- ์ ํด์ง ๊ท์น์ ๋ฒ์ด๋ ๋
ํนํ ๋ฐฉ์์ผ๋ก ๋น๋ํ๊ณ ์ถ์ ๋ ์์ ํ๊ธฐ๊ฐ ๊น๋ค๋กญ๋ค.
(์ด๋ฐ ์ ์ฐ์ฑ ๋ถ์กฑ์ ๊ท์น์ด ์์ ๋ณด๋ค ํธํ๋ค๋ Convention over Configuration์ด๋ผ๋ ์ฒ ํ์ ๊ฐ์ง๊ณ Maven์ด ๋ฑ์ฅํ๊ธฐ ๋๋ฌธ)
Gradle

Maven ์ดํ, 2008๋ ์ ๋ฑ์ฅํ Gradle์ Maven์ ์ฅ์ ๊ณผ Ant์ ์์ ๋ก์์ ๊ฒฐํฉํ ๋น๋ ๋๊ตฌ์ด๋ค.
์ฐ์ Maven๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ ๋น๋ ์๋๋ฅผ ๊ฐ์ง๊ณ ์๊ณ XML ๋์ Groovy๋ Kotlin ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ์ ์ค์ ํ์ผ์ด ํจ์ฌ ์งง๊ณ ๊ฐ๋ ์ฑ์ด ์ข๋ค.
=> ์ฆ๋ถ ๋น๋(๋ฐ๋ ๋ถ๋ถ๋ง ๋น๋)์ ์บ์ฑ(์ด๋ฏธ ํ๋ ๋น๋๋ ๋ค์ ์ํจ) ๊ธฐ์ ๋๋ถ์ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ๋น๋ ์๋์์ ํฐ ์ฐจ์ด๊ฐ ๋ฐ์ํจ
๊ทธ๋ฆฌ๊ณ , ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํน์ง์ ๊ฐ์ง๊ณ ์๊ธฐ์, ๋น๋ ๊ณผ์ ์ ๊ฐ๋ฐ์ ๋ง์๋๋ก ์ธ๋ฐํ๊ฒ ์กฐ์ ์ด ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง, ์๋ ๊ธฐ๋ฅ์ด ๊ฐ๋ ฅํ๊ณ ์์ ๋กญ๋ค ๋ณด๋, ์ด๋ณด์๊ฐ ์ค์ ์ ์๋ฒฝํ ์ดํดํ๊ณ ํ์ฉํ๊ธฐ๊น์ง์ ๋ฌ๋์ปค๋ธ๊ฐ ์กด์ฌํ๋ค.
Gardle๊ณผ Maven ๋ฌด์์ ์ ํํด์ผ ํ ๊น?
๋น๋ ๋๊ตฌ๋ ๊ฒฐ๊ตญ ์ฝ๋ฉ์๋ง ์ง์คํ ์ ์๊ฒ ๋์์ฃผ๋ ๋๊ตฌ์ผ ๋ฟ์ด์ง๋ง ๋ ์ค ํ๋๋ฅผ ์ ํํ๋ ์ํฉ์ ๋น๊ตํด๋ณธ๋ค๋ฉด
์๋ก Spring Boot๋ Android ๊ฐ๋ฐ์ ์์ํ๋ ์ ์ฅ์์ ์ฑ๋ฅ๊ณผ ํธ์์ฑ ๋ฉด์์๋ ์ต์ ํธ๋ ๋์ ์ค์ฌ์ธ Gradle์ ๊ณต๋ถํ๋ฉฐ ์ฌ์ฉํด๋ณด๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํ๊ณ
์ค๋๋ ๋ ๊ฑฐ์ ํ๋ก์ ํธ๋ ๋ณด์์ ์ธ ๊ธ์ต๊ถ, ๋๊ธฐ์ ์์๋ ์ฌ์ ํ Maven์ ์ ํธํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ณ ์ ํต์ ๊ฐ์์ด๋ค๋ณด๋ ๊ณต๋ถ ์๋ฃ๊ฐ ๊ต์ฅํ ๋ง๊ณ ์์ ์ ์ด๋ผ๋ ์ฅ์ ์ด ์๊ธฐ์ ์ํฉ์ ๋ง์ถฐ ์ ํํ๋ ๊ฒ์ด ์ข์๋ณด์ธ๋ค.
Reference
https://www.youtube.com/watch?v=3Jp9kGDb01g
'๐กLanguage > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| generic array creation ์๋ฌ (0) | 2025.11.07 |
|---|---|
| Java ์ ์ถ๋ ฅ(I/O) ์์๋ณด๊ธฐ (0) | 2025.06.03 |
| Java Collections Framework ์์๋ณด๊ธฐ (0) | 2025.05.29 |
| [Java] int ์ Integer ์ฐจ์ด (0) | 2025.03.21 |
| Java๋ ์ปดํ์ผ ์ธ์ด์ผ๊น? ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ผ๊น? (0) | 2025.03.10 |