๐บ ๊ณต๋ถ ์ค์ธ ๊ฐ์: ์คํ๋ง ์ ๋ฌธ ๊ฐ์ (YouTube ์ฌ์๋ชฉ๋ก)
์ด์์ถ
๋น๋ ๋๊ตฌ = ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ์ ์ค๊ธฐ + ์ปดํ์ผ + ํ
์คํธ + ํฌ์ฅ(jar)์ ์๋์ผ๋ก ํด ์ฃผ๋ ๋๊ตฌ
Maven = ์ ๋ฐฐ. pom.xml (XML๋ก ์)
Gradle = ํ๋ฐฐ. build.gradle (์ฝ๋์ฒ๋ผ ์). ๋ ์งง๊ณ ๋น ๋ฆ
๋ ๋ค ํ๋ ์ผ์ ๋๊ฐ์
1. ๋น๋ ๋๊ตฌ๊ฐ ๋ญ๋ฐ?
๋ด๊ฐ ์ด .java ์ฝ๋๋ฅผ ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ โ๋น๋โ๋ผ๊ณ ํจ
1. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด๋ฐ๊ธฐ (์คํ๋ง, ํฐ์บฃ ...)
2. ์ปดํ์ผ (.java โ .class)
3. ํ
์คํธ ์คํ
4. ํฌ์ฅ (.jar ํ์ผ ํ๋๋ก ๋ฌถ๊ธฐ)
์ด๊ฑธ ์๋์ผ๋ก ํด ์ฃผ๋ ๊ฒ ๋น๋ ๋๊ตฌ โ Maven, Gradle
๋น์
build.gradle = ๋ ์ํผ (์ฅ๋ณด๊ธฐ ๋ชฉ๋ก)
Gradle = ์๋ฆฌ์ฌ
Maven Central = ๋งํธ (๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐฝ๊ณ )
JSP ํ ๋๋ ๋น๊ต
| JSP ๋ | Gradle ์ฐ๋ฉด |
|---|---|
jar ์ง์ ๋ค์ด๋ฐ์์ WEB-INF/lib์ ๋ฃ์ | build.gradle์ ํ ์ค ์ ์ผ๋ฉด ๋ |
| ๋ฒ์ ์ ๋ง์ผ๋ฉด ์ง์ ์ฐพ์์ ๋ฐ๊ฟ | ๋ง๋ ๋ฒ์ ์์์ ๊ณจ๋ผ ์ค |
| ๋ค๋ฅธ ์ปดํจํฐ๋ก ์ฎ๊ธฐ๋ฉด jar๋ ๋ค ์ฑ๊ฒจ์ผ ํจ | build.gradle๋ง ์์ผ๋ฉด ์ด๋์๋ ๋๊ฐ์ด ์ฌํ |
2. Maven vs Gradle
ํ๋ ์ผ์ ๋๊ฐ์. ์ฐ๋ ๋ฐฉ์์ด ๋ค๋ฆ
| Maven | Gradle | |
|---|---|---|
| ์ค์ ํ์ผ | pom.xml | build.gradle |
| ์ฐ๋ ๋ฐฉ์ | XML (ํ๊ทธ) | ์ฝ๋ (Groovy ๋๋ Kotlin) |
| ๊ธธ์ด | ๊ธธ๋ค | ์งง๋ค |
| ์๋ | ์๋์ ์ผ๋ก ๋๋ฆผ | ๋น ๋ฆ (๋ฐ๋ ๋ถ๋ถ๋ง ๋ค์ ๋น๋, ์บ์ ์ฌ์ฉ) |
| ์์ ๋ | ์ ํด์ง ํ๋๋ก | ์ํ๋ ๋๋ก ์ปค์คํ ์ฌ์ |
| ๋์จ ์์ | ๋จผ์ (2004) | ๋์ค (2012) |
| ์์ฆ | ์๋ ํ๋ก์ ํธ, ํ์ฌ์ ์์ง ๋ง์ | ์คํ๋ง ์ ๊ท ํ๋ก์ ํธ์์ ๋ง์ด ์ |
๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ๋ฅผ ๋น๊ตํ๋ฉด
Maven (pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>Gradle (build.gradle)
implementation 'org.springframework.boot:spring-boot-starter-webmvc'โ ๋ด์ฉ์ ๊ฐ์๋ฐ Gradle์ด ํ ์ค๋ก ๋๋จ
๊ฒฐ๋ก
- ์ฒ์ ๋ฐฐ์ฐ๋ ๊ฑฐ๋ฉด ๊ฐ์์์ ์ฐ๋ ๊ฑฐ ๋ฐ๋ผ๊ฐ๋ฉด ๋จ
- ํ๋ ์๋ฉด ๋ค๋ฅธ ๊ฒ๋ ๊ธ๋ฐฉ ์ฝํ (๊ฐ๋ ์ด ๊ฐ์์)
3. Gradle ์์ธํ
build.gradle ๊ตฌ์กฐ
plugins { ... } // โ Gradleํํ
๊ธฐ๋ฅ ๋ถ์ด๊ธฐ
group / version // โก ๋ด ํ๋ก์ ํธ ์ ๋ณด
java { ... } // โข ์๋ฐ ๋ช ๋ฒ์ ์ธ์ง
repositories { ... } // โฃ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋์ ๋ฐ์์ง
dependencies { ... } // โค ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ์์ง โ
tasks.named('test') // โฅ ํ
์คํธ ์ค์ โ plugins
plugins {
id 'java'
id 'org.springframework.boot' version '4.1.1'
id 'io.spring.dependency-management' version '1.1.7'
}- Gradle์ ์๋ ๋น ๋๊ตฌ โ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ฅ๋ ฅ ์ถ๊ฐ
javaโ ์๋ฐ ํ๋ก์ ํธ๋ผ๊ณ ์๋ ค ์คorg.springframework.bootโ ์คํ๋ง๋ถํธ ๊ธฐ๋ฅ. ์คํ๋ง๋ถํธ ๋ฒ์ ์ด ์ฌ๊ธฐ์ ์ ํด์งdependency-managementโ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์๋์ผ๋ก ๋ง์ถฐ ์ค
โก ํ๋ก์ ํธ ์ ๋ณด
group = 'study'
version = '0.0.1-SNAPSHOT'- start.spring.io์์ ์
๋ ฅํ ๊ฐ.
SNAPSHOT= ์์ง ๊ฐ๋ฐ ์ค - ๊ณต๋ถํ ๋ ์ ๊ฒฝ ์ ์จ๋ ๋จ
โข ์๋ฐ ๋ฒ์
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}- ์๋ฐ 21๋ก ์ปดํ์ผํ๊ณ ์คํํ๋ผ๋ ๋ป โ ๊ทธ๋์ JDK 21 ์ค์น๊ฐ ํ์ํ์
โฃ repositories
repositories {
mavenCentral()
}- Maven Central = ์ ์ธ๊ณ ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐฝ๊ณ
- ์ด๋ฆ์ Maven์ด ๋ค์ด๊ฐ์ง๋ง Gradle๋ ์ฌ๊ธฐ์ ๋ฐ์ ์ด
โค dependencies โ
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-webmvc'
testImplementation 'org.springframework.boot:spring-boot-starter-thymeleaf-test'
testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}ํ ์ค ์ฝ๋ ๋ฒ
implementation 'org.springframework.boot : spring-boot-starter-webmvc'
์ธ์ ์ฐ๋์ง ๋ง๋ ๊ณณ(๊ทธ๋ฃน) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ
| ํค์๋ | ๋ป |
|---|---|
implementation | ๋ด ์ฝ๋์์ ์ฐ๊ณ ์คํํ ๋๋ ํ์ (์ ์ผ ๋ง์ด ์) |
testImplementation | ํ ์คํธ ์ฝ๋์์๋ง ์ |
testRuntimeOnly | ํ ์คํธ ์คํํ ๋๋ง ํ์ |
๊ฐ ์ค ์๋ฏธ
starter-webmvcโ ์น ์๋ฒ ํต์ฌ (์คํ๋ง MVC + ๋ด์ฅ ํฐ์บฃ). ํฐ์บฃ ๋ฐ๋ก ์ ๊น์๋ ๋๋ ์ด์starter-thymeleafโ html ํ๋ฉด ๋ง๋๋ ๋๊ตฌ (JSP ๋์ )-test๋ ์ค โ ์ ๋ ๊ฐ ํ ์คํธ์ฉjunit-platform-launcherโ ํ ์คํธ ์คํ ์์ง
starter๋?
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ญ ๊ฐ๋ฅผ ๋ฌถ์ ์ธํธ
- starter ํ ์ค = ์คํ๋ง MVC + ํฐ์บฃ + JSON ๋ณํ๊ธฐ โฆ ๋ค ๋ค์ด์ด
๋ฒ์ ์ด ์ ์ ํ ์๋ ์ด์
dependency-managementํ๋ฌ๊ทธ์ธ์ด ์คํ๋ง๋ถํธ 4.1.1์ ๋ง๋ ๋ฒ์ ์ ์์์ ๊ณจ๋ผ ์ค
โฅ ํ ์คํธ ์ค์
tasks.named('test') {
useJUnitPlatform()
}- ํ ์คํธ๋ JUnit 5๋ก ๋๋ฆฌ๋ผ๋ ๋ป. ๊ทธ๋๋ก ๋๋ฉด ๋จ
ํ๋ก์ ํธ์ ์๋ Gradle ๊ด๋ จ ํ์ผ๋ค
build.gradle โ ๋ ์ํผ (์์์ ๋ณธ ๊ฑฐ)
settings.gradle โ ํ๋ก์ ํธ ์ด๋ฆ (rootProject.name = 'HelloSpring')
gradlew โ Gradle ๋ํผ (๋งฅ/๋ฆฌ๋
์ค์ฉ)
gradlew.bat โ Gradle ๋ํผ (์๋์ฐ์ฉ)
gradle/wrapper/ โ ๋ํผ๊ฐ ์ธ Gradle ๋ฒ์ ์ ๋ณด (๋ด ํ๋ก์ ํธ๋ 9.7.1)
build/ โ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ (.class, .jar). ์ง์๋ ๋ค์ ์๊น
.gradle/ โ Gradle ์บ์. ๋ฌด์
Gradle ๋ํผ(gradlew)๋?
- ์ปดํจํฐ์ Gradle ์ ๊น์๋ ๋จ
gradlew๊ฐ ์ ํด์ง ๋ฒ์ ์ Gradle์ ์์์ ๋ฐ์์ ์คํ- โ ๋๊ฐ ๋ฐ๋ ๊ฐ์ ๋ฒ์ ์ผ๋ก ๋น๋๋จ
์์ฃผ ์ฐ๋ Gradle ๋ช ๋ น์ด
ํฐ๋ฏธ๋์์ ํ๋ก์ ํธ ํด๋ ๊ธฐ์ค
./gradlew build # ์ปดํ์ผ + ํ
์คํธ + jar ๋ง๋ค๊ธฐ
./gradlew bootRun # ์คํ๋ง๋ถํธ ์๋ฒ ์คํ
./gradlew test # ํ
์คํธ๋ง ์คํ
./gradlew clean # build ํด๋ ์ง์ฐ๊ธฐ./gradlew buildํ๋ฉด โbuild/libs/HelloSpring-0.0.1-SNAPSHOT.jar์๊น- ์ด jar๋
java -jar ํ์ผ์ด๋ฆ.jar๋ก ์ด๋์๋ ์คํ ๊ฐ๋ฅ (ํฐ์บฃ์ด ์์ ๋ค์ด ์์ด์)
IntelliJ์์ ์ธ ๋
build.gradle๊ณ ์น๋ฉด โ ์ค๋ฅธ์ชฝ ์ ๐ Load Gradle Changes ๋ฒํผ ๋๋ฅด๊ธฐ- ์ค๋ฅธ์ชฝ ์ฌ์ด๋๋ฐ ๐ Gradle ํญ โ ์ ๋ช ๋ น์ด๋ค์ ํด๋ฆญ์ผ๋ก ์คํ ๊ฐ๋ฅ
- ์ผ์ชฝ External Libraries ํผ์น๋ฉด โ ์ค์ ๋ก ๋ฐ์์ง jar ๋ชฉ๋ก ๋ณผ ์ ์์