MSA ํŠธ๋ ˆ์ด๋‹ ์„ผํ„ฐ

API Gateway ๋ฅผ NGINX๋กœ ๋ฐฐํฌํ•˜๊ธฐ

์ด ํŠธ๋ ˆ์ด๋‹ ์˜์ƒ์—์„œ๋Š” NGINX API Gateway ๋Š” NGINX์˜ ๋˜ ๋‹ค๋ฅธ ๋งค์šฐ ์ธ๊ธฐ ์žˆ๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋กœ, ๊ตฌ์„ฑ์ด ์‰ฝ๊ณ  ๋ชจ๋“  ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ API Gateway์˜ ๋ชจ๋“  ํ•„์ˆ˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. JWT ํ† ํฐ์„ ํ™œ์šฉํ•œ API ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ์„ค์ • ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

  • API Management์™€ API Gateway์— ๋Œ€ํ•œ ๋†’์€ ์ˆ˜์ค€์˜ ์ดํ•ด
  • API Gateway์˜ ๊ธฐ๋Šฅ
  • JWT ํ† ํฐ์„ ์‚ฌ์šฉํ•œ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ GitHub

์›ํ™œํ•œ API ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ NGINX API Gateway ๋งˆ์Šคํ„ฐํ•˜๊ธฐ

์˜ค๋Š˜๋‚ ์˜ ๋””์ง€ํ„ธ ํ™˜๊ฒฝ์—์„œ API๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž, DevOps ์—”์ง€๋‹ˆ์–ด ๋ฐ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜๊ฐ€ NGINX์ž…๋‹ˆ๋‹ค. ๋‹ค์šฉ์„ฑ๊ณผ ์„ฑ๋Šฅ์œผ๋กœ ์ž˜ ์•Œ๋ ค์ง„ NGINX๋Š” API Gateway ๋กœ๋„ ์ž‘๋™ํ•˜์—ฌ API ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŠธ๋ ˆ์ด๋‹ ์˜์ƒ์—์„œ๋Š” NGINX๋ฅผ API Gateway๋กœ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•, ์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ์‹ค์ œ ๊ตฌํ˜„ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

API ๊ด€๋ฆฌ ๋ฐ API Gateway ์ดํ•ด

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

API Gateway ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

API Gateway ๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ์‚ฌ์ด์— ์œ„์น˜ํ•˜๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  API(Application Programming Interface) ํ˜ธ์ถœ์„ ์ˆ˜๋ฝํ•˜๊ณ  ์ด๋ฅผ ์ดํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋ฅผ ์ง‘๊ณ„ํ•˜๊ณ  ์ ์ ˆํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ์˜ ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•˜์—ฌ ์š”์ฒญ์„ ์ ์ ˆํ•œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

API Gateway ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

API Gateway ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

API Gateway ๋กœ์„œ์˜ NGINX์˜ ๊ธฐ๋Šฅ

๊ณ ์„ฑ๋Šฅ ์›น ์„œ๋ฒ„, ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„œ๋ฒ„, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์ธ NGINX๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ์ธ๊ธฐ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. APIย  Gateway ๋กœ ๋ฐฐํฌ๋˜๋ฉด NGINX๋Š” API ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ์„ ํƒ์ด ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ํ•„์ˆ˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ณ ์„ฑ๋Šฅ ๋ฐ ํ™•์žฅ์„ฑ

NGINX๋Š” ์ตœ์†Œํ•œ์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์œผ๋กœ ๋†’์€ ํŠธ๋ž˜ํ”ฝ ๋กœ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Šฅ๋ ฅ์œผ๋กœ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ฒœ ๊ฐœ์˜ ๋™์‹œ ์—ฐ๊ฒฐ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ API ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์กฐ์ง์— ์ด์ƒ์ ์ธ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋Š” ๋‚ฎ์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„๊ณผ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋ณด์žฅํ•˜์—ฌ ์›ํ™œํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

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

์†๋„ ์ œํ•œ ๋ฐ ์กฐ์ ˆ

NGINX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†๋„ ์ œํ•œ(Rate Limit) ๋ฐ ์กฐ์ ˆ ์ •์ฑ…์„ ๊ตฌํ˜„ํ•˜์—ฌ ํŠน์ • ์‹œ๊ฐ„ ํ”„๋ ˆ์ž„ ๋‚ด์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ ์ˆ˜๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‚จ์šฉ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๊ณต์ •ํ•œ ์‚ฌ์šฉ์„ ๋ณด์žฅํ•˜๋ฉฐ ๊ณผ๋„ํ•œ ํŠธ๋ž˜ํ”ฝ์œผ๋กœ ์ธํ•ด ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๊ฐ€ ๊ณผ๋ถ€ํ•˜๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JWT ํ† ํฐ์„ ์‚ฌ์šฉํ•œ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ

๋ณด์•ˆ์€ API ๊ด€๋ฆฌ์˜ ์ค‘์š”ํ•œ ์ธก๋ฉด์ด๋ฉฐ NGINX๋Š” ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” JWT(JSON Web Tokens)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API์— ๋Œ€ํ•œ ๋ณด์•ˆ ์•ก์„ธ์Šค๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

JWT ํ† ํฐ์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

JWT ํ† ํฐ์€ ๋‘ ๋‹น์‚ฌ์ž ๊ฐ„์— ์ „์†ก๋  ํด๋ ˆ์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” URL ์•ˆ์ „์˜ ์ปดํŒฉํŠธํ•œ ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. JWT ํ† ํฐ์€ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • Header: ํ† ํฐ ์œ ํ˜•๊ณผ ์‚ฌ์šฉ๋œ ํ•ด์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • Payload: ํด๋ ˆ์ž„ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • Signature: ํ† ํฐ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

NGINX๋กœ JWT ์ธ์ฆ ๊ตฌํ˜„

NGINX๋กœ JWT ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. JWT ํ† ํฐ ์ƒ์„ฑ: ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ JWT ํ† ํฐ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ† ํฐ์—๋Š” ํ•„์š”ํ•œ ํด๋ ˆ์ž„์ด ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋ฉฐ ๋น„๋ฐ€ ํ‚ค๋กœ ์„œ๋ช…๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. NGINX ๊ตฌ์„ฑ:
    – `ngx_http_auth_jwt_module` ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
    – ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์— ๋Œ€ํ•ด JWT ํ† ํฐ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋„๋ก NGINX๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    – ํ† ํฐ์˜ ํด๋ ˆ์ž„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •์ฑ…์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  3. API ๋ณด์•ˆ:
    – ์œ ํšจํ•œ JWT ํ† ํฐ์ด ํฌํ•จ๋œ ์š”์ฒญ๋งŒ API์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
    – ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•ด ํ† ํฐ ๋งŒ๋ฃŒ ๋ฐ ๊ฐฑ์‹  ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ์‚ฌ๋ก€: Adobe์˜ NGINX API Gateway ์‚ฌ์šฉ

API Gateway๋กœ ์‚ฌ์šฉ๋˜๋Š” NGINX์˜ ์ฃผ๋ชฉํ• ๋งŒํ•œ ์˜ˆ๋Š” Adobe์ž…๋‹ˆ๋‹ค. Adobe๋Š” NGINX๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SaaS ์„œ๋น„์Šค์šฉ ๋‚ด๋ถ€ ๋ฐ ์™ธ๋ถ€ API์— ๋Œ€ํ•œ ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์ธ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Adobe๋Š” NGINX๋ฅผ ํ™œ์šฉํ•˜์—ฌ API Gateway ํ•ต์‹ฌ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๋Š” ๊ณ ์„ฑ๋Šฅ, ํ™•์žฅ์„ฑ ๋ฐ ๋ณด์•ˆ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

Adobe๊ฐ€ NGINX๋ฅผ ํ†ตํ•ด ์–ป๋Š” ์ด์ 

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

NGINX API Gateway ์‹œ์ž‘ํ•˜๊ธฐ

NGINX๋ฅผ API Gateway ๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์›Œ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์›ํ™œํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1๋‹จ๊ณ„: NGINX ์„ค์น˜

์„œ๋ฒ„์— NGINX๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์„ธ์š”. ๊ณต์‹ NGINX ์›น์‚ฌ์ดํŠธ์—์„œ ์ตœ์‹  ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ‘apt’ ๋˜๋Š” ‘yum’๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๋‹จ๊ณ„: NGINX ๊ตฌ์„ฑ

๋‹ค์Œ์œผ๋กœ, API Gateway ๋กœ ์ž‘๋™ํ•˜๋„๋ก NGINX๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ๋ผ์šฐํŒ…, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ๋ณด์•ˆ ์ •์ฑ…์— ๋Œ€ํ•œ ์„ค์ •์„ ํฌํ•จํ•˜๋„๋ก `nginx.conf` ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”.

3๋‹จ๊ณ„: ๋ณด์•ˆ ์กฐ์น˜ ๊ตฌํ˜„

์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•˜์—ฌ API Gateway ๊ฐ€ ์•ˆ์ „ํ•œ์ง€ ํ™•์ธํ•˜์„ธ์š”. JWT ํ† ํฐ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋„๋ก NGINX๋ฅผ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜ ํ•„์š”์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ธ์ฆ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

api gateway

NGINX๋ฅผ API Gateway ๋กœ ๋ฐฐํฌํ•˜๋ฉด ์•ˆ์ „ํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ ํšจ์œจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ API๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. JWT ์ธ์ฆ์„ ํ†ตํ•œ ํ–ฅ์ƒ๋œ ๋ณด์•ˆ๋ถ€ํ„ฐ ํ–ฅ์ƒ๋œ ์„ฑ๋Šฅ ๋ฐ ์›ํ™œํ•œ ํ†ตํ•ฉ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ NGINX๋Š” ์ตœ์‹  API ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ์ž, DevOps ์—”์ง€๋‹ˆ์–ด ๋ฐ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๋Š” ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์ดํ•ดํ•˜๊ณ  ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋”ฐ๋ฅด๋ฉด NGINX๋ฅผ ํ™œ์šฉํ•˜์—ฌ API ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ๋›ฐ์–ด๋‚œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.