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

์ด์ œ Google Cloud์™€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ UI๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๋Ÿฐํƒ€์ž„์„ ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑํ–ˆ์œผ๋ฏ€๋กœ ์ด ๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ณผ ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ์„น์…˜์—์„œ๋Š” ๋‹ค์Œ ์ ˆ์ฐจ๋ฅผ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

  1. API ํ”„๋ก์‹œ ๋งˆ๋ฒ•์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Apigee UI์—์„œ ์ƒˆ API ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ
  2. UI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์— ์ƒˆ ํ”„๋ก์‹œ ๋ฐฐํฌ

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

์ด ์„น์…˜์—์„œ๋Š” API ํ”„๋ก์‹œ ๋งˆ๋ฒ•์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UI์—์„œ ์ƒˆ API ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

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

  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ Apigee UI๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
  2. ๊ธฐ๋ณธ ๋ทฐ์—์„œ ๊ฐœ๋ฐœ > API ํ”„๋ก์‹œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ํ™˜๊ฒฝ ๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก์—์„œ ์ƒˆ API ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค ํ™˜๊ฒฝ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” ํ™˜๊ฒฝ ์ด๋ฆ„์„ 'test'๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. 5๋‹จ๊ณ„: ํ™˜๊ฒฝ ์ถ”๊ฐ€์—์„œ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

    ํ•˜์ด๋ธŒ๋ฆฌ๋“œ UI๋Š” ํ•ด๋‹น ํ™˜๊ฒฝ์˜ API ํ”„๋ก์‹œ ๋ชฉ๋ก์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ชฉ๋ก์€ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์—์„œ +ํ”„๋ก์‹œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. API ํ”„๋ก์‹œ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.
  5. ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ(๊ฐ€์žฅ ์ผ๋ฐ˜์ )๋ฅผ ์„ ํƒํ•˜๊ณ  ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ํ”„๋ก์‹œ ์„ธ๋ถ€์ •๋ณด ๋ทฐ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  6. ๋‹ค์Œ ์„ค์ •์œผ๋กœ ํ”„๋ก์‹œ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ํ”„๋ก์‹œ ์ด๋ฆ„: 'myproxy'๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์˜ ๋‚˜๋จธ์ง€ ๋‹จ๊ณ„์—์„œ๋Š” ์ด๋ฅผ ํ”„๋ก์‹œ ID๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ํ”„๋ก์‹œ ๊ธฐ๋ณธ ๊ฒฝ๋กœ: '/myproxy'๋กœ ์ž๋™ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋Š” API์— ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” URL์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. Edge๋Š” URL์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์‹  ์š”์ฒญ์„ ์ ์ ˆํ•œ API ํ”„๋ก์‹œ๋กœ ์ผ์น˜์‹œํ‚ค๋ฉฐ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.
    • (์„ ํƒ์‚ฌํ•ญ) ์„ค๋ช…: '๊ฐ„๋‹จํ•œ ํ”„๋ก์‹œ๋กœ Apigee ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํ…Œ์ŠคํŠธ'์™€ ๊ฐ™์ด ์ƒˆ API ํ”„๋ก์‹œ์— ์„ค๋ช…์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ๋Œ€์ƒ(๊ธฐ์กด API): https://mocktarget.apigee.net์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Apigee๊ฐ€ API ํ”„๋ก์‹œ์— ๋Œ€ํ•œ ์š”์ฒญ์—์„œ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์ƒ URL์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. mocktarget ์„œ๋น„์Šค๋Š” Apigee์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋ฉฐ ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. API ํ‚ค ๋˜๋Š” ์•ก์„ธ์Šค ํ† ํฐ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    API ํ”„๋ก์‹œ์˜ ์„ธ๋ถ€์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  7. ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  8. ์ •์ฑ… ํ™”๋ฉด์—์„œ ๋ณด์•ˆ ์˜ต์…˜์œผ๋กœ ํ†ต๊ณผ(์Šน์ธ ์—†์Œ)์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  9. ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  10. ์š”์•ฝ ํ™”๋ฉด์—์„œ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ํ•˜์ด๋ธŒ๋ฆฌ๋“œ๋Š” ํ”„๋ก์‹œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋ก์‹œ ๋ฒˆ๋“ค์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

  11. ํ”„๋ก์‹œ ๋ชฉ๋ก์œผ๋กœ ์ด๋™์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ํ•˜์ด๋ธŒ๋ฆฌ๋“œ๋Š” API ํ”„๋ก์‹œ ๋ชฉ๋ก์„ ํ‘œ์‹œํ•˜๋Š” ํ”„๋ก์‹œ ๋ทฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ํ”„๋ก์‹œ๋Š” ์•„์ง ๋ฐฐํฌ๋˜์ง€ ์•Š์•˜์Œ์„ ์˜๋ฏธํ•˜๋Š” ํšŒ์ƒ‰ ์ƒํƒœ ํ‘œ์‹œ๊ธฐ์™€ ํ•จ๊ป˜ ๋ชฉ๋ก ์ƒ๋‹จ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ UI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์— ํ”„๋ก์‹œ ๋ฐฐํฌ

์ƒˆ ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“  ํ›„์—๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋ฐฐํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ UI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ํ”„๋ก์‹œ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ UI๋กœ API ํ”„๋ก์‹œ๋ฅผ ๋ฐฐํฌํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. Apigee UI์—์„œ ๊ฐœ๋ฐœ > API ํ”„๋ก์‹œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    'test' ํ™˜๊ฒฝ์ด ์„ ํƒ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    UI์˜ ํ”„๋ก์‹œ ๋ชฉ๋ก์— ์ƒˆ ํ”„๋ก์‹œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. 'myproxy' ํ”„๋ก์‹œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    UI์— ํ”„๋ก์‹œ์˜ API ํ”„๋ก์‹œ ๊ฐœ์š” ํƒญ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    ๋ฐฐํฌ ์•„๋ž˜์˜ ๋ฒ„์ „ ์—ด์— '๋ฐฐํฌ๋˜์ง€ ์•Š์Œ'์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  3. ๋ฒ„์ „ ์—ด์—์„œ ๋“œ๋กญ๋‹ค์šด ์„ ํƒ๊ธฐ๋ฅผ ํŽผ์ณ ๋ฐฐํฌํ•  ๋ฒ„์ „์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก์—๋Š” '1'๊ณผ '๋ฐฐํฌ ์ทจ์†Œ'๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  4. ๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก์—์„œ ๋ฐฐํฌํ•˜๋ ค๋Š” ๋ฒ„์ „์ธ '1'์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    UI์— ๋ฐฐํฌ๋ฅผ ํ™•์ธํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  5. ๋ฐฐํฌ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    UI์—์„œ ์ƒˆ ํ”„๋ก์‹œ์˜ ๋ฒ„์ „ 1์„ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

    ๋ฐฐํฌ๋Š” ์ฆ‰๊ฐ์ ์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์˜ '์ตœ์ข… ์ผ๊ด€์„ฑ' ๋ฐฐํฌ ๋ชจ๋ธ์€ ์ƒˆ ๋ฐฐํฌ๊ฐ€ ์ฆ‰์‹œ๊ฐ€ ์•„๋‹ˆ๋ผ ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ ํด๋Ÿฌ์Šคํ„ฐ์— ์ถœ์‹œ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

UI์—์„œ ํ”„๋ก์‹œ์˜ ๋ฐฐํฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ, ๋‹ค์Œ ๋‘ ๋‹จ๊ณ„์—์„œ๋Š” ๋ฐฉ๊ธˆ ๋ฐฐํฌํ•œ API ํ”„๋ก์‹œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ Apigee API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐฐํฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

3. API ํ”„๋ก์‹œ ํ˜ธ์ถœ

ํ”„๋ก์‹œ๊ฐ€ ๋ฐฐํฌ๋˜์—ˆ๋‹ค๊ณ  UI์— ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ์šฐ ์›ํ•˜๋Š” cURL ๋˜๋Š” REST ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ก์‹œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ํ™˜๊ฒฝ ๊ทธ๋ฃน์˜ ํ˜ธ์ŠคํŠธ ๋ณ„์นญ์„ ๋ณ€์ˆ˜๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.
    $HOSTALIAS=your_host_alias
  2. API ํ”„๋ก์‹œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
    curl -k https://$HOSTALIAS/myproxy

    ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    curl -v -k https://apitest.acme.com/myproxy

    ํ˜ธ์ถœ์ด ์„ฑ๊ณตํ•˜๋ฉด ๋‹ค์Œ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    Hello, Guest!

์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  TLS/SSL ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋Œ€์‹  ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ™˜๊ฒฝ ๊ทธ๋ฃน์˜ ํ˜ธ์ŠคํŠธ ๋ณ„์นญ์„ ๋ณ€์ˆ˜๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.
    export $HOSTALIAS=your_host_alias
  2. ์ธ๊ทธ๋ ˆ์Šค ํ˜ธ์ŠคํŠธ๋ฅผ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.
    export INGRESS_HOST=$(kubectl -n istio-system get service \
      istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
  3. ๋ณด์•ˆ ์ธ๊ทธ๋ ˆ์Šค ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.
    export SECURE_INGRESS_PORT=$(kubectl -n istio-system get \
      service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
  4. API ํ”„๋ก์‹œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
    curl  -H Host:$HOSTALIAS --resolve \
      $HOSTALIAS:$SECURE_INGRESS_PORT:$INGRESS_HOST  \
      https://$HOSTALIAS:$SECURE_INGRESS_PORT/myproxy -k