๐ค API Versioning ์ ๋ฐ๋์ ํ์ํ ๊น?
Restful API ๋ฅผ ๊ตฌํํ๋ค๋ณด๋ฉด ์์ฐ์ค๋ฝ๊ฒ ํ๋๊ฒ์ค ํ๋๊ฐ ๋ฐ๋ก API Versioning ์ด์ง ์์๊น ์ถ์ต๋๋ค. ํ์ง๋ง ๋ง์ ์ด๋ ๊ฒ API ์ Versioning ์ ํด๋ ์ ๋๋ก ํ์ฉํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ค์ด ๋ง์ํ ๋ฐ์ API Versioning ์ ์ธ์ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผํ๋์ง ๋ช ์พํ๊ฒ ์ค๋ช ํ ๊ธ์ด ์์ด ๊ณต์ ๋๋ฆฝ๋๋ค. ๊ธ์ ๋ด์ฉ์ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๐ API Versioning ๋ฐฉ๋ฒ * URI Versioning: "/api/v1/hello" ์ ๊ฐ์ด URI ์ version ์ ๋ช ์ํ๋ ๋ฐฉ์ * Media Type Versioning: "Accept: application/json; v=1" ๊ณผ ๊ฐ์ด HTTP Accept Header ์ version ์ ๋ช ์ํ๋ ๋ฐฉ์ ๐ API ๊ณต๊ฐ ๋์์ ๋ฐ๋ฅธ Versioning ์ฌ๋ถ * Public API: ๋๊ตฌ์๊ฒ๋ ์ ๊ณตํ๋ API ์ด๊ธฐ ๋๋ฌธ์ ํ์. ์น ๋ฌธ์ ๋ฑ์ ํตํด API ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ ๊ด๋ฆฌํด์ฃผ์ด์ผ ํ๋ค. * Private API: ์ฌ๋ด์์ ์๋น์ค๊ฐ ์ฐ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ API ์ด๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ํด ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๊ณ integration ๋ฐ ํ์ง ํ ์คํธ ๋ฑ์ ํตํด ์ด์๋ฅผ ํด๊ฒฐํ ์ ์์ด version ๊ด๋ฆฌ๊ฐ ํ์ํ์ง ์๋ค. * Partner API: API ๋ฅผ ์ ๊ณตํ๋ Partner ์ ๋ฒ์๋ ๊ฐ๋ฐ ์ง์์ฑ ์ฌ๋ถ์ ๋ฐ๋ผ ํ์ํ ์๋ ์๊ณ ํ์ ์์ ์๋ ์์ต๋๋ค. ๐ Version ์ ๋ฐ์ดํธ๋ ์ธ์ ํด์ผํ ๊น? * API ๋ฆฌ์์ค ์๋ํฌ์ธํธ์ ์ด๋ฆ์ด๋ ๊ฒฝ๋ก, HTTP ๋ฉ์๋๋ฅผ ๋ฐ๊พธ๊ฑฐ๋ ์ญ์ ํ ๊ฒฝ์ฐ * ์ด๊ฑฐํ(enum type)๊ฐ ์ด๋ฆ ๋ณ๊ฒฝ ํน์ ์ญ์ * ํ๋์ ํ์ ๋ณ๊ฒฝ(์ด์ ํ์ ๊น์ง ์์ฉํ ์ ์๋ ๊ฒฝ์ฐ๋ ํด๋นํ์ง ์์) * ์ํํ๋ ์์ ์ด๋ ์๋ต ํฌ๋งท์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ๐ API ๋ฒ์ ์ ์๋ก ๋ฆด๋ฆฌ์ฆํ ๋ ์งํ ๊ณผ์ * API ๊ฐ๋ฐํ์ด ๋ณ๊ฒฝ ์ฌํญ์ ๋ง๋ค๊ณ , ์ ๋ฒ์ ์ ์์ฑํ ๋ค์ ํ ์คํธํฉ๋๋ค. * ์๋ก์ด ์ธ์คํด์ค ๋ฐ ํ๋ก๋์ ํ์ดํ๋ผ์ธ์ ์ค์ ํ๊ณ ๋ฐฐํฌํฉ๋๋ค. * ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฌธ์ํํ๊ณ , ๋ชจ๋ ๊ณ ๊ฐ์๊ฒ ์๋ฆฝ๋๋ค. ์ง์ํ์ ๋์ ์์ฒญ์๋ ์ํด์ผ ํฉ๋๋ค. * ์ฌ๋ฌ ๋ฒ์ ์ ๋ช ๋ฌ ๋์ ์ ์งํ๋ฉฐ, ๊ณ ๊ฐ์ด ๊ทธ์ฌ์ด ์ต์ ๋ฒ์ ์ผ๋ก ์ ํํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. * ๊ธฐ์กด ๋ฒ์ ์ ์ ํจ ๊ธฐ๊ฐ๊น์ง ์ ํํ์ง ์์ ์ผ๋ถ ๊ณ ๊ฐ์ ๊ฒฐ๊ตญ ์๊ฒ ๋ฉ๋๋ค. ๐ API Versioning์ด ํ์ ์๋ ๊ฒฝ์ฐ๋? * HTTP ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ * HTTP ์์ฒญ ๋ฐ ์๋ต์ผ๋ก header, body์ ํ๋๋ฅผ ์ต์ ์ผ๋ก ์ถ๊ฐํ๋ ๊ฒฝ์ฐ * ์ด๊ฑฐํ(enum type)์ ํ์ฉ๋๋ ๊ฐ ์ถ๊ฐ * HTTP ๋ฆฌ์์ค URI๊ฐ ํ์ฅ๋๋ ๊ฒฝ์ฐ * ์๋ฌ ์๋ต์ ์์ธ ๋ฉ์์ง๋ฅผ ๋ฐ๊พธ๋ ๊ฒฝ์ฐ * ์๋ฌ ๋ฉ์์ง์ ์์ด๋ ์ ์ฉ ๋ฒ์ ํ์ฅ * Rate-limit๊ณผ ๊ด๋ จ๋ ํค๋ ๊ฐ ์กฐ์ ์ด์ ๋ํ ์์ธํ ์ค๋ช ์ ๊ณต์ ๋๋ฆฐ ์๋ฌธ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์. ๐ ์๋ฌธ * https://yozm.wishket.com/magazine/detail/2554/