header-img
Info :
728x90

 

๋ฐฑ์—”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ผ๋ฉด 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๊ณผ ๊ด€๋ จ๋œ ํ—ค๋” ๊ฐ’ ์กฐ์ •

๋“ฑ...

 

 

๋ฌธ์„œํ™”, ๋ฒ„์ „ํ™”๋ฅผ ์ƒํ™œํ™” ํ•˜์ž!

 

 

 

 

 

 

 

๋”๋ณด๊ธฐ
BACKEND