๊ฐ„๋‹จํ•œ API ํ”„๋ก์‹œ ๋นŒ๋“œ

์ด ํŽ˜์ด์ง€๋Š” Apigee ๋ฐ Apigee Hybrid์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Apigee Edge ๋ฌธ์„œ ๋ณด๊ธฐ

Apigee๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ API๋กœ ๋น ๋ฅด๊ฒŒ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋…ธ์ถœํ•˜๋ ค๋Š” ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ ํผ์‚ฌ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” API ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ๋งŒ ์ œ๊ณตํ•˜๊ณ  ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜๋Š” API ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ Apigee๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ถ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

API ํ”„๋ก์‹œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” API์—์„œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ํ–ฅํ›„ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๊ฐœ๋ฐœ์ž๋Š” ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์—์„œ ๊ฒฉ๋ฆฌ๋˜์–ด API๋ฅผ ์ค‘๋‹จ ์—†์ด ๊ณ„์† ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ฃผ์ œ์—์„œ๋Š” ์—ฌ๋Ÿฌ ํ”„๋ก์‹œ ์œ ํ˜•๊ณผ ์ด์— ๋Œ€ํ•œ ์„ค์ •์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ์— ๋Œ€ํ•œ ๋‹จ๊ณ„๋ณ„ ์•ˆ๋‚ด๋Š” ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

UI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ

API ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ ๋งˆ๋ฒ•์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Cloud ์ฝ˜์†”์˜ Apigee UI

  1. Google Cloud ์ฝ˜์†”์—์„œ ํ”„๋ก์‹œ ๊ฐœ๋ฐœ > API ํ”„๋ก์‹œ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    API ํ”„๋ก์‹œ๋กœ ์ด๋™

  2. + ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ UI

Apigee UI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ ๋งˆ๋ฒ•์‚ฌ์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. Apigee UI์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
  2. ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ๊ฐœ๋ฐœ > API ํ”„๋ก์‹œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ ๋ฒ„ํŠผ

ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ ๋งˆ๋ฒ•์‚ฌ๋Š” API ํ”„๋ก์‹œ์— ์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ์„ ์ƒ์„ฑํ•˜๊ณ  ์ถ”๊ฐ€ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๋งˆ๋ฒ•์‚ฌ์˜ ์ฒซ ๋ฒˆ์งธ ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ API ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ ํ˜• ์„ค๋ช…
๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ(๊ฐ€์žฅ ์ผ๋ฐ˜์ )

์ธ๋ฐ”์šด๋“œ ์š”์ฒญ์„ ๊ธฐ์กด HTTP ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” API ํ”„๋ก์‹œ์ž…๋‹ˆ๋‹ค. JSON ๋˜๋Š” XML API์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„น์…˜์˜ ๋’ท๋ถ€๋ถ„์— ๋‚˜์˜ค๋Š” HTTP ์„œ๋น„์Šค์šฉ ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

OpenAPI ์‚ฌ์–‘ ์‚ฌ์šฉ์„ ํด๋ฆญํ•˜์—ฌ ์œ ํšจํ•œ OpenAPI ์‚ฌ์–‘์—์„œ ํ”„๋ก์‹œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ์„น์…˜์˜ ๋’ท๋ถ€๋ถ„์— ์žˆ๋Š” OpenAPI ์‚ฌ์–‘์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ก์‹œ ์ƒ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋Œ€์ƒ ์—†์Œ

API ๋ฐฑ์—”๋“œ๊ฐ€ ์—†๋Š” API ํ”„๋ก์‹œ('no target')์ž…๋‹ˆ๋‹ค. API ํ”„๋ก์‹œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ์ •์˜ํ•  ๋•Œ ๊ธฐ์กด API๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ  ์•ž์—์„œ ์„ค๋ช…ํ•œ HTTP ์„œ๋น„์Šค์šฉ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

OpenAPI ์‚ฌ์–‘ ์‚ฌ์šฉ์„ ํด๋ฆญํ•˜์—ฌ ์œ ํšจํ•œ OpenAPI ์‚ฌ์–‘์—์„œ ํ”„๋ก์‹œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ์„น์…˜์˜ ๋’ท๋ถ€๋ถ„์— ์žˆ๋Š” OpenAPI ์‚ฌ์–‘์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ก์‹œ ์ƒ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ๋ฒˆ๋“ค ์—…๋กœ๋“œ ๊ธฐ์กด API ํ”„๋ก์‹œ ๋ฒˆ๋“ค(์˜ˆ๋ฅผ ๋“ค์–ด GitHub์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ˜ํ”Œ API ํ”„๋ก์‹œ ์ค‘ ํ•˜๋‚˜)์ž…๋‹ˆ๋‹ค. API ํ”„๋ก์‹œ ๋ฒˆ๋“ค์—์„œ API ํ”„๋ก์‹œ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
์„œ๋ฒ„ ์ „์†ก ์ด๋ฒคํŠธ(SSE)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ก์‹œ ์„œ๋ฒ„ ์ „์†ก ์ด๋ฒคํŠธ(SSE) ์ŠคํŠธ๋ฆฌ๋ฐ์— ์‚ฌ์šฉ๋˜๋Š” EventFlow๊ฐ€ ํฌํ•จ๋œ API ํ”„๋ก์‹œ. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„œ๋ฒ„ ์ „์†ก ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ๊ฐ ํ”„๋ก์‹œ ์œ ํ˜•์„ ์ž์„ธํžˆ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

HTTP ์„œ๋น„์Šค์šฉ ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ

Apigee๋Š” ๋‹ค์Œ ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ URL
  • API ํ”„๋ก์‹œ์—์„œ ์†Œ๋น„์ž ์•ฑ์— ๋…ธ์ถœ๋˜๋Š” API๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” URI ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

๋ฐฑ์—”๋“œ ์„œ๋น„์Šค URL์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์กฐ์ง์—์„œ ์†Œ์œ ํ•œ ์„œ๋น„์Šค ์‚ฌ์šฉ ์„ค์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ API๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. API ๋˜๋Š” ์„œ๋น„์Šค๋Š” ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜(์˜ˆ: ๋‚ด๋ถ€ HR ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” Cloud์˜ Rails ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜) ํƒ€์‚ฌ API ๋˜๋Š” ์„œ๋น„์Šค(์˜ˆ: Twitter ๋˜๋Š” Instagram)์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ํ”„๋ก์‹œ ์„ธ๋ถ€์ •๋ณด๋Š” ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ ๋งˆ๋ฒ•์‚ฌ์— ์•ก์„ธ์Šคํ•˜์—ฌ ํ”„๋ก์‹œ ์œ ํ˜•์„ ์„ ํƒํ•œ ํ›„์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„๋“œ ์„ค๋ช…
์ด๋ฆ„ API์— ํ‘œ์‹œ๋˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์˜์ˆซ์ž ๋ฌธ์ž, ๋Œ€์‹œ(-) ๋˜๋Š” ๋ฐ‘์ค„ (_)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •ํ•˜์„ธ์š”.
๊ธฐ๋ณธ ๊ฒฝ๋กœ

API ํ”„๋ก์‹œ์˜ http://[host] ๋˜๋Š” https://[host] ์ฃผ์†Œ ๋’ค์— ํ‘œ์‹œ๋˜๋Š” URI ํ”„๋ž˜๊ทธ๋จผํŠธ์ž…๋‹ˆ๋‹ค. Apigee๋Š” ๊ธฐ๋ณธ ๊ฒฝ๋กœ URI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์‹ ๋˜๋Š” ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ์ ์ ˆํ•œ API ํ”„๋ก์‹œ์— ์ผ์น˜์‹œํ‚ค๊ณ  ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฒฝ๋กœ ๋’ค์—๋Š” ์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค URL์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ API ํ”„๋ก์‹œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ „์ฒด URL ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

https://[host]/BASE_PATH/CONDITIONAL_FLOW_PATH

๊ธฐ๋ณธ ๊ฒฝ๋กœ์— ์™€์ผ๋“œ ์นด๋“œ ์‚ฌ์šฉ

API ํ”„๋ก์‹œ ๊ธฐ๋ณธ ๊ฒฝ๋กœ์—์„œ ํ•˜๋‚˜ ์ด์ƒ์˜ /*/ ์™€์ผ๋“œ ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ํ”„๋ก์‹œ๋ฅผ ํ–ฅํ›„์— ๋Œ€ํ•ด ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด /team/*/members์˜ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒˆ ํŒ€์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ API ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค ํ•„์š” ์—†์ด https://[host]/team/blue/members ๋ฐ https://[host]/team/green/members๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. /**/๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ค๋ช… (์„ ํƒ์‚ฌํ•ญ) API์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.
๋Œ€์ƒ(๊ธฐ์กด API) ์ด API ํ”„๋ก์‹œ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ URL์ž…๋‹ˆ๋‹ค.

API ํ”„๋ก์‹œ ๋ฒˆ๋“ค์—์„œ API ํ”„๋ก์‹œ ๊ฐ€์ ธ์˜ค๊ธฐ

์ข…์ข… API ํ”„๋ก์‹œ๋ฅผ ๋‹ค๋ฅธ ์ง€์› ํŒŒ์ผ๊ณผ ํ•จ๊ป˜XML ํŒŒ์ผ์˜ ์ปฌ๋ ‰์…˜์œผ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. API ํ”„๋ก์‹œ๋ฅผ Apigee ์™ธ๋ถ€์˜ ํŒŒ์ผ ์ง‘ํ•ฉ์œผ๋กœ ์ •์˜ํ•˜๋ฉด ์†Œ์Šค ์ œ์–ด ์‹œ์Šคํ…œ์—์„œ ์œ ์ง€๊ด€๋ฆฌํ•œ ํ›„ ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด Apigee๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

API ํ”„๋ก์‹œ ๋ฒˆ๋“ค์—์„œ API ํ”„๋ก์‹œ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. UI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ ๋งˆ๋ฒ•์‚ฌ์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.
  2. API ํ”„๋ก์‹œ ๋ฒˆ๋“ค ์„ธ๋ถ€์ •๋ณด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Cloud ์ฝ˜์†”์˜ Apigee UI

    1. ํ”„๋ก์‹œ ํ…œํ”Œ๋ฆฟ ๋ฉ”๋‰ด์—์„œ ํ”„๋ก์‹œ ๋ฒˆ๋“ค ์—…๋กœ๋“œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    2. ํ”„๋ก์‹œ ์„ธ๋ถ€์ •๋ณด ์„น์…˜์—์„œ ํ”„๋ก์‹œ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ณ  ZIP ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•œ ํ›„ ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    3. ๋ฐฐํฌ ์„น์…˜์—์„œ ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ์„ ํƒํ•˜๊ณ , ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ๊ธฐ๋ณธ UI

    1. ํ”„๋ก์‹œ ๋ฒˆ๋“ค ์—…๋กœ๋“œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    2. ํ”„๋ก์‹œ ๋งˆ๋ฒ•์‚ฌ์˜ ํ”„๋ก์‹œ ๋ฒˆ๋“ค ์—…๋กœ๋“œ ํŽ˜์ด์ง€์—์„œ ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

      ํ•„๋“œ ์„ค๋ช…
      ZIP ๋ฒˆ๋“ค API ํ”„๋ก์‹œ ๊ตฌ์„ฑ์ด ํฌํ•จ๋œ ZIP ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•˜๊ฑฐ๋‚˜ ํด๋ฆญํ•˜์—ฌ ํŒŒ์ผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
      ์ด๋ฆ„ API์— ํ‘œ์‹œ๋˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ํ™•์žฅ์ž๋ฅผ ์ œ์™ธํ•œ ZIP ํŒŒ์ผ ์ด๋ฆ„์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    3. ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    4. ์š”์•ฝ ํŽ˜์ด์ง€์—์„œ ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ์„ ํƒํ•˜๊ณ  ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋งŒ๋“ค๊ธฐ ๋ฐ ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

      ์ƒˆ API ํ”„๋ก์‹œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ๋ณด์—ฌ์ฃผ๋Š” ํ™•์ธ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    5. ํ”„๋ก์‹œ ์ˆ˜์ •์„ ํด๋ฆญํ•˜์—ฌ API ํ”„๋ก์‹œ์˜ ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

gRPC API ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ

REST API ํ”„๋ก์‹œ ์™ธ์—๋„ Apigee๋Š” ํ˜„์žฌ๋งŒ ํ•œ์ •์ ์œผ๋กœ ํŒจ์Šค ์Šค๋ฃจ ์ง€์›์ด ํฌํ•จ๋œ gRPC API ํ”„๋ก์‹œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํŒจ์Šค ์Šค๋ฃจ ์ง€์›์„ ํ†ตํ•ด gRPC ํŽ˜์ด๋กœ๋“œ๋Š” ์ž์ฒด์ ์œผ๋กœ Apigee์— ๋ถˆํˆฌ๋ช…ํ•˜๋ฉฐ, gRPC ํด๋ผ์ด์–ธํŠธ์—์„œ ๋Œ€์ƒ ๊ตฌ์„ฑ์— ์‚ฌ์ „ ๊ตฌ์„ฑ๋œ gRPC ๋Œ€์ƒ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ์ด ๋ผ์šฐํŒ…๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ Apigee gRPC API ํ”„๋ก์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์„ฑ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

  • ๋‹จํ•ญ gRPC ์š”์ฒญ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ํŽ˜์ด๋กœ๋“œ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์ •์ฑ…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • GraphQL ๋˜๋Š” REST ํ”„๋ก์‹œ์™€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ API ์ œํ’ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ์ œํ’ˆ ๊ด€๋ จ ํ• ๋‹น๋Ÿ‰ ๋ฐ ๊ธฐํƒ€ ์ž‘์—… ์„ค์ •์ด ์ œํ’ˆ์˜ ๋ชจ๋“  ํ”„๋ก์‹œ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • Apigee Hybrid์—์„œ๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋‘ ๊ฐ€์ง€ gRPC ๊ด€๋ จ ํ๋ฆ„ ๋ณ€์ˆ˜์ธ request.grpc.rpc.name๊ณผ request.grpc.service.name์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • gRPC์™€ ๊ด€๋ จ๋œ Apigee ์• ๋„๋ฆฌํ‹ฑ์Šค ๋ณ€์ˆ˜์ธ x_apigee_grpc_rpc_name, x_apigee_grpc_service_name, x_apigee_grpc_status์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • gRPC ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ gRPC๋ฅผ ์ง€์›ํ•˜๋„๋ก ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— gRPC ์‚ฌ์šฉ ๋ฐ gcloud CLI ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ gRPC์— ๋Œ€ํ•œ ๋ผ์šฐํŒ… ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

gRPC API ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋จผ์ € gRPC ๋Œ€์ƒ ์„œ๋ฒ„๋ฅผ ์ •์˜ํ•˜๊ณ (๋Œ€์ƒ ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ ์ฐธ์กฐ) ์ƒˆ ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค ๋•Œ ๋Œ€์ƒ ์„œ๋ฒ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

gcloud CLI ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ gRPC์— ๋Œ€ํ•œ ๋ผ์šฐํŒ… ๋งŒ๋“ค๊ธฐ

์ด ์„น์…˜์—์„œ๋Š” gcloud CLI๋ฅผ ์‚ฌ์šฉํ•ด์„œ gRPC ํ”„๋ก์‹œ์— ๋Œ€ํ•ด ๋ผ์šฐํŒ…์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ, ๋Œ€์ƒ ์„œ๋ฒ„, MIG ์„ค์ •์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ด ์„น์…˜์€ ๋ผ์šฐํŒ… ๋งŒ๋“ค๊ธฐ์— ๋Œ€ํ•œ ํฌ๊ด„์ ์ธ ๊ฐ€์ด๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜ˆ์‹œ๋Š” ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋”ฐ๋ผ ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์—ฌ๊ธฐ์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์™ธ๋ถ€ ๋ผ์šฐํŒ…(MIG) ๋ฐ Cloud ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ gRPC ๊ตฌ์„ฑ์— ์ต์ˆ™ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๊ธฐ

์ด๋Ÿฌํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ํ•˜์œ„ ์„น์…˜์˜ ๋ช…๋ น์–ด์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

PROJECT_ID=YOUR_PROJECT_ID
MIG_NAME=YOUR_MIG_NAME
VPC_NAME=default
VPC_SUBNET=default
REGION=REGION_NAME
APIGEE_ENDPOINT=ENDPOINT
CERTIFICATE_NAME=CERTIFICATE_NAME
DOMAIN_HOSTNAME=DOMAIN_HOSTNAME

๋ณด์•ˆ ์ถ”๊ฐ€

ํ”„๋ก์‹œ ๋ณด์•ˆ์€ ํ”„๋ก์‹œ์— ์ •์ฑ…์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์ •์ฑ…์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ •์ฑ…์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”. ๋ณด์•ˆ์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋ก์‹œ ๋ณด์•ˆ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ”„๋ก์‹œ์— ๋ณด์•ˆ ์ •์ฑ…์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

Cloud ์ฝ˜์†”์˜ Apigee

  1. API ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. ํ”„๋ก์‹œ ๋ณด์•ˆ์— ๋‚˜์—ด๋œ ์„น์…˜ ์ค‘ ํ•˜๋‚˜์— ์„ค๋ช…๋œ ๋Œ€๋กœ ๋ณด์•ˆ ์ •์ฑ…์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ณด์•ˆ ์ •์ฑ…์€ API ํ‚ค์™€ OAuth2์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ Apigee UI

ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ ๋งˆ๋ฒ•์‚ฌ์˜ ์ผ๋ฐ˜ ์ •์ฑ… ํŽ˜์ด์ง€์—์„œ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋ณด์•ˆ ์Šน์ธ ์œ ํ˜•์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์„ ์š”์•ฝํ•œ ํ‘œ์ž…๋‹ˆ๋‹ค.

๋ณด์•ˆ ์Šน์ธ ์„ค๋ช…
API ํ‚ค ์ •์˜ํ•˜๋ ค๋Š” API ํ”„๋ก์‹œ์— ๊ฐ„๋‹จํ•œ API ํ‚ค ํ™•์ธ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ API ํ”Œ๋žซํผ์€ VerifyAPIKey ์ •์ฑ…๊ณผ AssignMessage ์ •์ฑ…์„ API ํ”„๋ก์‹œ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. VerifyAPIKey ์ •์ฑ…์€ ์•ฑ์„ ์š”์ฒญํ•˜์—ฌ ํ‘œ์‹œ๋˜๋Š” API ํ‚ค์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. AssignMessage ์ •์ฑ…์€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋˜๋Š” ์š”์ฒญ์—์„œ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ API ํ˜ธ์ถœ์— ์ œ๊ณต๋˜๋Š” API ํ‚ค๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
OAuth 2.0 API ํ”„๋ก์‹œ์— OAuth 2.0 ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Apigee๋Š” API ํ”„๋ก์‹œ์— ๋‘ ๊ฐ€์ง€ ์ •์ฑ…์„ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์•ก์„ธ์Šค ํ† ํฐ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์ •์ฑ…์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์— ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ๋ฉ”์‹œ์ง€์—์„œ ์•ก์„ธ์Šค ํ† ํฐ์„ ์‚ญ์ œํ•˜๋Š” ์ •์ฑ…์ž…๋‹ˆ๋‹ค. ์•ก์„ธ์Šค ํ† ํฐ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ OAuth๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
ํŒจ์Šค ์Šค๋ฃจ(์Šน์ธ ์—†์Œ) ์Šน์ธ ํ•„์š” ์—†์Œ. Apigee์˜ ๋ณด์•ˆ ํ™•์ธ ์—†์ด ๋ฐฑ์—”๋“œ์— ์š”์ฒญ์ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

CORS ์ง€์› ์ถ”๊ฐ€

๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ (CORS)๋Š” ์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์— ์ง์ ‘ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ํ‘œ์ค€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. CORS ํ‘œ์ค€์€ ์›น๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„๊ฐ€ ๊ต์ฐจ ๋„๋ฉ”์ธ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” HTTP ํ—ค๋” ์ง‘ํ•ฉ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

ProxyEndpoint์˜ ์š”์ฒญ PreFlow์— CORS ์ •์ฑ…์„ ์ถ”๊ฐ€ํ•˜์—ฌ CORS ์ง€์›์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CORS ์‹œํ–‰ ์ „ ์ง€์› ์ถ”๊ฐ€ ๋“ฑ์„ ํฌํ•จํ•œ CORS ์ง€์›์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋Š” API ํ”„๋ก์‹œ์— CORS ์ง€์› ์ถ”๊ฐ€ํ•˜๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ• ๋‹น๋Ÿ‰ ์ถ”๊ฐ€

ํ• ๋‹น๋Ÿ‰ ์•„๋ž˜์˜ ๋†’์€ ํŠธ๋ž˜ํ”ฝ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ํ• ๋‹น๋Ÿ‰์ž…๋‹ˆ๋‹ค. ํ• ๋‹น๋Ÿ‰ ๋ถ€๋ถ„์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. (ํŒจ์Šค ์Šค๋ฃจ ์Šน์ธ์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)

OpenAPI ์‚ฌ์–‘์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ก์‹œ ์ƒ์„ฑ

์ด ์„น์…˜์—์„œ๋Š” OpenAPI ์‚ฌ์–‘์—์„œ ์—ญ๋ฐฉํ–ฅ ๋˜๋Š” ๋Œ€์ƒ ์—†์Œ๊ณผ ๊ฐ™์€ ์œ ํ˜•์˜ API ํ”„๋ก์‹œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” OpenAPI ์‚ฌ์šฉ ์˜ต์…˜์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

OpenAPI ์‚ฌ์–‘์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

Open API Initiative ๋กœ๊ณ    'Open API Initiative(OAI)๋Š” Swagger ์‚ฌ์–‘์— ๋”ฐ๋ผ ๊ณต๊ธ‰์—…์ฒด ์ค‘๋ฆฝ์  API ์„ค๋ช… ํ˜•์‹์„ ์ƒ์„ฑ, ๋ฐœ์ „, ์Šน๊ฒฉํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.' ์ž์„ธํ•œ ๋‚ด์šฉ์€ OpenAPI Initiative๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

OpenAPI ์‚ฌ์–‘์—์„œ๋Š” ํ‘œ์ค€ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ RESTful API๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. JSON ๋˜๋Š” YAML ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ๋œ OpenAPI ์‚ฌ์–‘์€ ๋จธ์‹ ์ด ์ฝ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์‚ฌ๋žŒ๋„ ์‰ฝ๊ฒŒ ์ฝ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์–‘์€ ๊ธฐ๋ณธ ๊ฒฝ๋กœ, ๊ฒฝ๋กœ ๋ฐ ๋™์‚ฌ, ํ—ค๋”, ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ž‘์—…, ์ฝ˜ํ…์ธ  ์œ ํ˜•, ์‘๋‹ต ์„ค๋ช… ๋“ฑ๊ณผ ๊ฐ™์€ API ์š”์†Œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ OpenAPI ์‚ฌ์–‘์€ ์ผ๋ฐ˜์ ์œผ๋กœ API ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

OpenAPI ์‚ฌ์–‘์˜ ๋‹ค์Œ ํ”„๋ž˜๊ทธ๋จผํŠธ๋Š” Apigee์˜ ๋ชจ์˜ ๋Œ€์ƒ ์„œ๋น„์Šค์ธ http://mocktarget.apigee.net์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ helloworld ์ƒ˜ํ”Œ์— ๋Œ€ํ•œ OpenAPI ์‚ฌ์–‘์„ ์ฐธ์กฐํ•˜์„ธ์š”.

openapi: 3.0.0
info:
  description: OpenAPI Specification for the Apigee mock target service endpoint.
  version: 1.0.0
  title: Mock Target API
paths:
  /:
    get:
      summary: View personalized greeting
      operationId: View a personalized greeting
      description: View a personalized greeting for the specified or guest user.
      parameters:
        - name: user
          in: query
          description: Your user name.
          required: false
          schema:
            type: string
      responses:
        "200":
          description: Success
  /help:
    get:
      summary: Get help
      operationId: Get help
      description: View help information about available resources in HTML format.
      responses:
        "200":
          description: Success
...

ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ ๋งˆ๋ฒ•์‚ฌ๋ฅผ ํ†ตํ•ด OpenAPI ์‚ฌ์–‘์„ ๊ฐ€์ ธ์˜ค๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ํ”„๋ก์‹œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋ชจ๋“  Apigee ํ”„๋ก์‹œ์ฒ˜๋Ÿผ Apigee UI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ฑ…์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ปค์Šคํ…€ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ํ†ตํ•˜์—ฌ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

OpenAPI ์‚ฌ์–‘์—์„œ API ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ

OpenAPI ์‚ฌ์–‘์—์„œ API ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ช‡ ๋ฒˆ์˜ ํด๋ฆญ๋งŒ์œผ๋กœ ๊ฒฝ๋กœ, ๋งค๊ฐœ๋ณ€์ˆ˜, ์กฐ๊ฑด๋ถ€ ํ๋ฆ„, ๋Œ€์ƒ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ API ํ”„๋ก์‹œ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ OAuth ๋ณด์•ˆ, ๋น„์œจ ์ œํ•œ, ์บ์‹ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ ๋งˆ๋ฒ•์‚ฌ์—์„œ OpenAPI ์‚ฌ์–‘ ์‚ฌ์šฉ์„ ํด๋ฆญํ•˜๊ณ  ๋งˆ๋ฒ•์‚ฌ์˜ ์ง€์‹œ์— ๋”ฐ๋ผ OpenAPI ์‚ฌ์–‘์—์„œ ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ๋‚˜ ๋Œ€์ƒ ์—†๋Š” ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ OpenAPI ์‚ฌ์–‘์—์„œ API ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

API ํ”„๋ก์‹œ์˜ ์ƒˆ ๋ฒ„์ „ ๋งŒ๋“ค๊ธฐ

API ํ”„๋ก์‹œ์˜ ์ƒˆ ๋ฒ„์ „์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜์„ธ์š”.

  1. Apigee UI๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
  2. Cloud ์ฝ˜์†”์˜ Apigee

    Google Cloud ์ฝ˜์†”์—์„œ ํ”„๋ก์‹œ ๊ฐœ๋ฐœ > API ํ”„๋ก์‹œ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    API ํ”„๋ก์‹œ๋กœ ์ด๋™

    ๊ธฐ๋ณธ Apigee UI

    1. Apigee UI์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
    2. ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ๊ฐœ๋ฐœ > API ํ”„๋ก์‹œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ณต์‚ฌํ•˜๋ ค๋Š” ๋ชฉ๋ก์—์„œ API ํ”„๋ก์‹œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ฐœ๋ฐœ ํƒญ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. ์ €์žฅ ๋ฒ„ํŠผ์„ ์„ ํƒํ•˜๊ณ  ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์ €์žฅ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

API ํ”„๋ก์‹œ ๋ฐฑ์—…

API ํ”„๋ก์‹œ ๋ฒˆ๋“ค์— ๊ธฐ์กด API ํ”„๋ก์‹œ๋ฅผ XML ํŒŒ์ผ ์ง‘ํ•ฉ์œผ๋กœ ๋ฐฑ์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒˆ๋“ค์— ๋‚ด๋ณด๋‚ธ ํ›„์—๋Š” ์ด ์„น์…˜ ์•ž๋ถ€๋ถ„์˜ API ํ”„๋ก์‹œ ๋ฒˆ๋“ค์—์„œ API ํ”„๋ก์‹œ ๊ฐ€์ ธ์˜ค๊ธฐ์— ์„ค๋ช…๋œ ๋Œ€๋กœ API ํ”„๋ก์‹œ๋ฅผ ์ƒˆ ํ”„๋ก์‹œ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ API ํ”„๋ก์‹œ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ

API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด API ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋Œ€์ƒ ํ”„๋ก์‹œ ์—†์Œ ์ •๋ณด

์š”์ฒญ์„ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ  Apigee ์ž์ฒด ๋‚ด์—์„œ ์ฒ˜๋ฆฌํ•˜๋ ค๋Š” ๊ฒฝ์šฐ Apigee์˜ ๋Œ€์ƒ ์—†์Œ ํ”„๋ก์‹œ๊ฐ€ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์ด ์ ์ ˆํ•œ ๊ฒฝ์šฐ๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ์‚ฌ์šฉ ์‚ฌ๋ก€

  • Apigee ๊ด€๋ฆฌ ๋ฐ์ดํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉ: ํ‚ค-๊ฐ’ ๋งต(KVM) ๋˜๋Š” Apigee ์บ์‹œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์ด Apigee ๊ด€๋ฆฌ ๋ฐ์ดํ„ฐ์™€๋งŒ ์ƒํ˜ธ์ž‘์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋Œ€์ƒ ์—†์Œ ํ”„๋ก์‹œ๊ฐ€ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€์ƒ ์—†์Œ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ KVM์—์„œ ์‚ฌ์šฉ์ž ์„ธ์…˜ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๊ตฌ์„ฑ ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ํ๋ฆ„์— KeyValueMapOperations ์ •์ฑ…๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋กœ, ์บ์‹œ๊ฐ€ ํ”Œ๋Ÿฌ์‹œ๋˜๋„๋ก ๋ฐœ์‹ ์ž๊ฐ€ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ์— ์—ฐ๊ฒฐํ•  ํ•„์š” ์—†์ด InvalidateCache ์ •์ฑ…์„ ํ˜ธ์ถœํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ์˜ API ์‚ฌ์šฉ: ๋ฐฑ์—”๋“œ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ๋ชจ์˜ API๋ฅผ ๋งŒ๋“ค์–ด API ๋™์ž‘์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ด ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ง„ํ–‰๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ์˜ API ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ OpenAPI ๋ชจ์˜ API ํ”„๋ก์‹œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  • ํ† ํฐ ๊ด€๋ฆฌ: Apigee๋Š” OAuthV2 ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€์ƒ ์—†์Œ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์ •์ฑ… ๋™์ž‘ ํ…Œ์ŠคํŠธ: Apigee ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ž‘์„ ํ…Œ์ŠคํŠธํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ๋Œ€์ƒ ์—†์Œ ํ”„๋ก์‹œ๊ฐ€ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.