๋ฐฑ์๋๋ฅผ ๊ฐ๋ฐํ๋ ๊ฐ๋ฐ์๋ผ๋ฉด API๋ฅผ ๋ง๋ค๊ณ ๋ฐฐํฌํ ๊ฒฝํ์ด ์์ ๊ฒ์ด๋ค.
์ด๋ฐ API๋ ํ๋ฒ ๋ง๋ค๊ณ ๋ฐฐํฌํ๋ฉด, ์ญ์ ํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ๊ฒ ์ด๋ ค์์ง๊ฒ ๋๋๋ฐ..
๊ทธ๋์ API Versioning์ผ๋ก ์ด๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋๋ค..!
API Versioning?
API์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ด๋ฆฌํ๊ณ ์ถ์ ํ๋ ํ๋ก์ธ์ค. ๋ณ๊ฒฝ ์ฌํญ์ API ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๋ ๊ฒ ๋ํ ํฌํจ ๋จ.
API์ ์์ฐ์์ ์๋น์๊ฐ ๊ณต๊ฐ์ธ์ง, ๋น๊ณต๊ฐ์ธ์ง์ ๊ด๊ณ์์ด API๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ๋๊ธฐํ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ฐใ ก, ์ด๋ฅผ ์ํด API Versioning์ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
API Versioning ๋ฐฉ๋ฒ
๋ณดํต ๋ค๋ฅธ ํ๋ก๊ทธ๋จ๋ค์ ๋ณ๊ฒฝ, ๋ณด์ ํด์ ์ฌ ๋ฐฐํฌ ํ ๋ 1.0.1 ํํ๋ก tag ๋ publish๋ฅผ ์งํํ๊ฒ ๋๋๋ฐ,
API ๋ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก Versioning์ ์งํํ๋ ๊ฑธ๊น?
URI๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ(URI Versioning)๊ณผ HTTP Accept header๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ(Media Type Versioning) ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
โป URL๋ ์น ํ์ด์ง๋ฅผ ์ฐพ๋ ๋ฐ์๋ง ์ฌ์ฉ๋๊ณ , URI๋ HTML, XML ๋ฐ ๊ธฐํ ํ์ผ์ ์ฌ์ฉ๋๋ค. URI๊ฐ ์กฐ๊ธ ๋ ํฌ๊ด์ ์ธ ๊ฐ๋ .
URI Versioning
ํด๋น ๋ฒ์ ๊ด๋ฆฌ ๋ฐฉ์์์๋ major version(v1) ํ๋๋ง ์ฌ์ฉํ์ฌ ์๋์ ๊ฐ์ด ํ์ํ๋ค.
๊ฐ์ฅ ํํ๊ฒ ์ฐ์ด๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ๋ค.
https://localhost:3000/api/v1/happy
Media Type Versioning
HTTP Accept header๋ฅผ ์ ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์๋์ ๊ฐ์ด ์ฌ์ฉํ๋ค. Global Versioning์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Accept: application/json; v=1
API Versioning์ ํ๋ ๊ฒฝ์ฐ
API ๊ณต๊ฐ ๋์์ ๋ฐ๋ฅธ Versioning ์ฌ๋ถ
API์ ๊ฒฝ์ฐ ๊ณต๊ฐ ๋์์ด ๋๊ตฐ์ง์ ๋ฐ๋ผ ํฌ๊ฒ Public, Private, Partner API๋ก ๋๋๊ฒ ๋๋ค.
Public API๋ ๋๊ตฌ์๊ฒ๋ ์ ๊ณตํ๋ API์ด๊ธฐ ๋๋ฌธ์ Versioning์ด ํ์ํ๊ฒ ๋๋ค. ๋ํ ์น ๋ฌธ์๋ก API์ ์๋ช ์ฃผ๊ธฐ(LifeCycle)๋ฅผ ๊ด๋ฆฌํ์ฌ์ผ ํ๋ค.
์ฌ๋ด์์ ์๋น์ค ๊ฐ์ ์ฐ๋์ ์ํด ์ฌ์ฉํ๋ Private API์๋ Versioning์ด ๋ฐ๋์ ํ์ํ๋ค๊ณ ๋ณด๊ธฐ๊ฐ ์ด๋ ต๋ค. ์ฌ๊ธฐ์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ ๋ด๋ถ์ ์ธ ๋ฌธ์ ๋ก, integration ํ ์คํธ ๋ฐ ํ์ง ๊ฒ์ฌ ๊ณผ์ ์์ ๋๋ถ๋ถ ๋ฌธ์ ์ฌํญ์ด ์ฝ๊ฒ ๋์ถ๋๊ธฐ ๋๋ฌธ.
Partner API๋ ๊ทธ ํํธ๋์ ๋ฒ์๊ฐ ๊ฐ๋ฐ ์ง์์ฑ ์ฌ๋ถ์ ๋ฐ๋ผ ํ์ ์ฌ๋ถ๊ฐ ๋ฌ๋ผ์ง๋ค. ํ์ํ ๊ฒฝ์ฐ๋ ์๊ณ , Versioning ์์ด API๊ฐ ๊ด๋ฆฌ๋ ์ฌ์ง๋ ์๊ธฐ ๋๋ฌธ!
v1์์ v2๋ก์ Versioning
๊ณต๊ฐ ๋์์ ๊ณ ๋ คํด API Versioning์ ๊ด๋ฆฌํ๊ธฐ๋ก ํ๋ค๊ณ ํ ๊ฒฝ์ฐ,
v1์์ v2๋ก ๊ฐ๋ ์ ๋ฐ์ดํธ๋ 'Breaking Change'๊ฐ ์์ ๋ ์งํ๋๋ค.
Breaking Change ์ ์ผ์ด์ค
- API ๋ฆฌ์์ค ์๋ํฌ์ธํธ์ ์ด๋ฆ์ด๋ ๊ฒฝ๋ก, HTTP ๋ฉ์๋๋ฅผ ๋ฐ๊พธ๊ฑฐ๋ ์ญ์ ํ๋ ๊ฒฝ์ฐ
- ์ด๊ฑฐํ(enum type) ๊ฐ ์ด๋ฆ ๋ณ๊ฒฝ ๋๋ ์ญ์
- ํ๋์ ํ์ ๋ณ๊ฒฝ(์ด์ ํ์ ๊น์ง ์์ฉํ ์ ์๋ ๊ฒฝ์ฐ๋ ํด๋น๋์ง ์์)
- ์ํํ๋ ์์ ์ด๋ ์๋ต ํฌ๋งท์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ
API Versioning์ด ํ์ ์๋ ์ผ์ด์ค
1. HTTP ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ
2. HTTP ์์ฒญ ๋ฐ ์๋ต์ผ๋ก header, body์ ํ๋๋ฅผ ์ต์ ์ผ๋ก ์ถ๊ฐํ๋ ๊ฒฝ์ฐ
3. ์ด๊ฑฐํ(enum type)์ ํ์ฉ๋๋ ๊ฐ ์ถ๊ฐ
4. HTTP ๋ฆฌ์์ค URI๊ฐ ํ์ฅ๋๋ ๊ฒฝ์ฐ
5. ์๋ฌ ์๋ต์ ์์ธ ๋ฉ์ธ์ง๋ฅผ ๋ฐ๊พธ๋ ๊ฒฝ์ฐ
6. ์๋ฌ ๋ฉ์ธ์ง์ ์์ด๋ ์ ์ฉ ๋ฒ์ ํ์ฅ
7. Rate-limit๊ณผ ๊ด๋ จ๋ ํค๋ ๊ฐ ์กฐ์
๋ฑ...
๋ฌธ์ํ, ๋ฒ์ ํ๋ฅผ ์ํํ ํ์!