Welcome! ๐Ÿ™‹โ€โ™‚๏ธ View more

Engineering ๐Ÿ’ป/MLOps

MSA ํ™˜๊ฒฝ์—์„œ์˜ API Gateway

DeepFlame 2026. 3. 6. 22:05

Gemini๊ฐ€ ๊ทธ๋ ค์ค€ API GATEWAY

 

์š”์ฆ˜ MSA์— ๋Œ€ํ•œ ์ง€์‹์„ ์ƒˆ๋กœ ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ, API Gateway์˜ ์—ญํ• ๊ณผ ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด์„œ ๊นจ๋‹ซ๊ณ  ์žˆ๋Š”๋ฐ์š”.
์ด๋ฒˆ ๊ธ€์—์„œ ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

MSA์— ๊ด€๋ จํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๊ธ€ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

https://deep-flame.tistory.com/48

 

ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋””์ž์ธ ํŒจํ„ด: AI ํ”Œ๋žซํผ ๊ฐœ๋ฐœ์ž์˜ ์•„ํ‚คํ…์ฒ˜ ์„ฑ์ฐฐ

๋“ค์–ด๊ฐ€๋ฉฐ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์“ด๋‹ค๊ณ  ๋ชจ๋‘ 'ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ'๋Š” ์•„๋‹™๋‹ˆ๋‹ค.์ €๋Š” GPU ๊ธฐ๋ฐ˜์˜ LLM ํ•™์Šต ๋ฐ ์„œ๋น™ ํ”Œ๋žซํผ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.GPU ๋ฆฌ์†Œ์Šค ์ง‘์•ฝ์ ์ธ ๋กœ์ง์„ ๋‹ค๋ฃจ๋‹ค ๋ณด๋‹ˆ ๋‹น์—ฐํžˆ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค

deep-flame.tistory.com

 

 

API Gateway๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ์™œ ํ•„์š”ํ•œ๊ฐ€?

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA)์—์„œ๋Š” ์ˆ˜๋งŽ์€ ์„œ๋น„์Šค๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
API Gateway๋Š” ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค๋“ค์˜ ๋‹จ์ผ ์ง„์ž…์ (Single Entry Point) ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.
ํด๋ผ์ด์–ธํŠธ(์›น, SDK, CLI)๊ฐ€ ์ˆ˜์‹ญ ๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ฃผ์†Œ๋ฅผ ์ผ์ผ์ด ์•Œ ํ•„์š” ์—†์ด, ์ด '๋Œ€๋ฌธ' ํ•˜๋‚˜๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๋‚˜๋จธ์ง€๋Š” ์•Œ์•„์„œ ๋ฐฐ๋‹ฌํ•ด ์ฃผ๋Š” ๊ฒƒ์ด์ฃ .

https://learn.microsoft.com/ko-kr/azure/architecture/microservices/design/gateway

API ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์ง์ ‘ ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. 
API ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์—†์œผ๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ๊ฐœ๋ณ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค์™€ ์ง์ ‘ ํ†ต์‹ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ API Gateway๊ฐ€ ์ •์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

API Gateway์˜ ์—ญํ• 

1. ์ธ์ฆ ๋ฐ ์ธ๊ฐ€

๋ชจ๋“  ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ๊ฐ์ž "๋„ˆ ๋ˆ„๊ตฌ๋‹ˆ?"๋ผ๊ณ  ๋ฌผ์–ด๋ณด๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
์•„๋ž˜์™€ ๊ฐ™์ด ์ธ์ฆ/์ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ์ž ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์–ผ๋งˆ๋“ ์ง€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ค‘์•™ ์ง‘์ค‘์‹ ๊ฒ€์ฆ: Gateway๊ฐ€ ์ž…๊ตฌ์—์„œ JWT์˜ ์„œ๋ช…์„ ํ™•์ธํ•˜๊ณ  ๋งŒ๋ฃŒ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.
  • ๊ถŒํ•œ ๋ถ€์—ฌ: ์‚ฌ์šฉ์ž ํ† ํฐ์— ๋‹ด๊ธด ๊ถŒํ•œ(Role)์„ ํ™•์ธํ•˜์—ฌ, ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ '๋ชจ๋ธ ์‚ญ์ œ' API์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ž…๊ตฌ์—์„œ ์ปทํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ ์› ์ „๋‹ฌ: ์ธ์ฆ์— ์„ฑ๊ณตํ•˜๋ฉด Gateway๋Š” X-User-ID ๊ฐ™์€ ์ปค์Šคํ…€ ํ—ค๋”์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋‹ด์•„ ๋‚ด๋ถ€ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

2. ๋™์  ๋ผ์šฐํŒ… ๋ฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

ํด๋ผ์ด์–ธํŠธ๋Š” ํ•˜๋‚˜์˜ ์ฃผ์†Œ๋งŒ ์•Œ๋ฉด ๋˜์ง€๋งŒ, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ˆ˜์‹ญ ๊ฐœ์˜ ์„œ๋น„์Šค๋กœ ํฉ์–ด์ง‘๋‹ˆ๋‹ค.

  • ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…: /v1/train/ ์š”์ฒญ์€ ํ•™์Šต ์„œ๋น„์Šค๋กœ, /v1/predict/ ์š”์ฒญ์€ ์„œ๋น™ ์„œ๋น„์Šค๋กœ ์ง€๋Šฅ์ ์œผ๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ ์—ฐ๋™: Kubernetes ํ™˜๊ฒฝ์—์„œ ํŒŒ๋“œ(Pod)์˜ IP๊ฐ€ ์ˆ˜์‹œ๋กœ ๋ณ€ํ•ด๋„, Gateway๋Š” ์„œ๋น„์Šค ์ด๋ฆ„์„ ํ†ตํ•ด ์‚ด์•„์žˆ๋Š” ํŒŒ๋“œ๋ฅผ ์ฐพ์•„ ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ์นด๋‚˜๋ฆฌ(Canary) ํ…Œ์ŠคํŠธ: ์ƒˆ๋กœ์šด ๋ชจ๋ธ ์„œ๋น™ ์ฝ”๋“œ๋ฅผ ๋ฐฐํฌํ–ˆ์„ ๋•Œ, ์ „์ฒด ํŠธ๋ž˜ํ”ฝ์˜ 5%๋งŒ ์‹ ๊ทœ ๋ฒ„์ „์œผ๋กœ ๋ณด๋‚ด๋Š” ๋“ฑ์˜ ์ •๊ตํ•œ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

3. ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ๋ฐ ์„œํ‚ท ๋ธŒ๋ ˆ์ดํ‚น

  • API ํ• ๋‹น๋Ÿ‰ ๊ด€๋ฆฌ: LLM ์ธํผ๋Ÿฐ์Šค๋Š” ๋น„์šฉ์ด ๋น„์‹ธ๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฌ์šฉ์ž ๋“ฑ๊ธ‰์— ๋”ฐ๋ผ ๋ถ„๋‹น ํ˜ธ์ถœ ํšŸ์ˆ˜(RPM)๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
  • ์žฅ์•  ์ „ํŒŒ ๋ฐฉ์ง€: ํŠน์ • ์„œ๋น„์Šค๊ฐ€ ์‘๋‹ต ๋ถˆ๋Šฅ ์ƒํƒœ๋ผ๋ฉด, Gateway๊ฐ€ ์ฆ‰์‹œ ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค๋ฅผ ์ž‘๋™์‹œ์ผœ ์‚ฌ์šฉ์ž์—๊ฒŒ "์ž ์‹œ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•ด ์ฃผ์„ธ์š”"๋ผ๋Š” ์‘๋‹ต์„ ๋น ๋ฅด๊ฒŒ ๋Œ๋ ค์ค๋‹ˆ๋‹ค. ์ด๋Š” ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ์—ฐ์‡„์ ์œผ๋กœ ๋งˆ๋น„๋˜๋Š” ๊ฒƒ์„ ๋ง‰์Šต๋‹ˆ๋‹ค.

4. ์š”์ฒญ ๋ฐ ์‘๋‹ต ๋ณ€ํ™˜

  • ํ”„๋กœํ† ์ฝœ ๋ณ€ํ™˜: ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹ค๋ฃจ๊ธฐ ์‰ฌ์šด REST/JSON์œผ๋กœ ์š”์ฒญํ•˜์ง€๋งŒ, ๋‚ด๋ถ€ ์„œ๋น„์Šค๋ผ๋ฆฌ๋Š” ๊ณ ์„ฑ๋Šฅ ํ†ต์‹ ์„ ์œ„ํ•ด gRPC๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ Gateway๊ฐ€ ์ค‘๊ฐ„์—์„œ ์ด๋ฅผ ๋ณ€ํ™˜ํ•ด ์ค๋‹ˆ๋‹ค
  • ๋ฐ์ดํ„ฐ ๊ฐ€๊ณต: ๋ณด์•ˆ์„ ์œ„ํ•ด ์‘๋‹ต์—์„œ ๋ฏผ๊ฐํ•œ ํ•„๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์˜ ์‘๋‹ต์„ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์„œ(API Aggregation) ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

5. ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ

  • ํ†ตํ•ฉ ๋กœ๊น…: ๋ชจ๋“  ์š”์ฒญ์˜ ์‹œ์ž‘๊ณผ ๋์„ ๊ธฐ๋กํ•˜๋ฏ€๋กœ, ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์ถ”์ ์ด ๋งค์šฐ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€ํ‘œ ์ˆ˜์ง‘: API๋ณ„ ์‘๋‹ต ์‹œ๊ฐ„(Latency), ์„ฑ๊ณต๋ฅ , ํŠธ๋ž˜ํ”ฝ ์–‘ ๋“ฑ์„ ์ˆ˜์ง‘ํ•˜์—ฌ Prometheus๋‚˜ Grafana ๋Œ€์‹œ๋ณด๋“œ์— ๋ฟŒ๋ ค์ค๋‹ˆ๋‹ค.

 

 

API Gateway ์†”๋ฃจ์…˜

๊ทธ๋Ÿผ API Gateway ์†”๋ฃจ์…˜๋“ค์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ์š”?
์‚ฌ์‹ค Public Cloud ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ฐ๊ฐ์˜ ํ™˜๊ฒฝ์— ๋งž๋Š” ์™„์ „ ๊ด€๋ฆฌํ˜• ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ‘๊ทผ์„ฑ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • AWS: Amazon API Gateway
  • GCP: Apigee
  • Azure: Azure API Management

 

๊ทธ ์™ธ์— ์˜คํ”ˆ์†Œ์Šค๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Kong

์ „ ์„ธ๊ณ„์ ์œผ๋กœ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์˜คํ”ˆ์†Œ์Šค API Gateway๋กœ, ๊ณ ์„ฑ๋Šฅ ์›น ์„œ๋ฒ„์ธ NGINX๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • Cloud Native: ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ, ํŠนํžˆ Kubernetes Ingress Controller๋กœ์„œ์˜ ์ธ๊ธฐ๊ฐ€ ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค.
  • Plug-and-Play: ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์€ ์ตœ์†Œํ™”ํ•˜๊ณ , ํ•„์š”ํ•œ ๊ธฐ๋Šฅ(JWT ์ธ์ฆ, Rate Limiting ๋“ฑ)์€ 'ํ”Œ๋Ÿฌ๊ทธ์ธ'์„ ๊ฝ‚๋“ฏ์ด ์ถ”๊ฐ€ํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

https://developer.konghq.com/gateway/

 

Istio Ingress Gateway

Istio Ingress Gateway๋Š” ๊ณ ์„ฑ๋Šฅ ํ”„๋ก์‹œ์ธ Envoy๋ฅผ Data Plane์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ตœ๊ทผ์—๋Š” Kubernetes ํ‘œ์ค€์ธ Gateway API์˜ ํ‘œ์ค€ ๊ตฌํ˜„์ฒด๋กœ์„œ ์ž…์ง€๋ฅผ ๊ตณํžˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ธํ”„๋ผ ์ค‘์‹ฌ: ํŠธ๋ž˜ํ”ฝ ๋ถ„ํ• , mTLS ์•”ํ˜ธํ™”, ์„œํ‚ท ๋ธŒ๋ ˆ์ดํ‚น ๋“ฑ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์˜ ๋ณต์žกํ•œ ์ œ์–ด์— ํŠนํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„œ๋น„์Šค ๋ฉ”์‹œ ํ†ตํ•ฉ: ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ ํ†ต์‹ ๊ณผ ์™ธ๋ถ€ ํ†ต์‹ ์„ ๋™์ผํ•œ Envoy ๊ธฐ๋ฐ˜ ์ •์ฑ…์œผ๋กœ ์ผ๊ด€๋˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://istio.io/latest/docs/tasks/traffic-management/ingress/ingress-control/

 

Ingress Gateways

Describes how to configure an Istio gateway to expose a service outside of the service mesh.

istio.io