Swagger๋ ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก REST API๋ฅผ ๋ฌธ์ํํ ์ ์๊ฒ ๋์์ฃผ๋ ์คํ์์ค ํ๋ ์์ํฌ์ด๋ค.
๋ฐฑ์๋์์ ๊ฐ๋ฐํ ์๋ฒ API๋ฅผ ํ๋ก ํธ์๋์์ ์ฐ๊ฒฐํด์ผ ํ๋๋ฐ, ๋ฌธ์ํ๋ฅผ ํด๋๋ฉด API๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์์ด ํ์ ํ๋ ๋ฐ ์ข๋ค. ๊ทธ๋ฆฌ๊ณ Swagger ๊ฐ์ ๊ฒฝ์ฐ์๋ ๊ฐ๋จํ ํ ์คํธ๋ฅผ ํ ์ ์๋ UI๋ ์ ๊ณตํ์ฌ API ํ ์คํธ๋ฅผ ํ๊ธฐ์๋ ์ข๋ค.
๊ทธ๋์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ, ์๋ฒ API๋ฅผ ๋ฌธ์ํ๋ฅผ ์ํด Swagger๋ฅผ ์ฌ์ฉํ์๋ค. ์๋ ์ Spring Boot 2.X ๋ฒ์ ์์ ๊ฐ๋ฐํ๋ฉฐ Springfox๋ฅผ ์ ์ฉํด Swagger๋ฅผ ์ถ๊ฐํ์๋๋ฐ, ์ด๋ฒ์ Spring 3.X ๋ฒ์ ์์ ๊ฐ๋ฐํ๋ฉฐ Springfox๊ฐ ์ ์ฉ๋์ง ์๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ค.
Springdoc์ ์ ์ฉํ๋ฉด ํด๊ฒฐํ ์ ์๋ค๋๋ฐ, ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด์ ๋ํด ์์๋ณด๊ณ Swagger๋ฅผ ์ ์ฉํ๊ณ ์ ๊ธ์ ์ฐ๊ฒ ๋์๋ค!
Swagger๋ฅผ ๊ตฌํํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก๋ ํฌ๊ฒ Springfox์ Springdoc ๋ ๊ฐ์ง๊ฐ ์๋ค.
Springfox
์๋์ผ๋ก Spring์์ JSON API๋ฅผ ๋ฌธ์ํํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. 2020๋ 10์์ ๋ง์ง๋ง์ผ๋ก `3.0.0`์์ ์ ๋ฐ์ดํธ๊ฐ ๋ฉ์ท๋ค. (๊นํ๋ธ์ ๋ค์ด๊ฐ๋ฉด ํ์ธํ ์ ์๋ค.)
- ๊ณต์ ๋ฌธ์ : https://springfox.github.io/springfox/docs/current/
๊ฒฐ๋ก ์ ์ผ๋ก ๋งํ์๋ฉด, Spring Boot 2.X ๋ฒ์ ์์๋ ์ ์ฉ์ด ๋๋, Spring Boot 3.X ๋ฒ์ ์์๋ ์ ์ฉ์ด ๋์ง ์๋๋ค. ์๊ธฐ๋ฅผ ๋ณด๋ฉด ๊ทธ๋ด ๊ฒ์ด Spring Boot 3.0 ๋ฒ์ ์ 2022๋ 11์์ ๋ฆด๋ฆฌ์ฆ ๋์๋ค.
Dependency
dependencies {
implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'
}
`springfox-boot-starter` ์์กด์ฑ์ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
Springdoc
Spring Boot ํ๋ก์ ํธ์ ์๋์ ์ผ๋ก API๋ฅผ ๋ฌธ์ํ ํด์ฃผ๋ ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ๋ฐํ์ ์, Spring ์ค์ ๊ณผ ํด๋์ค, ์ด๋ ธํ ์ด์ ์ ์ฝ์ด์ ์ด๋ฅผ ๋ฐํ์ผ๋ก API ๋ฌธ์๋ฅผ ๋ง๋ ๋ค.
์์ง๊น์ง ํ๋ฐํ ์ ๋ฐ์ดํธ ๋๊ณ ์์ผ๋ฉฐ, Spring Boot 3๋ฅผ ์ง์ํ๋ค.
- ๊ณต์ ๋ฌธ์ : https://springdoc.org/
Springdoc์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. Springdoc์ Spirng WebMvc์ WebFlux๋ฅผ ์ง์ํ๋ค.
Spring Web์ ์ด๋ค๋ฉด `springdoc-openapi-starter-webmvc-api`์์กด์ฑ์ ์ถ๊ฐํ๊ณ ,
Spring WebFlux๋ฅผ ์ด๋ค๋ฉด `springdoc-openapi-starter-webflux-api`๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
`springdoc-openapi-starter-webmvc-api`์ `springdoc-openapi-starter-webmvc-ui`์ ์ฐจ์ด์ ์ผ๋ก๋ ์๊ฐํ์ ์๋ค.
api๋ OpenAPI ๋ฌธ์๋ฅผ ์์ฑํ๊ณ , ui๋ OpenAPI ๋ฌธ์๋ฅผ ๋ณด์ฌ์ค ์ ์๋ UI๋ฅผ ์ ๊ณตํ๋ค.
Dependency
dependencies {
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0'
}
http://localhost:8080/swagger-ui/index.html
์๋ฒ์ ip์ ํฌํธ๋ฒํธ๋ฅผ ๋ง๊ฒ ์ ๋ ฅํ๊ณ , ํด๋น ์ฃผ์๋ก ์ ์ํ๋ฉด Swagger UI ํ์ด์ง๊ฐ ๋ฌ๋ค.
SwaggerConfig๋ฅผ ๊ตฌํํ์ง ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก์ ํธ ๋ด์ Controller์ ์ด๋ ธํ ์ด์ ์ ๋ถ์ํด์ ์๋์ ์ผ๋ก API๋ฅผ ์๊ฐํํด์ค๋ค.
ํ์ง๋ง ์ข ๋ ์์ธํ API ๋ช ์ธ๊ฐ ํ์ํ๋ค๋ฉด, SwaggerConfig๋ฅผ ์ถ๊ฐํด Controller์ Entity, Dto ํด๋์ค์ ๋ณ๋์ Swagger ์ด๋ ธํ ์ด์ ์ ๋ถ์ด๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ปค์คํ Swagger UI๋ฅผ ๋ง๋ค ์ ์๋ค.