๐ฌ Spring Rest Docs ๋? Spring REST Docs ๋ RESTful ์๋น์ค์ ๋ฌธ์ํ๋ฅผ ๋์์ฃผ๋ ๋๊ตฌ์ด๋ค. ๋ฌธ์ ์์ฑ ๋๊ตฌ๋ก Asciidoctor ๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ์ด
๐ฌ 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