start.spring.ioμ—μ„œ μΆ”κ°€ν•œ λͺ¨μŠ΅

 

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κ°€μ§€

  1. Gradle μ„€μ •
    • Build and Run using : IntelliJ IDEA (ν”„λ‘œμ νŠΈλ₯Ό λΉ λ₯΄κ²Œ λΉŒλ“œν•˜κ³  μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.)
    • Gradle JVM : Project SDK (Gradle이 ν”„λ‘œμ νŠΈμ˜ Java SDK와 λ™μΌν•œ JVM을 μ‚¬μš©ν•˜κ²Œ ν•©λ‹ˆλ‹€.)
  2. Compiler μ„€μ •
    • Build project automatically : μ½”λ“œ λ³€κ²½ μ‹œ ν”„λ‘œμ νŠΈλ₯Ό μžλ™μœΌλ‘œ λΉŒλ“œν•˜μ—¬ μ¦‰μ‹œ λ°˜μ˜ν•©λ‹ˆλ‹€.
  3. 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κ°€ μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
yewon31