๐ ์ค๊ณ ์ฐ์ ์ ๊ทผ ๋ฐฉ์์ ์ ์ฉํ๊ธฐ ์ํ OAS!
์ค๊ณ ์ฐ์ ์ ๊ทผ ๋ฐฉ์(Design-First Approach)์ API ๊ฐ๋ฐ ๊ณผ์ ์์ API์ ์ค๊ณ๋ฅผ ๋จผ์ ์ ์ํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ์ ์งํํ๋ ๋ฐฉ๋ฒ๋ก ์ด๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ API์ ๋ช ํํ ์ ์์ ๋ฌธ์ํ๋ฅผ ํตํด ๊ฐ๋ฐ์ ๊ฐ์ ์ปค๋ฎค๋์ผ์ด์ ์ ์ํํ๊ฒ ํ๊ณ , API์ ์ผ๊ด์ฑ๊ณผ ํ์ง์ ๋์ด๋ ๋ฐ ์ค์ ์ ๋๋ค.
OpenAPI Specification(OAS)์ RESTful API๋ฅผ ๋ช ํํ๊ฒ ์ ์ํ๊ณ ๋ฌธ์ํํ๊ธฐ ์ํ ํ์คํ๋ ํ์์ด๋ค. OAS๋ API์ ์๋ํฌ์ธํธ, HTTP ๋ฉ์๋, ์์ฒญ ๋ฐ ์๋ต ํ์, ๋ฐ์ดํฐ ๋ชจ๋ธ ๋ฑ์ JSON ๋๋ YAML ํ์์ผ๋ก ๊ธฐ์ ํ ์ ์๊ฒ ํด์ค๋ค. OAS๋ API์ ์ค๊ณ, ๊ฐ๋ฐ, ํ ์คํธ, ๋ฌธ์ํ, ์ ์ง๋ณด์ ๋ฑ ๋ค์ํ ๋จ๊ณ์์ ํ์ฉ๋ ์ ์์ผ๋ฉฐ, API์ ์ผ๊ด์ฑ๊ณผ ํ์ง์ ๋์ด๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค.
์ค๊ณ ์ฐ์ ์ ๊ทผ ๋ฐฉ์๊ณผ OAS๋ API ๊ฐ๋ฐ ๊ณผ์ ์์ ์๋ก๋ฅผ ๋ณด์ํ๋ ์ญํ ์ ํ๋ค. ์ค๊ณ ์ฐ์ ์ ๊ทผ ๋ฐฉ์์ API์ ๊ตฌ์กฐ์ ๋์์ ๋ช ํํ๊ฒ ์ ์ํ๊ณ , ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์์ ์ดํด๊ด๊ณ์ ๊ฐ์ ์ปค๋ฎค๋์ผ์ด์ ์ ์ํํ๊ฒ ํ๋ค. OAS๋ ์ด๋ฌํ ์ ์๋ฅผ ํ์คํ๋ ํ์์ผ๋ก ๋ฌธ์ํํ๊ณ , ์ด๋ฅผ ํตํด API์ ์ผ๊ด์ฑ๊ณผ ํ์ง์ ๋์ผ ์ ์๋ค. ์ด ๋ ๊ฐ์ง๋ฅผ ๊ฒฐํฉํ๋ฉด API ๊ฐ๋ฐ์ ํจ์จ์ฑ๊ณผ ํ์ง์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ค.
๐ Swagger Codegen?
Swagger Codegen์ OpenAPI Specification(OAS) ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๋ ์์ํฌ์ ๋ง๋ ํด๋ผ์ด์ธํธ SDK, ์๋ฒ ์คํ , ๋ฌธ์ ๋ฑ์ ์๋์ผ๋ก ์์ฑํ๋ ๋๊ตฌ์ด๋ค. Spring Boot์ ๊ฒฐํฉํ์ฌ Swagger Codegen์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ์ป์ ์ ์๋ค.
1. ์๋ํ๋ ์๋ฒ ์คํ ์์ฑ
Swagger Codegen์ ์ฌ์ฉํ๋ฉด OpenAPI ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Spring Boot ์๋ฒ ์คํ ์ ์๋์ผ๋ก ์์ฑํ ์ ์๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ฐ๋ณต์ ์ด๊ณ ์๊ฐ์ด ๋ง์ด ์์๋๋ ์์ ์ ์๋ํํ ์ ์๋ค. ์๋ฒ ์คํ ์ API ์๋ํฌ์ธํธ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ฏ๋ก, ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๋ค.
2. ์ผ๊ด๋ API ๋ฌธ์ํ
OpenAPI Specification์ API๋ฅผ ๋ช ํํ๊ฒ ๋ฌธ์ํํ๋ ํ์ค์ด๋ค. Swagger Codegen์ ์ฌ์ฉํ๋ฉด OpenAPI ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ผ๊ด๋ API ๋ฌธ์๋ฅผ ์์ฑํ ์ ์๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์์ ์ฌ์ฉ์ ๋ชจ๋ API๋ฅผ ์ฝ๊ฒ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋ค. ๋ํ, API ๋ฌธ์์ ์ค์ ๊ตฌํ ๊ฐ์ ๋ถ์ผ์น๋ฅผ ์ค์ผ ์ ์๋ค.
3. ๋น ๋ฅธ ํ๋กํ ํ์ดํ
Swagger Codegen์ ์ฌ์ฉํ๋ฉด API์ ํ๋กํ ํ์ ์ ๋น ๋ฅด๊ฒ ์์ฑํ ์ ์๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ API ์ค๊ณ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์ฆํ๊ณ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์๋ค. ๋ํ, ์ด๊ธฐ ๊ฐ๋ฐ ๋จ๊ณ์์ API์ ๊ตฌ์กฐ์ ๋์์ ์ฝ๊ฒ ํ ์คํธํ ์ ์๋ค. Spring Boot์ ๊ฒฐํฉํ์ฌ ๋น ๋ฅด๊ฒ ์คํ ๊ฐ๋ฅํ ํ๋กํ ํ์ ์ ๋ง๋ค ์ ์๋ค.
4. ์ ์ง๋ณด์ ์ฉ์ด์ฑ
Swagger Codegen์ ์ฌ์ฉํ๋ฉด API ๋ฌธ์์ ์ฝ๋๊ฐ ํญ์ ๋๊ธฐํ๋ ์ํ๋ฅผ ์ ์งํ ์ ์๋ค. API๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค OpenAPI ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธํ๊ณ Swagger Codegen์ ๋ค์ ์คํํ๋ฉด ์ต์ ์ํ์ ์๋ฒ ์คํ ์ ์์ฑํ ์ ์๋ค. ์ด๋ฅผ ํตํด ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๊ณ , ์ฝ๋์ ๋ฌธ์ ๊ฐ์ ๋ถ์ผ์น๋ฅผ ์ค์ผ ์ ์๋ค.
5. ํ์ ํฅ์
Swagger Codegen์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์, QA, ๋ฌธ์ ์์ฑ์ ๋ฑ ๋ค์ํ ํ ๊ตฌ์ฑ์ ๊ฐ์ ํ์ ์ด ํฅ์๋๋ค. OpenAPI ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ ์์ฑ๋ ์ฝ๋์ ๋ฌธ์๋ฅผ ํตํด ํ ๊ตฌ์ฑ์๋ค์ด API์ ๋์์ ๋ช ํํ๊ฒ ์ดํดํ ์ ์๋ค. ์ด๋ฅผ ํตํด ์ปค๋ฎค๋์ผ์ด์ ์ด ์ํํด์ง๊ณ , ๊ฐ๋ฐ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ์ค์ผ ์ ์๋ค.
6. ํ ์คํธ ์๋ํ
Swagger Codegen์ ์ฌ์ฉํ๋ฉด API ํ ์คํธ๋ฅผ ์๋ํํ ์ ์๋ค. ์๋ ์์ฑ๋ ํด๋ผ์ด์ธํธ SDK๋ฅผ ์ฌ์ฉํ์ฌ API ํ ์คํธ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ํตํด API์ ๋์์ ๊ฒ์ฆํ ์ ์๋ค. ์ด๋ฅผ ํตํด ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋์ด๊ณ , API์ ์์ ์ฑ์ ๋ณด์ฅํ ์ ์๋ค.
7. ๋ค์ํ ์ธ์ด ๋ฐ ํ๋ ์์ํฌ ์ง์
Swagger Codegen์ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๋ ์์ํฌ๋ฅผ ์ง์ํ๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์์ ์ด ์ฌ์ฉํ๋ ์ธ์ด์ ํ๋ ์์ํฌ์ ๋ง๋ ํด๋ผ์ด์ธํธ SDK๋ ์๋ฒ ์คํ ์ ์์ฑํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, Spring Boot ์๋ฒ ์คํ ์ ์์ฑํ๋ ๊ฒ ์ธ์๋ JavaScript, Python, Ruby ๋ฑ ๋ค์ํ ์ธ์ด์ ๋ง๋ ํด๋ผ์ด์ธํธ SDK๋ฅผ ์์ฑํ ์ ์๋ค.
8. ํ์คํ๋ API ์ค๊ณ
OpenAPI Specification์ ์ฌ์ฉํ์ฌ API๋ฅผ ์ค๊ณํ๋ฉด ํ์คํ๋ ๋ฐฉ์์ผ๋ก API๋ฅผ ์ ์ํ ์ ์๋ค. ์ด๋ฅผ ํตํด API์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ , ๋ค๋ฅธ ๊ฐ๋ฐ์๋ ํ๊ณผ์ ํ์ ์ด ์ฉ์ดํด์ง๋ค. Swagger Codegen์ ์ด๋ฌํ ํ์คํ๋ API ์ค๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฏ๋ก, API์ ํ์ง์ ๋์ผ ์ ์๋ค.
9. ๊ฐ๋ฐ ์๋ ํฅ์
Swagger Codegen์ ์ฌ์ฉํ๋ฉด ๋ง์ ์์์ ์ ์๋ํํ ์ ์์ผ๋ฏ๋ก ๊ฐ๋ฐ ์๋๊ฐ ํฅ์๋๋ค. Spring Boot์ ๊ฒฐํฉํ์ฌ ๋น ๋ฅด๊ฒ ์๋ฒ ์คํ ์ ์์ฑํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ ์ ์๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ ๋น ๋ฅด๊ฒ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ , ์ ํ ์ถ์ ์๊ฐ์ ๋จ์ถํ ์ ์๋ค.
์ด์ ๊ฐ์ด Spring Boot์์ Swagger Codegen์ ์ฌ์ฉํ๋ฉด ์๋ํ๋ ์ฝ๋ ์์ฑ, ์ผ๊ด๋ API ๋ฌธ์ํ, ๋น ๋ฅธ ํ๋กํ ํ์ดํ, ์ ์ง๋ณด์ ์ฉ์ด์ฑ, ํ์ ํฅ์, ํ ์คํธ ์๋ํ, ๋ค์ํ ์ธ์ด ๋ฐ ํ๋ ์์ํฌ ์ง์, ํ์คํ๋ API ์ค๊ณ, ๊ฐ๋ฐ ์๋ ํฅ์ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ์ป์ ์ ์๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ API ๊ฐ๋ฐ์ ํจ์จ์ฑ์ ๋์ด๊ณ , ํ์ง์ ํฅ์์ํฌ ์ ์๋ค.
REFERENCE
https://swagger.io/docs/open-source-tools/swagger-codegen/codegen-v3/about/
https://swagger.io/blog/code-first-vs-design-first-api/
https://www.baeldung.com/spring-boot-openapi-api-first-development
๋๊ธ