[Spring][κ°œλ…]🌟 Spring Boot: λ³΅μž‘ν•¨μ€ 쀄이고, νš¨μœ¨μ€ λ†’μ΄λŠ” μ™„λ²½ κ°€μ΄λ“œ!

κΉ€μƒμš±Β·2024λ…„ 10μ›” 29일
post-thumbnail

πŸš€ Spring Boot: λ³΅μž‘ν•¨μ„ λ‹¨μˆœν•˜κ²Œ! νŠΉμ§•κ³Ό μž₯점

✨ Spring Boot의 νŠΉμ§•

  • μžλ™ν™”λœ μ„€μ • μž‘μ—… πŸ”§: Spring Frameworkλ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” λ‹€μ–‘ν•œ μ„€μ • μž‘μ—…μ΄ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬ 라이브러리 μΆ”κ°€λΆ€ν„° 쒅속성 μ„€μ •κ³Ό ꡬ성 파일 μƒμ„±κΉŒμ§€, μˆ˜μž‘μ—…μ΄ λ§Žμ•˜μ£ . ν•˜μ§€λ§Œ Spring BootλŠ” μ΄λŸ¬ν•œ μ„€μ • μž‘μ—…μ„ μžλ™ν™”ν•˜μ—¬, κ°œλ°œμžλ“€μ΄ μ„€μ •λ³΄λ‹€λŠ” κ°œλ°œμ— 집쀑할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

🌟 Spring Boot의 5κ°€μ§€ μž₯점

  1. Starter μ˜μ‘΄μ„±μœΌλ‘œ λΉ λ₯Έ μ‹œμž‘ πŸš€: Spring BootλŠ” 자주 μ‚¬μš©λ˜λŠ” λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ„ 미리 λ¬Άμ–΄ 'starter' νŒ¨ν‚€μ§€λ‘œ μ œκ³΅ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Spring Web StarterλŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— ν•„μš”ν•œ 라이브러리λ₯Ό 포함해 λ³„λ„μ˜ μ„€μ • 없이 λ°”λ‘œ μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  2. μžλ™ μ„€μ •μœΌλ‘œ μ‹œκ°„ μ ˆμ•½ πŸ•’: Spring Bootκ°€ λ³΅μž‘ν•œ 섀정을 μžλ™μœΌλ‘œ μ²˜λ¦¬ν•΄ μ£ΌκΈ° λ•Œλ¬Έμ—, κ°œλ°œμžλŠ” 핡심 λ‘œμ§μ— 더 λ§Žμ€ μ‹œκ°„μ„ μŸμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

  3. 독립적 μ‹€ν–‰ κ°€λŠ₯ πŸ”‹: Spring BootλŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„(WAS) 없이도 λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ν•  수 μžˆμ–΄, WAS에 μ’…μ†λ˜μ§€ μ•ŠλŠ” 자유둜운 ꡬ좕이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

  4. λ‚΄μž₯ WAS 지원 πŸ–₯️: Tomcat, Jetty λ“± WASλ₯Ό λ‚΄μž₯ν•˜κ³  μžˆμ–΄ 별도 μ„€μΉ˜ 없이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 개발과 배포 과정이 λ”μš± κ°„νŽΈν•΄μ§‘λ‹ˆλ‹€.

  5. JAR 파일둜 κ°„νŽΈν•œ 배포 πŸ“¦: Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ JAR 파일둜 νŒ¨ν‚€μ§•λ˜μ–΄, λ‹¨μˆœ μ‹€ν–‰μœΌλ‘œλ„ ꡬ동이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 배포와 싀행이 μ‰¬μ›Œμ§€λ‹ˆ 개발과 운영이 ν•œκ²° νš¨μœ¨μ μž…λ‹ˆλ‹€.


🎯 Spring Boot Starter: μ˜μ‘΄μ„± μ„€μ •μ˜ κ°„νŽΈν•¨μ„ μ„ μ‚¬ν•˜λŠ” λ§ˆλ²•!

πŸ”Ή Spring Boot Starterλž€?

  • μ˜μ‘΄μ„± λͺ¨μŒ ν•œ λ²ˆμ—! πŸ“¦: Spring Boot StarterλŠ” νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” 데 ν•„μš”ν•œ λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ„ ν•œ 그룹으둜 λ¬Άμ–΄μ„œ μ œκ³΅ν•©λ‹ˆλ‹€. 덕뢄에 κ°œλ°œμžλŠ” ν•„μš”ν•œ λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ„ λ”°λ‘œ μΆ”κ°€ν•  ν•„μš” 없이 Starter ν•˜λ‚˜λ‘œ ν•œ λ²ˆμ— μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ„€μ •μ˜ κ°„νŽΈν™” βš™οΈ: Starterλ₯Ό μ‚¬μš©ν•˜λ©΄ λ³΅μž‘ν•œ μ„€μ • 없이 μ›ν•˜λŠ” κΈ°λŠ₯을 μ‰½κ²Œ ν”„λ‘œμ νŠΈμ— μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ좕 μ‹œ spring-boot-starter-web을 μΆ”κ°€ν•˜λ©΄ ν•„μš”ν•œ ꡬ성이 μžλ™μœΌλ‘œ μ„€μ •λ©λ‹ˆλ‹€.

  • 직관적인 넀이밍 μ»¨λ²€μ…˜ ✍️: Starter의 이름은 spring-boot-starter-{μž‘μ—…μœ ν˜•} ν˜•μ‹μ„ λ”°λ¦…λ‹ˆλ‹€. μ›ν•˜λŠ” μž‘μ—… μœ ν˜•μ— 맞좰 μ μ ˆν•œ Starterλ₯Ό 선택할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ°μ΄ν„°λ² μ΄μŠ€ 연동을 μœ„ν•΄ spring-boot-starter-data-jpaλ₯Ό, μ›Ή κ°œλ°œμ„ μœ„ν•΄ spring-boot-starter-web을 μΆ”κ°€ν•˜λŠ” 방식이죠!

πŸ“ μ½”λ“œ μ˜ˆμ‹œ: Maven으둜 κ°„λ‹¨ν•˜κ²Œ μ„€μ •ν•˜κΈ°

  • <dependency> νƒœκ·Έλ₯Ό 톡해 Maven μ˜μ‘΄μ„±μ„ μ„€μ •ν•˜λŠ” 방식을 μ‚΄νŽ΄λ΄…μ‹œλ‹€. μ£Όμš” μ˜ˆμ‹œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
    • spring-boot-starter-data-jpa: λ°μ΄ν„°λ² μ΄μŠ€μ™€ 연동해 JPAλ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ μ—¬λŸ¬ 라이브러리λ₯Ό λ¬Άμ–΄ μ œκ³΅ν•©λ‹ˆλ‹€.
    • spring-boot-starter-web: μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ— ν•„μš”ν•œ λΌμ΄λΈŒλŸ¬λ¦¬λ“€, Spring MVC와 λ‚΄μž₯ WASλ₯Ό 포함해 μ›Ή μ„œλ²„λ₯Ό μ‰½κ²Œ ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • spring-boot-starter-test: ν…ŒμŠ€νŠΈ 라이브러리 λͺ¨μŒμœΌλ‘œ, JUnitμ΄λ‚˜ Mockito 같은 ν…ŒμŠ€νŠΈ 도ꡬλ₯Ό κ°„νŽΈν•˜κ²Œ μ‚¬μš©ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.

πŸ› οΈ λŒ€ν‘œμ μΈ Spring Boot Starter λͺ¨μŒ: μ†μ‰½κ²Œ κΈ°λŠ₯ μΆ”κ°€ν•˜κΈ°!

🎯 μ£Όμš” Spring Boot Starter μ„€λͺ…

  1. spring-boot-starter-web 🌐

    • μ„€λͺ…: Spring MVC둜 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€ λ•Œ ν•„μš”ν•œ λͺ¨λ“  μ˜μ‘΄μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
    • ν¬ν•¨λœ κΈ°λŠ₯: λ‚΄μž₯ μ›Ή μ„œλ²„(Tomcat λ“±)와 Spring MVC κΈ°λŠ₯이 ν¬ν•¨λ˜μ–΄ μžˆμ–΄, λΉ λ₯΄κ²Œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. spring-boot-starter-test πŸ§ͺ

    • μ„€λͺ…: ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ ν•„μˆ˜ λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ„ λͺ¨μ€ Starterμž…λ‹ˆλ‹€.
    • ν¬ν•¨λœ κΈ°λŠ₯: JUnit, Mockito, Spring Test λ“±μ˜ 라이브러리둜 λ‹¨μœ„ ν…ŒμŠ€νŠΈμ™€ 톡합 ν…ŒμŠ€νŠΈλ₯Ό μ†μ‰½κ²Œ μ„€μ •ν•˜κ³  μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  3. spring-boot-starter-validation βœ…

    • μ„€λͺ…: μœ νš¨μ„± 검증을 μ§€μ›ν•˜λŠ” ν•„μˆ˜ μ˜μ‘΄μ„±λ“€μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
    • ν¬ν•¨λœ κΈ°λŠ₯: Hibernate Validatorλ₯Ό 톡해 객체의 속성을 검증할 수 μžˆμ–΄, μž…λ ₯κ°’μ˜ 무결성을 보μž₯ν•©λ‹ˆλ‹€. 특히 μ‚¬μš©μž μž…λ ₯ 검증 μ‹œ 맀우 μœ μš©ν•©λ‹ˆλ‹€.
  4. spring-boot-starter-actuator πŸ“Š

    • μ„€λͺ…: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λͺ¨λ‹ˆν„°λ§ 및 관리 κΈ°λŠ₯을 μœ„ν•œ μ˜μ‘΄μ„± λͺ¨μŒμž…λ‹ˆλ‹€.
    • ν¬ν•¨λœ κΈ°λŠ₯: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœ 정보, λ©”νŠΈλ¦­, 건강 μƒνƒœ 체크 등을 μ œκ³΅ν•˜μ—¬ 운영 ν™˜κ²½μ—μ„œμ˜ λͺ¨λ‹ˆν„°λ§μ„ μ‰½κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  5. spring-boot-starter-data-jpa πŸ—ƒοΈ

    • μ„€λͺ…: JPAλ₯Ό ν†΅ν•œ λ°μ΄ν„°λ² μ΄μŠ€μ™€μ˜ μƒν˜Έμž‘μš©μ„ λ•λŠ” ORM κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
    • ν¬ν•¨λœ κΈ°λŠ₯: Spring Data JPA와 μ—°λ™ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ CRUD μž‘μ—…μ„ μ‰½κ²Œ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€.

πŸ› οΈ Spring Boot ν”„λ‘œμ νŠΈ 생성 및 μ˜μ‘΄μ„± μ„€μ • κ°€μ΄λ“œ

🌱 Spring Boot ν”„λ‘œμ νŠΈ 생성 μ„€μ •

  1. ν”„λ‘œμ νŠΈ 이름: HelloSpringBoot πŸ“›

    • μ„€μ •ν•˜λŠ” ν”„λ‘œμ νŠΈ μ΄λ¦„μœΌλ‘œ, μ΄λ²ˆμ—λŠ” HelloSpringBoot둜 λͺ…λͺ…ν•˜μ—¬ μƒμ„±ν•©λ‹ˆλ‹€.
  2. λΉŒλ“œ 도ꡬ: Maven βš™οΈ

    • Maven은 μ˜μ‘΄μ„± 관리와 λΉŒλ“œ μžλ™ν™”λ₯Ό μ§€μ›ν•˜λŠ” λ„κ΅¬λ‘œ, Spring Boot ν”„λ‘œμ νŠΈμ—μ„œ 많이 ν™œμš©λ©λ‹ˆλ‹€.
  3. νŒ¨ν‚€μ§• ν˜•μ‹: Jar πŸ“¦

    • JAR ν˜•μ‹μœΌλ‘œ μ„€μ •ν•˜λ©΄, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ κ°€λŠ₯ν•œ JAR 파일둜 νŒ¨ν‚€μ§•ν•  수 μžˆμ–΄ λ‚΄μž₯ μ„œλ²„λ₯Ό ν¬ν•¨ν•˜μ—¬ λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  4. Java 버전: 17 β˜•

    • κ°œλ°œμ— μ‚¬μš©ν•  Java 버전을 μ„ νƒν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” Java 17을 μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€.
  5. 개발 μ–Έμ–΄: Java πŸ“‹

    • Spring Boot ν”„λ‘œμ νŠΈλŠ” 주둜 Java둜 μž‘μ„±λ˜λ©°, μ—¬κΈ°μ„œλ„ Javaλ₯Ό μ„ νƒν•˜μ—¬ κ°œλ°œν•©λ‹ˆλ‹€.
  6. Group ID: com.ssafy 🏒

    • Group IDλŠ” ν”„λ‘œμ νŠΈμ˜ 도메인 κ·œμΉ™μ— 따라 보톡 쑰직λͺ…μ΄λ‚˜ ν”„λ‘œμ νŠΈ λͺ…을 λ°˜μ˜ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” com.ssafy둜 μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€.
  7. Artifact ID: hello πŸ†”

    • Artifact IDλŠ” ν”„λ‘œμ νŠΈ 고유 μ΄λ¦„μœΌλ‘œ hello둜 μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€.
  8. νŒ¨ν‚€μ§€ 경둜: com.ssafy.hello πŸ“‚

    • Group ID와 Artifact IDλ₯Ό μ‘°ν•©ν•΄ com.ssafy.hello νŒ¨ν‚€μ§€ 경둜둜 μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€.

🧩 Spring Boot 버전 및 μ˜μ‘΄μ„± μ„€μ •

  • Spring Boot DevTools πŸ”„: μžλ™ μž¬μ‹œμž‘ λ“± 개발 μ‹œ μœ μš©ν•œ κΈ°λŠ₯을 μ§€μ›ν•˜λŠ” μ˜μ‘΄μ„±μœΌλ‘œ, μ½”λ“œλ₯Ό μˆ˜μ •ν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μžλ™μœΌλ‘œ λ‹€μ‹œ μ‹œμž‘λ˜μ–΄ 개발 효율이 λ†’μ•„μ§‘λ‹ˆλ‹€.
  • Spring Web 🌐: Spring MVC와 λ‚΄μž₯ μ„œλ²„(Tomcat)을 포함해 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ— ν•„μˆ˜μ μΈ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 HTTP μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°„νŽΈν•˜κ²Œ ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ—‚οΈ Spring Boot ν”„λ‘œμ νŠΈ κΈ°λ³Έ 디렉토리 ꡬ쑰와 μ£Όμš” 파일

πŸ“ Spring Boot ν”„λ‘œμ νŠΈ ꡬ쑰 μ„€λͺ…

  1. src/main/java πŸ“„

    • Java μ†ŒμŠ€ μ½”λ“œκ°€ μœ„μΉ˜ν•˜λŠ” λ””λ ‰ν† λ¦¬μž…λ‹ˆλ‹€. 주둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 κ΄€λ ¨λœ μ½”λ“œλ₯Ό 여기에 μž‘μ„±ν•©λ‹ˆλ‹€.
  2. HelloSpringBootApplication.java πŸš€

    • src/main/java λ””λ ‰ν† λ¦¬μ˜ 메인 ν΄λž˜μŠ€μž…λ‹ˆλ‹€. @SpringBootApplication μ–΄λ…Έν…Œμ΄μ…˜μ΄ λΆ™μ–΄ 있으며, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ§„μž…μ μ΄ λ˜λŠ” 메인 λ©”μ„œλ“œκ°€ ν¬ν•¨λ˜μ–΄ μžˆμ–΄ Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 이 ν΄λž˜μŠ€μ—μ„œ μ‹œμž‘λ©λ‹ˆλ‹€.
  3. src/main/resources πŸ“š

    • 정적 λ¦¬μ†ŒμŠ€μ™€ μ„€μ • νŒŒμΌλ“€μ΄ λͺ¨μ—¬ μžˆλŠ” λ””λ ‰ν† λ¦¬μž…λ‹ˆλ‹€. static 디렉토리, templates 디렉토리, 그리고 application.properties 파일이 주둜 μœ„μΉ˜ν•©λ‹ˆλ‹€.
  4. static 🌐

    • CSS, JavaScript, 이미지 파일 λ“±μ˜ 정적 λ¦¬μ†ŒμŠ€λ₯Ό λ‹΄κ³  μžˆμŠ΅λ‹ˆλ‹€. μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 정적 λ¦¬μ†ŒμŠ€ μ œκ³΅μ„ μœ„ν•œ λ””λ ‰ν† λ¦¬μž…λ‹ˆλ‹€.
  5. templates 🎨

    • Thymeleaf, Velocity, FreeMarker λ“±μ˜ λ·° ν…œν”Œλ¦Ώ 엔진이 μ‚¬μš©ν•˜λŠ” HTML νŒŒμΌλ“€μ΄ 이곳에 μœ„μΉ˜ν•©λ‹ˆλ‹€. 동적 μ›Ή νŽ˜μ΄μ§€ 생성을 μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
  6. application.properties βš™οΈ

    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ‹€μ–‘ν•œ μ„€μ •κ³Ό 속성을 μ •μ˜ν•˜λŠ” νŒŒμΌμž…λ‹ˆλ‹€. μ„œλ²„ 포트, λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ • λ“± μ£Όμš” ν™˜κ²½ 섀정을 μ΄κ³³μ—μ„œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
  7. src/main/webapp πŸ“‚

    • JSP 파일 λ“± μ›Ή λ¦¬μ†ŒμŠ€κ°€ μœ„μΉ˜ν•˜λŠ” λ””λ ‰ν† λ¦¬μž…λ‹ˆλ‹€. JSPλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 주둜 이 디렉토리λ₯Ό 톡해 νŒŒμΌμ„ κ΄€λ¦¬ν•©λ‹ˆλ‹€.

πŸ”Ή 기타 μ£Όμš” 디렉토리 및 파일

  • src/test/java πŸ§ͺ: ν…ŒμŠ€νŠΈ μ½”λ“œκ°€ μœ„μΉ˜ν•˜λŠ” λ””λ ‰ν† λ¦¬λ‘œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κΈ°λŠ₯을 κ²€μ¦ν•˜λŠ” ν…ŒμŠ€νŠΈ ν΄λž˜μŠ€λ“€μ΄ ν¬ν•¨λ©λ‹ˆλ‹€.
  • Maven Dependencies πŸ“¦: Maven으둜 κ΄€λ¦¬λ˜λŠ” μ˜μ‘΄μ„± λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.
  • pom.xml πŸ“œ: Maven ν”„λ‘œμ νŠΈ μ„€μ • 파일둜, μ˜μ‘΄μ„± 관리와 λΉŒλ“œ 섀정을 μ •μ˜ν•˜λŠ” 핡심 νŒŒμΌμž…λ‹ˆλ‹€.

🌟 Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹œμž‘: Entry Point와 μ£Όμš” μ–΄λ…Έν…Œμ΄μ…˜

πŸš€ HelloSpringBootApplication.java: Spring Boot의 Entry Point

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹œμž‘ 클래슀: 이 ν΄λž˜μŠ€λŠ” Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹œμž‘μ μœΌλ‘œ, main λ©”μ„œλ“œκ°€ μžˆμ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•  λ•Œ ν˜ΈμΆœλ©λ‹ˆλ‹€.
  • @SpringBootApplication μ–΄λ…Έν…Œμ΄μ…˜: 이 μ–΄λ…Έν…Œμ΄μ…˜μ€ μ—¬λŸ¬ μ–΄λ…Έν…Œμ΄μ…˜μ„ κ²°ν•©ν•œ 메타 μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ, Spring Boot 섀정을 ν¬ν•¨ν•©λ‹ˆλ‹€.

🧩 @SpringBootApplication의 ꡬ성 μš”μ†Œ

  1. @SpringBootConfiguration βš™οΈ

    • μ„€λͺ…: Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 섀정을 μœ„ν•œ μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€. @Configurationκ³Ό μœ μ‚¬ν•˜κ²Œ μž‘λ™ν•˜μ—¬, 이 클래슀λ₯Ό Spring μ„€μ • 파일둜 μΈμ‹ν•˜κ²Œ ν•©λ‹ˆλ‹€.
  2. @EnableAutoConfiguration πŸ”„

    • μ„€λͺ…: Spring Boot의 μžλ™ ꡬ성을 ν™œμ„±ν™”ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€.
    • κΈ°λŠ₯: Spring BootλŠ” META-INF/spring.factories νŒŒμΌμ„ 읽어 ν•„μš”ν•œ 섀정을 μžλ™μœΌλ‘œ κ΅¬μ„±ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 데이터 μ†ŒμŠ€, JPA, λ©”μ‹œμ§€ λ³€ν™˜ λ“± μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— ν•„μš”ν•œ 섀정이 μžλ™ μ²˜λ¦¬λ©λ‹ˆλ‹€.
  3. @ComponentScan πŸ”

    • μ„€λͺ…: 이 μ–΄λ…Έν…Œμ΄μ…˜μ€ Spring이 @Componentκ°€ 뢙은 클래슀λ₯Ό μ°Ύμ•„ 빈(Bean)으둜 λ“±λ‘ν•˜κ²Œ ν•©λ‹ˆλ‹€.
    • κΈ°λŠ₯: @Configuration, @Controller, @RestController, @Service, @Repository 등이 μ„ μ–Έλœ 클래슀λ₯Ό μžλ™μœΌλ‘œ μŠ€μΊ”ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ»¨ν…μŠ€νŠΈμ— λ“±λ‘ν•©λ‹ˆλ‹€.
    • excludeFilters: νŠΉμ • ν΄λž˜μŠ€λ‚˜ νƒ€μž…μ„ μŠ€μΊ” λŒ€μƒμ—μ„œ μ œμ™Έν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, TypeExcludeFilter.classλ‚˜ AutoConfigurationExcludeFilter.class 등을 μ‚¬μš©ν•˜μ—¬ νŠΉμ • λΉˆμ„ μ œμ™Έν•  수 μžˆμŠ΅λ‹ˆλ‹€.

🌐 Spring Boot와 JSP μ„€μ •: 동적 μ›Ή νŽ˜μ΄μ§€ ꡬ성을 μœ„ν•œ ν•„μˆ˜ μš”μ†Œ

1. JSP 파일 (index.jsp)

  • νŽ˜μ΄μ§€ μ§€μ‹œμ–΄: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    • JSP νŽ˜μ΄μ§€μ˜ 섀정을 μ§€μ •ν•©λ‹ˆλ‹€. languageλŠ” μ‚¬μš© μ–Έμ–΄λ₯Ό, contentTypeκ³Ό pageEncoding은 λ¬Έμ„œμ˜ 인코딩을 μ„€μ •ν•©λ‹ˆλ‹€.
  • νƒœκ·Έ 라이브러리 μ„ μ–Έ: <%@ taglib prefix="c" uri="jakarta.tags.core" %>
    • JSTL (JavaServer Pages Standard Tag Library)을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ„ μ–Έλœ λΆ€λΆ„μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ cλŠ” JSTL μ½”μ–΄ νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ ‘λ‘μ‚¬μž…λ‹ˆλ‹€.
  • μ»¨ν…μŠ€νŠΈ 경둜 μ„€μ •: <c:set var="root" value="${pageContext.request.contextPath}"/>
    • root λ³€μˆ˜λ₯Ό μ»¨ν…μŠ€νŠΈ 경둜둜 μ„€μ •ν•΄ JSPμ—μ„œ μ‰½κ²Œ 경둜λ₯Ό μ‚¬μš©ν•  수 있게 ν•©λ‹ˆλ‹€.
  • HTML λ‚΄μš©: JSP 파일 λ‚΄μ—μ„œ msg1κ³Ό msg2 λ³€μˆ˜λ₯Ό 좜λ ₯ν•˜κ³  링크λ₯Ό μ‚¬μš©ν•˜μ—¬ 동적 μ½˜ν…μΈ λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

2. application.properties 파일 μ„€μ •

  • μ»¨ν…μŠ€νŠΈ 경둜 및 포트 μ„€μ •:
    • server.servlet.context-path=/myApp: μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΈ°λ³Έ 경둜λ₯Ό /myApp으둜 μ„€μ •ν•©λ‹ˆλ‹€.
    • server.port=80: μ„œλ²„μ˜ 포트λ₯Ό 80번으둜 μ„€μ •ν•©λ‹ˆλ‹€.
  • JSP μ„€μ • (ViewResolver):
    • spring.mvc.view.prefix=/WEB-INF/views/: JSP νŒŒμΌλ“€μ΄ μœ„μΉ˜ν•˜λŠ” κΈ°λ³Έ 경둜λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.
    • spring.mvc.view.suffix=.jsp: JSP 파일의 ν™•μž₯자λ₯Ό .jsp둜 μ„€μ •ν•˜μ—¬, μš”μ²­ μ‹œ 파일 ν™•μž₯자λ₯Ό μƒλž΅ν•˜κ³  μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. pom.xml νŒŒμΌμ— μ˜μ‘΄μ„± μΆ”κ°€

  • JSP μ„€μ •:
    • org.apache.tomcat.embed:tomcat-embed-jasper: JSP νŒŒμΌμ„ ν•΄μ„ν•˜κΈ° μœ„ν•΄ Tomcat Jasper μ˜μ‘΄μ„±μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.
  • JSTL μ„€μ •:
    • jakarta.servlet.jsp.jstl 및 org.glassfish.web: JSTL νƒœκ·Έ 라이브러리λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ˜μ‘΄μ„±μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 JSP νŒŒμΌμ—μ„œ λ‹€μ–‘ν•œ JSTL μ½”μ–΄ νƒœκ·Έλ₯Ό ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

βš™οΈ Spring Boot와 COC (Convention Over Configuration): κ΄€λ‘€λ‘œ 섀정을 κ°„μ†Œν™”ν•˜λŠ” 법

🎯 1. μžλ™ μ„€μ • (Auto-Configuration)

  • μ„€λͺ…: Spring BootλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ μ‹œ ν•„μš”ν•œ 섀정을 μžλ™μœΌλ‘œ κ΅¬μ„±ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ°μ΄ν„°λ² μ΄μŠ€ μ˜μ‘΄μ„±μ΄ μΆ”κ°€λ˜λ©΄ μžλ™μœΌλ‘œ DataSourceκ°€ μ„€μ •λ˜κ³ , spring-boot-starter-web을 μΆ”κ°€ν•˜λ©΄ λ‚΄μž₯된 μ›Ή μ„œλ²„(Tomcat)κ°€ μžλ™μœΌλ‘œ μ„€μ •λ©λ‹ˆλ‹€.
  • μž₯점: ν•„μš”ν•œ 섀정을 일일이 μΆ”κ°€ν•˜μ§€ μ•Šμ•„λ„, ν•„μš”ν•  λ•Œ μžλ™μœΌλ‘œ μ„€μ •λ©λ‹ˆλ‹€.

πŸ“¦ 2. λ””ν΄νŠΈ νŒ¨ν‚€μ§€ μŠ€μΊ”

  • μ„€λͺ…: @SpringBootApplication이 뢙은 클래슀의 ν•˜μœ„ νŒ¨ν‚€μ§€μ—μ„œ μ»΄ν¬λ„ŒνŠΈ(@Component, @Service, @Repository, @Controller λ“±)λ₯Ό μžλ™μœΌλ‘œ μŠ€μΊ”ν•΄ 빈으둜 λ“±λ‘ν•©λ‹ˆλ‹€.
  • μž₯점: λͺ…μ‹œμ μœΌλ‘œ νŒ¨ν‚€μ§€λ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•„λ„, Spring Bootκ°€ μžλ™μœΌλ‘œ ꡬ쑰λ₯Ό μΈμ‹ν•˜κ³  ν•„μš”ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ“±λ‘ν•©λ‹ˆλ‹€.

πŸ—‚οΈ 3. application.properties 파일의 κΈ°λ³Έ 경둜

  • μ„€λͺ…: src/main/resources에 μœ„μΉ˜ν•œ application.properties λ˜λŠ” application.yml νŒŒμΌμ„ κΈ°λ³Έ μ„€μ • 파일둜 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • μž₯점: μ„€μ • 파일의 μœ„μΉ˜μ™€ 이름을 λ”°λ‘œ μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ Spring Bootκ°€ μžλ™μœΌλ‘œ λ‘œλ“œν•©λ‹ˆλ‹€.

πŸ–₯️ 4. View Resolver κΈ°λ³Έ μ„€μ •

  • μ„€λͺ…: JSPλ₯Ό μ‚¬μš©ν•  λ•Œ κΈ°λ³Έ κ²½λ‘œμ™€ ν™•μž₯μžκ°€ μžλ™μœΌλ‘œ μ„€μ •λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, spring.mvc.view.prefix와 spring.mvc.view.suffix의 κΈ°λ³Έ κ°’μœΌλ‘œ /WEB-INF/ 디렉토리와 .jsp ν™•μž₯μžκ°€ μ§€μ •λ©λ‹ˆλ‹€.
  • μž₯점: λ³„λ„μ˜ μ„€μ • 없이도 JSP 파일이 μžλ™μœΌλ‘œ ν•΄μ„λ©λ‹ˆλ‹€.

🌐 5. λ‚΄μž₯ μ„œλ²„ μ‚¬μš©

  • μ„€λͺ…: spring-boot-starter-web을 μΆ”κ°€ν•˜λ©΄ 기본적으둜 Tomcat λ‚΄μž₯ μ„œλ²„κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€. λ³„λ„μ˜ WAS 섀정이 ν•„μš” 없이 μ„œλ²„κ°€ μžλ™μœΌλ‘œ μ‹€ν–‰λ©λ‹ˆλ‹€.
  • μž₯점: 개발 ν™˜κ²½μ—μ„œ 좔가적인 μ„œλ²„ μ„€μ • 없이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ν•˜κ³  배포할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“Œ 6. Starter μ˜μ‘΄μ„± μ‚¬μš©

  • μ„€λͺ…: spring-boot-starter-data-jpa, spring-boot-starter-web λ“±κ³Ό 같은 Starter νŒ¨ν‚€μ§€λ₯Ό 톡해 자주 μ‚¬μš©ν•˜λŠ” 라이브러리λ₯Ό 미리 μ‘°ν•©ν•˜μ—¬ μ œκ³΅λ©λ‹ˆλ‹€.
  • μž₯점: μ˜μ‘΄μ„±μ„ ν•˜λ‚˜μ”© μ„€μ •ν•  ν•„μš” 없이 Starter ν•˜λ‚˜λ§Œ 좔가해도 λͺ¨λ“  μ—°κ΄€λœ μ˜μ‘΄μ„±μ΄ μžλ™μœΌλ‘œ μΆ”κ°€λ©λ‹ˆλ‹€.

🧩 7. 빈 이름 μžλ™ 생성

  • μ„€λͺ…: λͺ…μ‹œμ μœΌλ‘œ 빈 이름을 μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ 클래슀λͺ…을 κΈ°λ³Έ 빈 μ΄λ¦„μœΌλ‘œ μžλ™ μƒμ„±ν•©λ‹ˆλ‹€.
  • μž₯점: 빈 이름을 μˆ˜λ™μœΌλ‘œ μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ Spring이 λΉˆμ„ μΈμ‹ν•˜κ³  관리할 수 μžˆμ–΄, 빈 등둝이 λ”μš± κ°„νŽΈν•΄μ§‘λ‹ˆλ‹€.

0개의 λŒ“κΈ€