νλ‘μ νΈ μμ±
spring initializer
β’
μ€νλ§λΆνΈ νλ‘μ νΈ μμ±κΈ° : https://start.spring.io/
β’
Project
Gradle, Maven λ νμν λΌμ΄λΈλ¬λ¦¬λ₯Ό λ€μ΄λ‘λ λ°κ³ , λΉλ μμΌμ£Όλ λΉλ μλν ν΄μ΄λ€.
μμ¦μ Gradle μ λ§μ΄ μ°λ μΆμΈμ΄λ€.
β’
Spring Boot
SNAPSHOT λ²μ : λ§λ€κ³ μλ λ²μ
κ΄νΈκ° μλ λ²μ μ€μμ μ΅μ λ²μ μ μ ννμ.
220717 κΈ°μ€ Spring Boot 2.7.1 λ²μ
β’
Project Metadata
β¦
Group : λ³΄ν΅ νμ¬λͺ
β¦
Artifact : νλ‘μ νΈ μ΄λ¦
β¦
Java : μλ° λ²μ ( μ¬κΈ°μλ 11 μ μ ν )
β’
Dependencies
: νμν λΌμ΄λΈλ¬λ¦¬ μΆκ°
μΈν
λ νλ‘μ νΈλ₯Ό λ€μ΄λ‘λ ν, μμΆμ νκ³ intellij μμ build.gradle νμΌμ open νλ€.
νμΌ β νλ‘μ νΈ κ΅¬μ‘°μμ java 11 μ€μ νμΈ
νλ‘μ νΈ κ΅¬μ‘°
src ν΄λ λ°μ main κ³Ό test ν΄λκ° μλ€.
main ν΄λ λ°μ μ£Όμ λ‘μ§μ μμ±νκ³ , test ν΄λμλ ν
μ€νΈ μ½λλ₯Ό μμ±νλ€.
build.gradle νμΌμ λΌμ΄λΈλ¬λ¦¬, λΉλμ κ΄λ ¨λ μ€μ λ€μ μμ±νλ€.
μ¬μ΄λλ° μ€μ
μ¬μ΄λλ°μμ ν±λλ°ν΄ ν΄λ¦
β’
ν λ²μ ν΄λ¦μΌλ‘ νμΌ μ΄κΈ° on
β’
νμ μ΄λ € μλ νμΌ μ ν on
β’
νΈλ¦¬ λͺ¨μ β μ€κ° ν¨ν€μ§ μμΆ off
HelloSpringApplication.java νμΌμ΄ Spring boot λ₯Ό μ€νμν€λ λ©μλκ° μλ νμΌμ΄λ€.
main ν¨μλ₯Ό μ€νμν€λ©΄ spring boot κ° κ΅¬λλλ€.
localhost:8080 μ λ€μ΄κ°μ λ μ΄λ¬ν error page κ° λ¨λ©΄ μ μμ μΌλ‘ νλ‘μ νΈκ° μΈν
λ κ²μ΄λ€. ( μ무κ²λ μμ±νμ§ μμκΈ° λλ¬Έμ error page κ° λ¬λ€. )
λΉλ μλ κ°μ
νκ²½ μ€μ β λΉλ λꡬ β Gradle β λΉλ λ° μ€νμ Intellij IDEA λ‘ λ³κ²½
gradle μ ν΅νμ§ μκ³ Intellij μ체μμ java λ₯Ό μ€νμμΌμ spring boot λ₯Ό λ 빨리 μ€νμν€κ²λ νλ μ€μ μ΄λ€.
λΌμ΄λΈλ¬λ¦¬ μ΄ν΄λ³΄κΈ°
β’
λΌμ΄λΈλ¬λ¦¬ μ’
μμ± νμΈ
β’
thymeleaf λΌμ΄λΈλ¬λ¦¬μμ μ¬μ©νλ λΌμ΄λΈλ¬λ¦¬λ€μ νμΈν μ μλ€.
β’
spring-boot-starter-web λΌμ΄λΈλ¬λ¦¬μμ μ¬μ©νλ λΌμ΄λΈλ¬λ¦¬ μ€μ (*) νμ λ κ²λ€μ μ΄λ―Έ λ€λ₯Έ κ³³μμ μ¬μ©μ΄ λ λΌμ΄λΈλ¬λ¦¬λΌλ λ»μ΄λ€.
cf) ν°μΊ£ μΉμλ²κ° λ΄μ₯λ κ²μ νμΈν μ μλ€. λ°λΌμ spring boot λ₯Ό μ€ννλ©΄ ν°μΊ£ μΉμλ²λ κ°μ΄ ꡬλλλ€.
β¦
logging κ΄λ ¨ λΌμ΄λΈλ¬λ¦¬
βͺ
slf4j : logging μΈν°νμ΄μ€
βͺ
logback : slf4j ꡬν체
μ€νλ§ λΆνΈ λΌμ΄λΈλ¬λ¦¬
β’
spring-boot-starter-web
β¦
spring-boot-starter-tomcat: ν°μΊ£ (μΉμλ²)
β¦
spring-webmvc: μ€νλ§ μΉ MVC
β’
spring-boot-starter-thymeleaf: νμ리ν ν
νλ¦Ώ μμ§(View)
β’
spring-boot-starter(곡ν΅): μ€νλ§ λΆνΈ + μ€νλ§ μ½μ΄ + λ‘κΉ
β’
spring-boot
β¦
spring-core
β’
spring-boot-starter-logging
β¦
logback, slf4j
ν
μ€νΈ λΌμ΄λΈλ¬λ¦¬
β’
spring-boot-starter-test
β¦
junit: ν
μ€νΈ νλ μμν¬
β¦
mockito: λͺ© λΌμ΄λΈλ¬λ¦¬
β¦
assertj: ν
μ€νΈ μ½λλ₯Ό μ’ λ νΈνκ² μμ±νκ² λμμ£Όλ λΌμ΄λΈλ¬λ¦¬
β¦
spring-test: μ€νλ§ ν΅ν© ν
μ€νΈ μ§μ
View νκ²½μ€μ
μ€νλ§ κ³΅μ λ¬Έμ
μ μ νμ΄μ§
resources/static/index.html μ 루νΈλ‘ λ€μ΄μμ λ μ μ μΌλ‘ λ λλ§μ΄ λλ νμ΄μ§μ΄λ€.
Thymeleaf ν νλ¦Ώ μμ§
HelloController.java
@Controller
public class HelloController {
@GetMapping("hello") // GET /hello μμ²μ μλ―Έ
public String hello(Model model){
model.addAttribute("data", "hello!!");
return "hello"; // templates/hello.html μ μλ―Έ
}
}
Java
볡μ¬
Β hello μ get μμ²μ΄ λ€μ΄μ€λ©΄, data μ hello!! λ¬Έμμ΄μ 맀νμμΌμ€λ€.
 컨νΈλ‘€λ¬μ λ¦¬ν΄ κ°μ νμΌ μ΄λ¦μΌλ‘ view Resolover κ° μλ§μ view λ₯Ό μ²λ¦¬ν΄μ€λ€.
templates/hello.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'μλ
νμΈμ. ' + ${data}" ></p>
</body>
</html>
HTML
볡μ¬
Β ${data} μλ 컨νΈλ‘€λ¬μ μν΄ hello!! κ° λ§€νμ΄ λ κ²μ΄λ€.
κ²°κ³Ό
Github
λΉλ, μ€ν
ν°λ―Έλμμ μ§μ λͺ
λ Ήμ΄λ‘ λΉλλ₯Ό ν΄μ jar νμΌμ λ§λ€κ³ , jar νμΌμ μ€ννλ λ°©μμ μμ보μ.
κΈ°μ‘΄ intellij μμ μ€νμ νλ κ²μ ν°λ―Έλμμ νλ κ²μ΄λΌκ³ 보면 λλ€.
νλ‘μ νΈ λ£¨νΈμμ
./gradlew clean build
Bash
볡μ¬
clean μ΅μ
μ μ£Όλ©΄ κΈ°μ‘΄ build ν΄λλ₯Ό λ λ¦¬κ³ μλ‘κ² build ν΄λλ₯Ό λ§λ λ€.
build ν΄λκ° λ§λ€μ΄μ§κ³ libs ν΄λμ jar νμΌμ΄ μκ²Όλ€.
build/libs λ‘ μ΄λν΄μ jar νμΌμ μ€ννλ€.
java -jar hello-spring-0.0.1-SNAPSHOT.jar
Bash
볡μ¬
λ°°ν¬ μμλ μ΄ jar νμΌμ λ°°ν¬μλ²μμ μ€νμν€λ©΄ λλ€.