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์—์„œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฉˆ์ท„๋‹ค. (๊นƒํ—ˆ๋ธŒ์— ๋“ค์–ด๊ฐ€๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.)

 

 

 

 ๊ฒฐ๋ก ์ ์œผ๋กœ ๋งํ•˜์ž๋ฉด, 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๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

giraffe_