ํธ๋ฆฌํ API ์ ๋๋ ์ดํฐ โswagger-typescript-apiโ
ํธ๋ฆฌํ API ์ ๋๋ ์ดํฐ โswagger-typescript-apiโ ๊ด๋ จ
์ค์จ๊ฑฐ(Swagger)์ ํ์
์๊ฐ๋ณด๋ค ๊ฐ๋ฐ์๋ ๋ฌธ์ ์์ ์ด ํ์ํ ๋๊ฐ ๋ง๋ค. ๊ทธ๋์ ๋ฌธ์ํํด์ผ ํ ๋ ๋ ํจ์จ์ ์ด๊ณ ์๋ํ๋ ๋ฐฉ์์ ์ฐพ๋๋ฐ, ์ด๋ ๋ํ์ ์ธ ๋ฌธ์๋ก API ๋ฌธ์๊ฐ ์๋ค. API ๋ฌธ์๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ์ ์ ์กํ๊ธฐ ์ํด ์์์ผ ํ๋ ์์ฒญ ์ ๋ณด, URL/URI ๋ฑ์ ์ ๋ฆฌํด ๋ ์ฝ์ ๋ฌธ์์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ํ์ํ๋ค. API ๋ฌธ์๋ฅผ ์์ฑํ๋ ์๊ฐ์ API ๊ฐ์๊ฐ ๋ง์์ง์๋ก ๋์ด๋๋ฉฐ, ๋์ฒด๋ก ํ ๋ฒ์ ์์ฑํ์ง ๋ชปํ๋ค. ๊ฐ๋ฐ ๊ณผ์ ์์ API ํจ์ ์๊ทธ๋์ฒ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๊ธฐ ๋๋ฌธ์ธ๋ฐ, ๊ฐ๋ฐ์์๊ฒ ์ค์ํ๋ฉด์๋ ๋ฒ๊ฑฐ๋ก์ด ์์ ์ด๋ค.
๊ฐ๋ฐ์๊ฐ ๊ฒช๋ ์ด๋ฌํ ์ด๋ ค์์ ํด๊ฒฐํ๊ธฐ ์ํด ์ค์จ๊ฑฐ(Swagger)๊ฐ ํ์ํ๋ค. ์ค์จ๊ฑฐ๋ JSON๊ณผ YAML ํฌ๋งท์ ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํ ์ ์๋ RESTful API ํ์ผ์ ์๋์ผ๋ก ์์ฑํด ์ฃผ๋ ํ๋ ์์ํฌ๋ค. 2011๋ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ ์์์ผ๋ก ์คํ์์ค ์ํ๊ณ์์ ๋ฌด๋ญ๋ฌด๋ญ ์ฑ์ฅํ๋ค. ์คํ์์ค ๊ธฐ์ฌ์๋ค์ ๊ด๋ฆฌ ํธ์์ฑ์ ์ํด OpenAPI Specification(OAS)์ด๋ผ๋ ๊ท์น์ ์ ํ๊ณ , ์ด๊ฒ์ ์ค์จ๊ฑฐ ํด์ด ์ง์ํด์ผ ํ๋ ๊ธฐ๋ฅ ๋ช ์ธ๋ก ์ผ์๋ค. ์ดํ ์ด ํ์ค์ API ์ค๊ณ ๋ฐ ๋ฌธ์ํ๋ฅผ ์ํ ํ์ค ์คํ์ผ๋ก ์๋ฆฌ ์ก์๊ณ , ๋ง์ ํด์์ ์ด ํ์ค์ ๋ฐ๋ฅด๊ฒ ๋์๋ค.
์ค์จ๊ฑฐ๊ฐ ๋๋ฆฌ ์ฐ์ด๋ฉด์ API ๋ฌธ์๋ฅผ ์ ๋ฌํ๊ณ ์ํตํ๋ ๋น์ฉ๊ณผ ํด๋จผ์๋ฌ ๊ฐ๋ฅ์ฑ์ด ํ์ ์ ์ผ๋ก ์ค์ด๋ค์๊ณ , ๊ฐ๋ฐ์๋ค์ ๊ธฐ๋ฅ ๊ตฌํ์ ์ง์คํ ์ ์๊ฒ ๋์๋ค. ๋ํ ์ค์จ๊ฑฐ์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ ๋๋ถ์ API ํ ์คํธ ํ๊ฒฝ๋ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์๋ค.
๋๋ ์ค์จ๊ฑฐ์ ๋ํด ์๊ณ ์์์ง๋ง, ๊ฐ๋ฐ์๊ฐ ๋ ์ดํ ์ง๊ธ๊น์ง ์ค์ ๋ก ์ฌ์ฉํ ์ ์ ์์๋ค. ์๋์ผ๋ก ๋ฌธ์๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณค ํ๋ค. ๊ทธ๋ฌ๋ ์ค ์ต๊ทผ ํ์ฌ ํ๋ก์ ํธ์์ API ์ ๋๋ ์ดํฐ๋ฅผ ์ฌ์ฉํด ๋ณด๊ธฐ๋ก ํ๊ณ , JSON ํ์ผ์ ํ์
์คํฌ๋ฆฝํธ ํ์ผ๋ก ๋ณํํด ์ฃผ๋ ํจ์จ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋์ง ์ฐพ์๋ณด๊ฒ ๋์๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ด๊ฐ ์ ํํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ swagger-typescript-api
๋ค. API ์๋ ์์ฑ์ ์ฒ์ ํด๋ณด๋ ๊ฐ๋ฐ์, ํนํ ๋์ฒ๋ผ ํ์
์คํฌ๋ฆฝํธ๋ฅผ ๋ค๋ฃจ๋ ๊ฐ๋ฐ์์๊ฒ ๋์์ด ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ด๋ฒ ๊ธ์์ ์ดํด๋ณด๊ณ ์ ํ๋ค.
API ์๋ ์์ฑ์ ์ํด ํ์ํ ๊ฒ๋ค
1) ์ ํฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐพ๊ธฐ
์ด๋ฏธ ์๋ง์ API ์ ๋๋ ์ดํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ง๋ง ์ ๋ง๋ค ์ง์ํ๋ ์ต์ ์ ์กฐ๊ธ์ฉ ๋ค๋ฅด๋ค. ๊ทธ๋์ ์ ์ดํด๋ณด๊ณ ๋ณธ์ธ์๊ฒ ์ ํฉํ ๊ฒ์ ์ ํํด์ผ ํ๋ค. ์ด๋ ๋ช ๊ฐ์ง ๊ธฐ์ค์ ์ ํด๋๋ ๊ฒ์ด ์ข๋ค.
์ฒซ ๋ฒ์งธ ๊ธฐ์ค์ ์ฌ์ฉ์ ์๋ค. ์ฌ์ฉ์ ์๋ ๊นํ๋ธ start ๋๋ npm ์ํด๋ฆฌ ๋ค์ด๋ก๋ ํ์๋ก ์ถ์ธกํ ์ ์๋ค. ์ฌ์ฉ์๊ฐ ๋ง๋ค๋ ๊ฒ์ ๊ทธ๋งํผ ์ฌ์ฉ์ฑ์ด ๋๋ค๋ ์๋ฏธ๋ก ํด์ํ ์ ์๋ค. ๋ง์ฝ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ๊ฑฐ๋ ๋ฒ๊ทธ๊ฐ ๋ง๊ณ , ์ ๋๋ก ๊ด๋ฆฌ๋์ง ์๋๋ค๋ฉด ์ฌ์ฉ์๋ค์ ๋ ๋๊ธฐ ๋ง๋ จ์ด๋ค. ์ข ๋ ์์ ํ๊ฒ ํ์ธํ๊ธฐ ์ํด์๋ ์ ๋ฐ์ดํธ ์ฃผ๊ธฐ๊น์ง ํ์ธํ๋ ๊ฒ์ด ์ข๋ค.
๋ง์ฝ ์ํด๋ฆฌ ๋ค์ด๋ก๋ ํ์๊ฐ ๊ฝค ๋ง์๋ ๋ง์ง๋ง ์
๋ฐ์ดํธ๊ฐ ๋ช ๋
์ ์ด๋ผ๋ฉด, ์ ๋๋ก ๊ด๋ฆฌ๋์ง ์๋ ์ํ์ผ ์๋ ์๋ค. ์ด ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋์ค ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์ ๋ ํจ์น๊ฐ ๋์ง ์์ ์ ์๋ค. ์ด๋ด ๋ ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณ ์ณ ์ฐ๊ฑฐ๋, ์๋ก์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ ์ฐพ์์ผ ํ๋ฏ๋ก ๋ฒ๊ฑฐ๋ก์์ง๋ค. ๊ทธ๋ฐ๋ฐ ๋ด๊ฐ ์ ํํ swagger-typescript-api
๋ ์ฌ๋ฌ ํ๋ณด ์ค ์ํด๋ฆฌ ๋ค์ด๋ก๋ ํ์๊ฐ ๊ฐ์ฅ ๋์ง ์์๋ค. ๊ทธ๋ฌ๋ 10๋ง ํ ์ด์์ผ๋ก ์ ๋์ ์ธ ์์น๊ฐ ๊ฝค ๋๋ค๊ณ ํ๋จํด ํ๋ณด์์ ์ ์ธํ์ง ์์๋ค.
๋ ๋ฒ์งธ ๊ธฐ์ค์ ์ ๊ณต๋๋ ์ต์ ์ ํ์ฉํด ์ฌ์ฉํ๊ณ ์๋ ์ธ์ด์ ์ฅ์ ์ ์ ์ด๋ฆด ์ ์๋์ง๋ค. ๋ด ๊ฒฝ์ฐ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ์ ์ฅ์์, ์ ๋๋ ์ดํฐ๊ฐ ํ์ ์ ์ ์ถ์ถํด์ฃผ๋์ง๊ฐ ๋ฌด์๋ณด๋ค ์ค์ํ๋ค. ์๋ฒ์์ ์ ์ํด์ค Request body, Response body, enum, Error ํ์ ๋ฑ์ ์ ๋๋ ์ดํฐ๊ฐ ์ ์ถ์ถํด ์ฃผ๊ณ , ๊ทธ๋ ๊ฒ ์์ฑ๋ ํ์ผ์ ํด๋ผ์ด์ธํธ์์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ธธ ์ํ๋ค. ์ฌ๊ฐ๊ณตํ ํ์ ์์ด ๋ช ๋ น์ด ํ๋์ ๋ฐ๋ก ํธ์ถํด์ ์ธ ์ ์๋ api.ts ํ์ผ์ด ์์ฑ๋๋ ๊ฒ ๋ง์ด๋ค.
2) ์ ํฉํ ์ต์ ์ฐพ๊ธฐ
์ด๋ ๊ฒ ๋๋ฆ์ ๊ธฐ์ค์ ๊ฐ์ง๊ณ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ดํด๋ณด์์ง๋ง, ๋ช ์์ ํ์ ์ถ์ถ์ ์ํ ์ต์ ์ ์ฐพ๊ธฐ ์ด๋ ค์ ๋ค. ๋ง์ OAS ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์คํ ๋ช ์ธ์๋ฅผ ์ดํด๋ณด๋, ํ์ ์คํฌ๋ฆฝํธ์ ๊ดํ ์คํ์ ๋น๊ต์ ์ต๊ทผ์ ์ถ๊ฐํ ๊ฒ์ ์ ์ ์์๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ ๋ค๋ฅธ ๊ฐ๋ฐ ์ธ์ด์ ๋นํด ์ญ์ฌ๊ฐ ์งง์ ํธ์ด๋ ๊ทธ๋ฆฌ ์ด์ํ ์ผ์ ์๋๋ค. ํ์ง๋ง ๊ทธ๋ก ์ธํด ์ ์ฉํ ์ต์ ์ด ์ ๋ค๋ ์ ์ด ์์ฌ์ ๋ค. ๊ทธ๋์ ํ์ ์คํฌ๋ฆฝํธ์ ์ต์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ๋ ๋ฐ ๋ง์ ์๊ฐ์ ๋ค์ฌ์ผ ํ๋ค.
๋ ํ ๊ฐ์ง ์ด๋ ค์ ๋ ์ ์ ๋ณต์ก์ฑ์ด์๋ค. ๋๋ถ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ์์ํ ํํ๊ฐ ์์๋ณด๋ค ๋ณต์กํ๋ค. ๊ทธ๋์ ์๋์ผ๋ก ์์ฑ๋ ํ์ผ๋ค์ ๋ฐ๋ก ์ฌ์ฉํ๊ธฐ๋ ์ด๋ ค์ ๊ณ , ๋ค์ ํ๋์ ํ์ผ๋ก ์ฌ๊ฐ๊ณตํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. ๋ณธ๋ ๋ด๊ฐ ์ํ๋ ๊ฒ์ ์ ๋๋ ์ดํฐ๊ฐ api.ts ํ์ผ๊น์ง ์์์ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ด์๊ธฐ ๋๋ฌธ์ ๊ทธ ์ต์ ์ ์ฐพ์ผ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.
3) ํ์ํ ์ต์ ์ฌ์ฉํด generate ํ๊ธฐ
์ ๊ธฐ์ค์ ํตํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋ณํ ํ, ์ํ๋ ๊ธฐ๋ฅ์ ๋์ดํด ๋ณด์๋ค. ์ฐ์ ์์ ๋งํ ํ์ ์ถ์ถ ์ต์ , ๊ทธ๋ฆฌ๊ณ ๋จ์ํ API ๋ฉ์๋๋ค๋ง ์ ์๋๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ๋ฅํ๋ค๋ฉด API ํธ์ถ์ ์ํํ HTTP ํด๋ผ์ด์ธํธ ์ธ์คํด์ค๋ ์๋ ์์ฑ๋๋ฉด ํธ๋ฆฌํ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ fetch API ๋์ Axios๋ฅผ ์ฌ์ฉํ ์์ ์ด์๊ธฐ์, Axios ์ธ์คํด์ค์์ ํธํ์ฑ๋ ์ข์์ผ ํ๋ค.
๋ฐ๋ก ์ด ์ง์ ์์ ์ต์ข
์ ์ผ๋ก swagger-typescript-api
๋ฅผ ์ ํํ๊ฒ ๋์๋ค. ํ์
์คํฌ๋ฆฝํธ์ ์ต์ ํ๋์ด์๋ ์ด ์ ๋๋ ์ดํฐ๋ ๋ด๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ๋ชจ๋ ๊ฐ์ถ๊ณ ์์๋ค. ์ ๊ณต๋๋ ์ต์
์ ์กฐํฉํด์ ์์ฑํ ์ ๋๋ ์ดํ
์คํฌ๋ฆฝํธ๋ ๋ค์๊ณผ ๊ฐ๋ค.
// api generator using swagger-typescript-api
import { exec } from 'shelljs';
const swaggerPath = `${__dirname}/../packages/api/swagger.json`;
const targetPath = `${__dirname}/../packages/front/src/api`;
async function generateApi() {
exec(`npx swagger-typescript-api \
-p ${swaggerPath} \ // json ๋๋ yaml ํ์ผ
-o ${targetPath} \ // api ํ์ผ์ ๋ง๋ค ๋ชฉ์ ์ง ๋๋ ํ ๋ฆฌ
-n api.ts \ // ํ์ผ ์ด๋ฆ
-r \ // ์์ฒญ๊ณผ ์๋ต์ ๋ํ ๋ฉํ์ ๋ณด๋ฅผ ์์ธํ๊ฒ ์์ฑ
--axios \ // ๋ด์ฅ๋ axios ํด๋ผ์ด์ธํธ ์ธ์คํด์ค ์ฌ์ฉ
--extract-request-params \
--extract-request-body \
--extract-response-body \
--extract-response-error \
--extract-enums \ // ํ์
์ถ์ถ
--unwrap-response-data // response ๊ฐ์ฒด์์ data ๊ฐ์ฒด๋ฅผ ๊บผ๋ด์ด ํด์ค
`)
}
generateApi()
swagger-typescript-api
๊ฐ ํธ๋ฆฌํ ์ด์
์ฐ์ swagger-typescript-api
๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋งค์ฐ ์น์ ํ๋ค. ์ฌ์ฉํ ์ ์๋ ์ต์
๊ณผ ๊ทธ์ ๋ํ ์ค๋ช
, ์ฌ์ฉ ์์๊น์ง ์์ธํ๊ฒ ์๋ดํ๊ณ ์๋ค. ์ฌ๋ฌ ์ธ์ด๊ฐ ์๋ ํ์
์คํฌ๋ฆฝํธ๋ง์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ฌ์ฉ์ ๋์ฆ๋ฅผ ์ ๋ฐ์ํ ๊ฒ ๊ฐ๋ค. ๋ช
์์ ์ธ ํ์
์ถ์ถ์ด ๋งค์ฐ ์๋ ๋ฟ๋ง ์๋๋ผ, ์ธํ์ด ๋๋ json,YAML ํ์ผ์ ์ ์๋์ด ์๋ ํ์
๋ค์ API ์ ๋๋ ์ดํ
์์ ์ ์ํ๋ ํ์
์ผ๋ก, ์ง์ ์ ์ํด ์๋ก ๋งคํํ ์ ์๋ ๊ธฐ๋ฅ๋ ์๋ค. ํ์ฅ์ฑ ๋ฉด์์ ๋ง์กฑ์ค๋ฝ๊ณ , ์ด ๊ธฐ๋ฅ ์ญ์ ์ค๋ช
๋ฐ ์์๊ฐ ์์ธํ๋ค.
๊ฒ๋ค๊ฐ Axios์์ ํธํ์ฑ๋ ๋งค์ฐ ์ข๋ค. Axios ์ต์ ์ ์ด์ฉํ ๊ฒฝ์ฐ Axios ํด๋์ค๋ฅผ ์์๋ฐ์ HTTP ํด๋ผ์ด์ธํธ๊ฐ ๋ง๋ค์ด์ง๋ฉฐ, ์ฌ์ฉ์ ๊ด์ ์์ Axios ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ๊ณผ ๋ณ๋ฐ ๋ค๋ฅด์ง ์๊ฒ ์ธ ์ ์๋ค. ๊ฐ์ธ์ ์ผ๋ก Axios๊ฐ ์ต์ํด์ ์ ํธํ๋ ์ธก๋ฉด๋ ์์ด ํฐ ์ฅ์ ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๊ทธ๋ฌ๋ ๊ด์ ์ ๋ฐ๋ผ ํ์์ ์ธ ๊ธฐ๋ฅ์ด๋ผ๊ณ ๋ณด๊ธด ์ด๋ ต๋ค.
๊ฐ๋ น openapi-typescript
๋ ์์ฒด์ ์ธ HTTP ํด๋ผ์ด์ธํธ๋ฅผ ์ ๊ณตํ๋ฉฐ ์ธํฐํ์ด์ค๋ ๋งค์ฐ ์ง๊ด์ ์ด๋ค. API๋ฅผ ํธ์ถํ ๋ ๊ผญ Fetch API๋ Axios ํด๋ผ์ด์ธํธ๋ฅผ ๊ณ ์งํ ์ด์ ๋ ์์ผ๋ฏ๋ก, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ๋์์ง ์์ ๊ฒ์ด๋ค.
.swagger-typescript-api
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๋ง๋ค์ด์ง๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋งค์ฐ ๋จ์ํ๊ณ ์ง๊ด์ ์ด๋ค. ์ฌ์ค์ ๋จ ํ๋์ ํ์ผ์ด ๋ง๋ค์ด์ง๋ค. ๊ฐ์ธ์ ์ผ๋ก ๋ง์์ ๋ค์๋ ๋ถ๋ถ์ธ๋ฐ, ๊ท๋ชจ๊ฐ ์์ ํ๋ก์ ํธ์์ API ์ ์๋ฅผ ์ํด ๋ง์ ์์ ํ์ผ์ ๋ง๋ค๊ณ ์ถ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์ด ๋ถ๋ถ๋ ์ฌ๋๋ง๋ค ๊ฒฌํด ์ฐจ์ด๊ฐ ์์ ๊ฒ ๊ฐ๋ค. ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ๋ฐ์ดํฐ ๋ชจ๋ธ ์ธํฐํ์ด์ค๋ BaseAPI์ ๋ํ ํ์ผ์ด ๋ณ๋๋ก ๋ง๋ค์ด์ง๋ ๊ฒฝ์ฐ๋ ์์ด์ ์ด์ชฝ์ ์ ํธํ ์๋ ์๋ค.
๋์๊ฒ ๋ง๋ API ์ ๋๋ ์ดํฐ๋ฅผ ์ฐพ์๋ณด์
API๋ฅผ ๋ฌธ์๋ก ๊ณต์ ํ๋ฉด์ ๋ถํธํจ์ด ์์๋ค๋ฉด, API ์ ๋๋ ์ดํฐ๋ฅผ ์ฌ์ฉํด ๋ณด์. API ๋ฌธ์ ์์ ์ด ์๋ํ๋์ด ๋ณต์กํ ์์ ์ด ์ค๊ณ , ์์ฐ์ฑ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์์ง ๊ฒ์ด๋ค. API ๊ด๋ จ ๋ ผ์๋ฅผ ํ์๋ง์ ๊ณง๋ฐ๋ก ๋ฉ์๋๊ฐ ์ฝ๋๋ก ๊ตฌํ๋๋ ๊ฒ์ ๊ฒฝํํ๊ณ ๋๋ฉด, ์๋ง ์ด์ ์ผ๋ก ๋์๊ฐ๊ณ ์ถ์ง ์๊ฒ ๋ ๊ฒ์ด๋ค. API ์ ๋๋ ์ดํฐ์ ์ฅ์ ์ ๋จ์ํ ํจ์จ์ฑ ํฅ์์์ ๊ทธ์น์ง ์๋๋ค. ์๋ํ๋ ๋ฌธ์ํ ๋ฐฉ์์ ์ฌ๋์ ์ค์๋ก ์ธํด ๋ฐ์ํ ์ ์๋ ๋๋ฝ์ด๋ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํด ์ฃผ๊ธฐ๋ ํ๋ค.
๋ง์ฝ ํ์
์คํฌ๋ฆฝํธ API ์ ๋๋ ์ดํฐ๋ฅผ ์ฐพ๊ณ ์๋ ๊ฐ๋ฐ์๋ผ๋ฉด, ํนํ ๋จ์ํจ์ ์ ํธํ๋ค๋ฉด swagger-typescript-api
๋ฅผ ์ถ์ฒํ๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์
์คํฌ๋ฆฝํธ์์ ๋ฐ์ด๋ ํธํ์ฑ์ ์๋ํ๋ฉฐ, ๊ฐ API์ ์ธ๋ถ ์ฌํญ๋ค์ ๋ช
ํํ๊ฒ ํ์
์ผ๋ก ์ถ์ถํ๋ค. ์ด๋ ๋ฐฑ์๋์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ๊ฐ์ ์ ํํ ์ปค๋ฎค๋์ผ์ด์
์ ๊ฐ๋ฅํ๊ฒ ํ๊ณ , ๊ฐ๋ฐ ๊ณผ์ ์์์ ํผ๋์ ์ค์ฌ์ค ์ ์๋ค.
ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๋ค๋ฅธ ์ธ์ด๋ก API ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ์ถํด์ผ ํ๋ค๋ฉด, ์ธ์ด ํน์ฑ์ ๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์๋ณด์. ์ด๋ ์ด๋ค ์ต์ ๋ค์ด ์ ๊ณต๋๋์ง ๊ผผ๊ผผํ ์ดํด๋ณด๋ ๊ฒ์ด ์ข๋ค. ํ์ ๊ณผ์ ์์ ์์ ์ด ํ์ ์ด๋ค ๋ถ๋ถ์์ ๋ถํธํจ์ ๋๊ผ๋์ง, ์ด๋ค ์ ์ด ๊ฐ์ ๋๊ธธ ์ํ๋์ง๋ ์ ์ ์๊ฒ ๋๋ค.
์ด๋ค ๊ฒฝ์ฐ์๋ API ์ ๋๋ ์ดํฐ๊ฐ ๊ฐ๋ฐ ํ๊ฒฝ ์๋ํ์ ์์์ ์ด ๋ ์๋ ์๋ค. ์ด๊ฒ์ ์ผ์ข ์ ํฌ๋งท ๋ณํ ๊ณผ์ ์ด๋ฉฐ, ์๋ก ๋ค๋ฅธ ํฌ๋งท์ ๋ง์ถ๋ ๊ฒ์ ๊ฐ๋ฐํ ๋ ์ฃผ๋ก ๋ณ๋ชฉ์ผ๋ก ์์ฉํ๋ ๋ถ๋ถ์ด๋ค. ๋ง์ฝ JSON ์คํค๋ง ํ์ผ์ OAS ๊ท๊ฒฉ์ ๋ง๋ JSON์ด๋ YAML ํ์ผ๋ก ๋ณํํ๊ณ , ๋ค์ API ํ์ผ๋ก ๋ณํํ๋ ์์ ์ด ์๋ํ๋๋ค๋ฉด ๋ณ๋ชฉ์ด ์ฌ๋ผ์ง๋ ์ ์ด๋ค. ์ด๋ฌํ ์์ฐ์ฑ์ ํฅ์์ ๊ฐ๋ฐํ์ ํฐ ์๋๋ ฅ์ด ๋์ด ์ค ๊ฒ์ด๋ค.