Spring Boot νλ‘μ νΈλ₯Ό μμ±ν λ μ νν μ μλ μ¬λ¬ μμ‘΄μ±λ€ μ€ DevTools, Spring Web, Thymeleaf, Lombok
μ κ°κ° νΉμ κΈ°λ₯κ³Ό κ°λ° μμ°μ±μ ν₯μμν€λ μ€μν μν μ ν©λλ€. μ΄ κ²μλ¬Όμμλ κ° μμ‘΄μ±μ΄ μ 곡νλ μ£Όμ κΈ°λ₯μ μ΄ν΄λ³΄κ² μ΅λλ€.π
1οΈβ£ Spring Web
dependencies {
// Spring Bootμ μΉ μ ν리μΌμ΄μ
μ κ°λ°νκΈ° μν νμ μμ‘΄μ±μ
λλ€.
implementation 'org.springframework.boot:spring-boot-starter-web'
}
βοΈ Spring Webμ μΉ μ ν리μΌμ΄μ μ΄λ RESTful API κ°λ°μ νμμ μΈ μμ‘΄μ±μ λλ€.
- Spring MVC (Model-View-Controller) : μΉ μ ν리μΌμ΄μ μ κΈ°λ³Έ μν€ν μ²λ₯Ό μ 곡ν©λλ€. μ΄λ₯Ό ν΅ν΄ HTTP μμ²μ μ²λ¦¬νκ³ , μμ²μ μ μ ν 컨νΈλ‘€λ¬λ‘ λ§€ννλ©°, μ μ ν μλ΅μ μμ±ν©λλ€.
- RESTful μΉ μλΉμ€ μ§μ : RESTful APIλ₯Ό μ½κ² ꡬνν μ μλ λ€μν λꡬμ μ λ Έν μ΄μ (@RestController, @RequestMapping λ±)μ μ 곡ν©λλ€.
- λ΄μ₯ν μΉ μλ² : Apache Tomcat, Jetty, Undertowμ κ°μ λ΄μ₯ν μΉ μλ²λ₯Ό ν΅ν΄ λ 립 μ€νν μΉ μ ν리μΌμ΄μ μ μ½κ² λ°°ν¬νκ³ μ€νν μ μμ΅λλ€.
2οΈβ£ Lombok
dependencies {
// Lombokμ μ»΄νμΌ νμμλ§ νμλ‘ νλ©°, λ°νμμλ νμνμ§ μμ΅λλ€.
compileOnly 'org.projectlombok:lombok'
// Lombok μ λ
Έν
μ΄μ
μ μ²λ¦¬νκΈ° μν΄ νμν μ€μ μ
λλ€.
annotationProcessor 'org.projectlombok:lombok'
}
βοΈ Lombokμ μλ° μ½λμ κ°λ μ±μ λμ΄κ³ λ°λ³΅μ μΈ μ½λ μμ±μ μ€μ¬μ£Όλ μν μ ν©λλ€.
- Getter/Setter μλ μμ± : ν΄λμ€ νλμ @Getterμ @Setter μ λ Έν μ΄μ μ μ¬μ©νλ©΄, ν΄λΉ νλμ getterμ setter λ©μλλ₯Ό μλμΌλ‘ μμ±ν΄ μ€λλ€.
- μμ±μ μλ μμ± : @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor μ λ Έν μ΄μ μ μ¬μ©νμ¬, λ€μν ννμ μμ±μλ₯Ό μλμΌλ‘ μμ±ν μ μμ΅λλ€.
- λΉλ ν¨ν΄ μ§μ : @Builder μ λ Έν μ΄μ μ μ¬μ©νμ¬ λΉλ ν¨ν΄ ν΄λμ€λ₯Ό μλμΌλ‘ μμ±ν©λλ€. μ΄λ κ°μ²΄ μμ± μ μ μ°ν λ°©λ²μ μ 곡ν©λλ€.
- λ°μ΄ν° ν΄λμ€ μ§μ : @Data μ λ Έν μ΄μ μ μ¬μ©νλ©΄, ν΄λμ€μ λν΄ getter, setter, toString, equals, hashCode λ©μλλ₯Ό ν λ²μ μμ±ν μ μμ΅λλ€.
- λ‘κΉ μ§μ : @Slf4j, @Log4j, @Log λ±μ μ λ Έν μ΄μ μ μ¬μ©νμ¬, ν΄λμ€μμ μ½κ² λ‘κΉ κΈ°λ₯μ μ¬μ©ν μ μκ² ν©λλ€.
- μ£Όμ μ¬ν : Lombok μ¬μ© μ IDEμμ μ λ
Έν
μ΄μ
νλ‘μΈμ±μ νμ±νν΄μΌ ν©λλ€.
- File > Settings > Build, Execution, Deployment > Compiler > Annotation Processorsλ‘ μ΄λ
- Enable annotation processing 체ν¬λ°μ€ μ ν ν μ μ₯ > νλ‘μ νΈ λ¦¬λΉλ
3οΈβ£ DevTools (Spring Boot DevTools)
dependencies {
// κ°λ° νκ²½μμλ§ νμν μμ‘΄μ±μΌλ‘, λΉ λ₯Έ νΌλλ°±μ μ 곡ν©λλ€.
developmentOnly 'org.springframework.boot:spring-boot-devtools'
}
βοΈ DevToolsλ κ°λ° νκ²½μμ λΉ λ₯Έ νΌλλ°± 루νλ₯Ό μ 곡νλ λꡬμ λλ€.
- μλ μ¬μμ(Automatic Restart) : μ½λλ μ€μ νμΌμ μμ ν λλ§λ€ μ ν리μΌμ΄μ μ μλμΌλ‘ μ¬μμνμ¬ λ³κ²½ μ¬νμ΄ μ¦μ λ°μλ©λλ€.
- λΌμ΄λΈ 리λ‘λ(LiveReload) : λΈλΌμ°μ μμ νμ΄μ§λ₯Ό μλμΌλ‘ μλ‘ κ³ μ³, λ³κ²½λ λ΄μ©μ λ°λ‘ νμΈν μ μμ΅λλ€.
- κ°λ° μ€μ μ΅μ ν : κ°λ° νκ²½μ λ§λ μ΅μ μ μ€μ μ μλμΌλ‘ μ μ©ν©λλ€. μλ₯Ό λ€μ΄, μΊμλ₯Ό λΉνμ±ννμ¬ κ°λ° μ€μ λ³κ²½ μ¬νμ΄ μ¦μ λ°μλλλ‘ ν©λλ€.
- H2 μ½μ μλ νμ±ν : λ΄μ₯λ H2 λ°μ΄ν°λ² μ΄μ€μ μΉ μ½μμ μλμΌλ‘ νμ±ννμ¬ λ°μ΄ν°λ² μ΄μ€ μνλ₯Ό μ½κ² μ κ²ν μ μμ΅λλ€.
βοΈ λΉ λ₯Έ νΌλλ°±κ³Ό μλνλ κ°λ° νκ²½ ꡬμΆμ μν μΆκ° μ€μ 3κ°μ§
- Gradle μ€μ
- Build and Run using : IntelliJ IDEA (νλ‘μ νΈλ₯Ό λΉ λ₯΄κ² λΉλνκ³ μ€νν μ μμ΅λλ€.)
- Gradle JVM : Project SDK (Gradleμ΄ νλ‘μ νΈμ Java SDKμ λμΌν JVMμ μ¬μ©νκ² ν©λλ€.)
- Compiler μ€μ
- Build project automatically : μ½λ λ³κ²½ μ νλ‘μ νΈλ₯Ό μλμΌλ‘ λΉλνμ¬ μ¦μ λ°μν©λλ€.
- Advanced Settings μ€μ
- Allow auto-make to start even if... : μ ν리μΌμ΄μ μ΄ μ€ν μ€μΌ λλ μλ λΉλλ₯Ό νμ©νμ¬ μ½λ λ³κ²½ μ μλμΌλ‘ μ λ°μ΄νΈλλλ‘ ν©λλ€.
4οΈβ£ Thymeleaf
dependencies {
// μλ² μ¬μ΄λ λ λλ§μ μν Thymeleaf ν
νλ¦Ώ μμ§μ ν¬ν¨ν©λλ€.
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
}
βοΈ Thymeleafλ μλ² μ¬μ΄λ λ λλ§μ μν μλ° κΈ°λ°μ ν νλ¦Ώ μμ§μ λλ€.
- HTML ν νλ¦Ώ μμ§ : HTML νμΌμ ν νλ¦ΏμΌλ‘ μ¬μ©νμ¬ μλ² μ¬μ΄λμμ λ°μ΄ν°λ₯Ό λμ μΌλ‘ λ λλ§ν μ μμ΅λλ€. μλ²μμ μ²λ¦¬λ ν νλ¦Ώμ μ΅μ’ HTML νμ΄μ§λ‘ λ³νλμ΄ ν΄λΌμ΄μΈνΈμ μ λ¬λ©λλ€.
- νμ€ HTML νΈν : Thymeleaf ν νλ¦Ώμ λΈλΌμ°μ μμλ μΌλ° HTML νμΌμ²λΌ μ΄ μ μμ΄, λμμ΄λμ κ°λ°μ κ°μ νμ μ μ©μ΄νκ² ν©λλ€.
- νμ₯μ±κ³Ό ννμ μΈμ΄ : Thymeleafλ λ€μν νμ₯ κΈ°λ₯κ³Ό ννμ μΈμ΄λ₯Ό μ 곡νμ¬, λ°μ΄ν°μ μ‘°κ±΄λΆ λ λλ§, λ°λ³΅ μ²λ¦¬, λ¬Έμμ΄ ν¬λ§· λ±μ μ½κ² μ²λ¦¬ν μ μμ΅λλ€.
- Spring ν΅ν© : Spring MVCμ κΈ΄λ°νκ² ν΅ν©λμ΄, λͺ¨λΈ λ°μ΄ν°λ₯Ό μ½κ² ν νλ¦ΏμΌλ‘ μ λ¬νκ³ , μλ°©ν₯ λ°μ΄ν° λ°μΈλ©μ μ§μν©λλ€.
React κ°μ ν΄λΌμ΄μΈνΈ μ¬μ΄λ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν κ²½μ°, Thymeleafλ λΆνμν μ μμ΅λλ€. ν΄λΌμ΄μΈνΈ μΈ‘μμ λ λλ§μ μ²λ¦¬νκ³ , λ°μ΄ν°λ REST APIλ‘ μ£Όκ³ λ°κΈ° λλ¬Έμ λλ€. κ·Έλ¬λ μλ² μ¬μ΄λ λ λλ§μ΄ νμν μν©(μ: SEO μ΅μ ν, λΉ λ₯Έ μ΄κΈ° λ‘λ©)μμλ Thymeleafκ° μ μ©ν μ μμ΅λλ€.
'βJava' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νΈλ¬λΈμν ] CORS λ¬Έμ ν΄κ²° νκΈ° : μ€μ μμΈμ CORSκ° μλ 무ν μ¬κ· νΈμΆ (0) | 2024.09.10 |
---|---|
[Java] 컬λ μ νλ μμν¬(List, Queue, Set, Map) (0) | 2024.09.01 |
[Java] Map μ¬μ© λ°©λ²(keySet(), entrySet(), Map.entry()) (0) | 2024.09.01 |
[Java] JPA, JPQL, QueryDSL κ°λ μ 리 (1) | 2024.08.22 |