< ๐Ÿ’ก Spring Rest Docs ๋กœ Swagger API ๋ฌธ์„œ ๊ด€๋ฆฌ ์ž๋™ํ™” > ๐Ÿ’ฌ Spring Rest Docs ๋ž€? Spring REST Docs ๋Š” RESTful ์„œ๋น„์Šค์˜ ๋ฌธ์„œํ™”๋ฅผ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค. ๋ฌธ์„œ ์ž‘์„ฑ ๋„๊ตฌ๋กœ Asciidoctor ๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๊ฒƒ์„ ํ†ตํ•ด HTML ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ Markdown ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. RESTful API๋ฅผ ๋ฌธ์„œํ™” ํ• ๋•Œ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋Š” API ์—์„œ ํ•„์š”ํ•œ HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ Spring REST Docs ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ฆฌ์†Œ์Šค์™€ HTTP ์š”์ฒญ/์‘๋‹ต์— ๋Œ€ํ•œ ์„ธ๋ถ€ ๋‚ด์šฉ์„ ๋ฌธ์„œํ™”ํ•˜๋Š”๋ฐ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๐Ÿ’ฌ Swagger ๋ž€? RESTful API ๋ฅผ ์•ฝ์†๋œ ๊ทœ์น™์— ๋”ฐ๋ผ json ์ด๋‚˜ yaml ํ˜•์‹์œผ๋กœ ๋ฌธ์„œํ™”ํ•œ Open API Specification(OAS) ๋ผ๋Š”๊ฒŒ ์žˆ๋Š”๋ฐ ์ด ๋ฌธ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค. API ๋ฌธ์„œ ์ž๋™ํ™” ๋„๊ตฌ๋กœ Spring REST Docs ์˜ ๋น„๊ต๊ตฐ์œผ๋กœ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š”๋ฐ Spring ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์„œ๋น„์Šค ์ฝ”๋“œ์— ์–ด๋…ธํ…Œ์ด์…˜๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ‹์ง„ API ๋ฌธ์„œ ํ•˜๋‚˜๊ฐ€ ๋š๋”ฑ ๋งŒ๋“ค์–ด์ง€๋Š” ์‹ ๊ธฐํ•œ ๋„๊ตฌ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์‹ค์ œ๋กœ API ๋ฅผ ์š”์ฒญํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„์žˆ๊ธฐ ๋•Œ๋ฌธ์— API ๋ฅผ ์–ด๋–ป๊ฒŒ ์š”์ฒญํ•˜๊ณ  ์–ด๋–ค ์‘๋‹ต์„ ๋‚ด๋ ค์ฃผ๋Š”์ง€๋„ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๐Ÿ’ฌ ์ด๊ฑธ ํ•˜๊ฒŒ ๋œ ์ด์œ ? - wiki ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœํ•œ API ๋ฌธ์„œ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ํƒ€ ๋ถ€์„œ์— ๊ณต์œ ํ•˜์˜€๋Š”๋ฐ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ• ๋•Œ๋งˆ๋‹ค ๊ด€๋ฆฌ๊ฐ€ ํž˜๋“ค๊ณ  ์ž˜๋ชป ์ž‘์„ฑ๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋˜์ง€ ์•Š์•„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋น„์šฉ์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜์˜€๋‹ค. - Swagger ๋ฅผ ํ†ตํ•ด API ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•ด๋ณด๋‹ˆ API ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋„ ํ•  ์ˆ˜ ์žˆ๊ณ  ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋ ๋•Œ ๊ฐ™์ด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์œผ๋‚˜ ์‹ค์ œ ์ฝ”๋“œ์— API ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ๊ฐ™์ด ์ž‘์„ฑํ•ด์•ผํ–ˆ๊ณ  ๊ฒ€์ฆ๋˜์ง€ ์•Š์€(์ •์ƒ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”) API ๊ฐ€ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์—ˆ๋‹ค. - Spring Rest Docs ๋ฅผ ์จ๋ณด๋‹ˆ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด API ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด ๊ฒ€์ฆ๋œ API ๋งŒ ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค์ˆ˜ ์žˆ๊ณ  ์‹ค์ œ ์ฝ”๋“œ๋Š” API ๋ฌธ์„œ์— ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„์„œ ์ข‹์•˜์ง€๋งŒ Swagger ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” API ํ˜ธ์ถœ ๊ธฐ๋Šฅ์ด ์—†์–ด์„œ ์•„์‰ฌ์› ๋‹ค.(๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์ด์ง€๋งŒ UI ๋„ Swagger ๊ฐ€ ๋” ์ข‹๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค) - ์ข€ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ๋ฅผ ์ฐพ๋˜ ์ค‘ ๋งํฌ๋กœ ๊ฑธ์–ด๋‘” ๋‚ด์šฉ์„ ๋ณด๊ฒŒ ๋˜์—ˆ๊ณ  ํŒ€ ํ”„๋กœ์ ํŠธ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•˜์—ฌ ์ ์šฉํ•ด ๋ณด์•˜๋‹ค. ๐Ÿ’ฌ ์ข‹์•˜๋˜ ์  - ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์–ด๋Š์ •๋„ ๊ฒ€์ฆ๋œ API ๊ฐ€ ๋ฌธ์„œ์— ๋ฐ˜์˜๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ (+ ์ด๋ฅผ Swagger ๋กœ ์‹คํ–‰ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ). - API์— ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๊ฒŒ๋˜๊ณ  ์ด๋กœ ์ธํ•ด API ๋ฌธ์„œ ๋ณ€๊ฒฝ๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์ .(๋‹จ, API ๋ฌธ์„œ๊นŒ์ง€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ณ€๊ฒฝ๋˜๋ ค๋ฉด ๋นŒ๋“œ/๋ฐฐํฌ ๊ตฌ์กฐ๊นŒ์ง€ ์ž˜ ์žกํ˜€์ ธ์•ผ ํ•œ๋‹ค) - Swagger ํŠน์„ฑ์ƒ ์—ฌ๋Ÿฌ API ๋ฌธ์„œ๋“ค์„ ๊ฐ™์ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ํ†ตํ•ฉ API ๋ฌธ์„œ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ ์ปดํฌ๋„ŒํŠธ ๋ณ„๋กœ Swagger URL ์ด ๋”ฐ๋กœ ์žˆ์ง€ ์•Š์•„๋„ ๋˜์–ด ํƒ€ ๋ถ€์„œ์— ๊ณต์œ ํ•  ๋•Œ ํŽธํ–ˆ๋‹ค.(wiki ๋กœ ์น˜๋ฉด API ๋ฌธ์„œ ๋ถ€๋ชจ ํŽ˜์ด์ง€ ํ•˜๋‚˜๋งŒ ๊ณต์œ ํ•˜๋ฉด ๋˜๋Š”๊ฒƒ๊ณผ ๋™์ผ) ๐Ÿ’ฌ ์•„์‰ฌ์šด ์  - Spring Rest Docs ๋ฅผ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ์–ด์ฉ”์ˆ˜ ์—†๋Š” ํ•œ๊ณ„์ธ๊ฐ€ ์‹ถ๊ธด ํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์‹œ API ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. - ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฒ€์ฆ์„ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋ฉด API ๋ฌธ์„œ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์— ๋Œ€ํ•œ ๊ณ ๋ ค๋ฅผ ํ•˜๋ฉด์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.(๊ฐ€๋”์€ ์ฃผ๊ฐ์ „๋„๊ฐ€ ๋œ๋“ฏํ•œ ๋Š๋‚Œ๋„ ๋ฐ›๋Š”๋‹ค) - ๊ฐ€๋”์”ฉ ํƒ€ ๋ถ€์„œ์—์„œ ๋ฏธ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ API Interface ๊ณต์œ ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ƒ๋Š” ๋ฌธ์˜๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๋‹ต์ด ์—†๋‹ค.(์ด๋Ÿด๋• ์–ด์ฉ”์ˆ˜ ์—†์ด ์šฐ๋ฆฌ์ชฝ API ์„ค๊ณ„ ๋ฌธ์„œ๋ฅผ ๊ณต์œ ํ•ด์ฃผ๊ณค ํ•œ๋‹ค) ๐Ÿ“š Reference - Swagger: https://swagger.io/docs/open-source-tools/swagger-ui/usage/installation/ - Spring Rest Docs: https://docs.spring.io/spring-restdocs/docs/current/reference/html5/ - Rest Docs API specification Integration: https://github.com/ePages-de/restdocs-api-spec - Restdocs Spec Generation Support: https://github.com/BerkleyTechnologyServices/restdocs-spec

[NHN FORWARD 2020] MSA ํ™˜๊ฒฝ์—์„œ API ๋ฌธ์„œ ๊ด€๋ฆฌํ•˜๊ธฐ: ์ƒ์„ฑ๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€

YouTube

[NHN FORWARD 2020] MSA ํ™˜๊ฒฝ์—์„œ API ๋ฌธ์„œ ๊ด€๋ฆฌํ•˜๊ธฐ: ์ƒ์„ฑ๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€

๋‹ค์Œ ๋‚ด์šฉ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด?

๋˜๋Š”

์ด๋ฏธ ํšŒ์›์ด์‹ ๊ฐ€์š”?

2022๋…„ 8์›” 9์ผ ์˜ค์ „ 3:52

๋Œ“๊ธ€ 0




๋น„์Šทํ•œ ๊ฒŒ์‹œ๋ฌผ

์ฃผ๊ฐ„ ์ธ๊ธฐ TOP 10

1

์„œ์ง€์—ฐ ๊ฐœ๋ฐœ์ž

[์ฑ…] ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋…ธํŠธ

2

์กฐ์„œํฌ ์ปฌ๋ฆฌ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž

๐Ÿ•Š๏ธ ๊ฐœ๋ฐœ ์„ธ๊ณ„์—์„œ ์ธ๊ธฐ ์žˆ๋Š” API ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ

3

ํ•œ๊ธฐ์šฉ UpZen ์ฐฝ์—…์ž ๋Œ€ํ‘œ

์ข‹์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผํ•˜๋Š” 9๊ฐ€์ง€ ํฌ์ธํŠธ๋“ค - 3. ์˜์‚ฌ ์†Œํ†ต ์ž˜ํ•˜

4

์ด๋„ํ–‰ ์ง๋ฐฉ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด

2024๋…„๋„์— ๋ฐฐ์šฐ๋ฉด ์ข‹์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด Part 2

5

ํ•œ์ •(Jung Han) ๋ผ์ธํ”Œ๋Ÿฌ์Šค ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

ํ”„๋ŸฐํŠธ์—”๋“œ์˜ ๋ฏธ๋ž˜ ํƒ์ƒ‰ํ•˜๊ธฐ

์ถ”์ฒœ ํ”„๋กœํ•„