๐ Spring Boot
Java ๊ธฐ๋ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ๊ฐ์ํํ๊ณ ๊ฐ์ํํ๋ ํ๋ ์์ํฌ
๐ก Spring Boot์ ํน์ง
- legacy Spring
- Application์ ๊ฐ๋ฐํ๋ ค๋ฉด ์ฌ์ ์ ๋ง์ ์์
์ ํด์ผ ํ๋ค.
- library ์ถ๊ฐ(pom.xml), dependency ์ค์ (DI), SpringFramework๊ฐ ์ฒ๋ฆฌํด์ผ ํ๋ ์ฌ๋ฌ ๊ฐ์ง ๊ตฌ์ฑ ๋ฐ ์ค์ ํ์ผ ๋ฑ
- SpringBoot์ ์ฅ์
- project์ ๋ฐ๋ผ ์์ฃผ ์ฌ์ฉ๋๋ library๋ค์ด ๋ฏธ๋ฆฌ ์กฐํฉ๋์ด ์์ (starter ์์กด์ฑ ์ ๊ณต)
- ๋ณต์กํ ์ค์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌ
- ์น ์๋ฒ์ ๋
๋ฆฝ์ ์ธ Spring Application ๊ตฌ์ถ ๊ฐ๋ฅ
- Tomcat, Jetty์ ๊ฐ์ WAS๋ฅผ ์ถ๊ฐ๋ก ์ค์นํ์ง ์์๋ ๊ฐ๋ฐ ๊ฐ๋ฅํ๋ค. (๋ด์ฅ ์๋ฒ)
- WAS์ ๋ฐฐํฌํ์ง ์๊ณ ๋ ์คํํ ์ ์๋ JAR ํ์ผ๋ก Web Application์ ๊ฐ๋ฐํ ์ ์๋ค.
๐ก spring boot starter
- ์์กด์ฑ์ด ๋ชจ์ฌ ์๋ ๊ทธ๋ฃน
- ํ์ํ ๊ธฐ๋ฅ์ ๊ฐํธํ๊ฒ ์ค์
- naming convention : โspring-boot-starter-{์์
์ ํ}โ
- ๋ํ์ ์ธ spring boot starter
- spring-boot-starter-web : Spring MVC๋ฅผ ์ฌ์ฉํ์ฌ web service๋ฅผ ๊ฐ๋ฐํ ๋ ํ์ํ ์์กด์ฑ ๋ชจ์
- spring-boot-starter-test : Spring Boot Application์ ํ
์คํธํ๊ธฐ ์ํด ํ์ํ ์์กด์ฑ ๋ชจ์
- spring-boot-starter-validation : validation check๋ฅผ ์ํด ํ์ํ ์์กด์ฑ ๋ชจ์
- spring-boot-starter-actuator : monitoring์ ์ํด application์์ ์ ๊ณตํ๋ ๋ค์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ธฐ ์ฝ๊ฒ ํ๋ ์์กด์ฑ ๋ชจ์
- spring-boot-starter-data-jpa : ORM Interface์ ๋ชจ์์ธ JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์์กด์ฑ ๋ชจ์
๐ก Spring Boot Project ์ฃผ์ ํ์ผ
- src/main/java
- SpringBootApplication.java
- application์ ์์ํ ์ ์๋ main method๊ฐ ์กด์ฌํ๋ ์คํ๋ง ๊ตฌ์ฑ ๋ฉ์ธ ํด๋์ค
- static
- css, js, img ๋ฑ์ ์ ์ resource directory
- templates
- SpringBoot์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฌ๋ฌ๊ฐ์ง View Template(Thymeleaf, Velocity, FreeMarker ๋ฑ) ์์น
- application.properties
- application ๋ฐ ์คํ๋ง์ ์ค์ ๋ฑ์์ ์ฌ์ฉํ ์ฌ๋ฌ ๊ฐ์ง property๋ฅผ ์ ์ํ file
- src/main/webapp
- jsp ๋ฑ์ ๋ฆฌ์์ค directory
๐ก@SpringBootApplication Annotation
- @ SpringBootConfiguration
- @ EnableAutoconfiguration
- SpringBoot์์ ์๋ ๊ตฌ์ฑ์ ํ์ฑํํ๋ Annotation
- ์๋ฒ๊ฐ ์คํ๋ ๋ SpringBoot์ ๋ฉํ ํ์ผ์ ์ฝ๊ณ ์ ์๋ ์ค์ ๋ค์ ์๋์ผ๋ก ๊ตฌ์ฑ
- @ ComponentScan
- ์ฌ์ฉ์๊ฐ ๋ฑ๋กํ ๋น์ ์ฝ๊ณ ๋ฑ๋ก
- @ Configuration, @ Controller, @ RestController, @ Service, @ Repository๊ฐ ์ ์ธ๋ class
๐ Swagger
- FrontEnd ๊ฐ๋ฐ์์ ๊ฒฝ์ฐ ํ๋ฉด๊ณผ ๋ก์ง์ ์ง์ค์ ํ๊ณ BackEnd ๊ฐ๋ฐ์๊ฐ ๋ง๋ ๋ฌธ์ API๋ฅผ ๋ณด๋ฉฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ๋จ
โ ๊ฐ๋ฐ ์ํฉ์ ๋ณํ์ ๋ฐ๋ฅธ API์ ์ถ๊ฐ ๋๋ ๋ณ๊ฒฝํ ๋๋ง๋ค ๋ฌธ์์ ์ ์ฉํ๋ ๋ถํธํจ ๋ฐ์
โ Swagger ์ฌ์ฉ
๐ก Swagger
๊ฐ๋จํ ์ค์ ์ผ๋ก ํ๋ก์ ํธ์ API ๋ชฉ๋ก์ ์น์์ ํ์ธ ๋ฐ ํ
์คํธ ํ ์ ์๊ฒ ํด์ฃผ๋ Library
- Swagger๋ฅผ ์ฌ์ฉํ๋ฉด Controller์ ์ ์๋์ด ์๋ ๋ชจ๋ URL์ ๋ฐ๋ก ํ์ธ ๊ฐ๋ฅํ๋ค.
- API ๋ชฉ๋ก ๋ฟ ์๋๋ผ API์ ๋ช
์ธ ๋ฐ ์ค๋ช
๋ ๋ณผ ์ ์์ผ๋ฉฐ, API๋ฅผ ์ง์ ํ
์คํธ ๊ฐ๋ฅํ๋ค.
๐ก๊ด๋ จ ์ด๋
ธํ
์ด์
- @Tag
- API ์๋ํฌ์ธํธ๋ฅผ ๊ทธ๋ฃนํํ๊ณ ์นดํ
๊ณ ๋ฆฌ๋ฅผ ํ์ฑํ๋ ๋ฐ ์ฌ์ฉ
- ์ฃผ๋ก @RestController ํด๋์ค์ ์ ์ฉ
- name๊ณผ description ์์ฑ์ ํตํด API ๊ทธ๋ฃน์ ์ด๋ฆ๊ณผ ์ค๋ช
์ ์ ์
- @Operation
- ๊ฐ๋ณ API ์๋ํฌ์ธํธ์ ๋ํ ์์ธ ์ ๋ณด๋ฅผ ์ ๊ณต
- Controller ๋ฉ์๋์ ์ฌ์ฉ
- summary์ description ์์ฑ์ ํตํด API์ ๊ฐ๋ตํ ์ค๋ช
๊ณผ ์์ธ ์ค๋ช
์ ์ ๊ณต
- @Schema
- API ์์ฒญ/์๋ต ๋ชจ๋ธ์ ์์ธ ์ ๋ณด๋ฅผ ์ ์
- DTO ํด๋์ค๋ ํ๋์ ์ฌ์ฉ
- description, example, allowableValues ๋ฑ์ ์์ฑ์ ํตํด ๋ชจ๋ธ ๊ตฌ์กฐ์ ์์ฑ์ ์๋ฏธ๋ฅผ ์ค๋ช