๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring & SpringBoot

Gateway๋ž€? Front Desk? Entrance?

by ์ฐฝ๋”ฐ์˜ค 2025. 4. 15.
728x90

๐Ÿšช Spring Cloud Gateway๋ž€? MSA์—์„œ Gateway๊ฐ€ ์™œ ํ•„์š”ํ• ๊นŒ?

Spring Cloud๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด "Gateway"๋ž€ ์šฉ์–ด๊ฐ€ ์ž์ฃผ ๋“ฑ์žฅํ•˜์ฃ .
ํŠนํžˆ MSA(๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜) ๊ตฌ์กฐ์—์„œ๋Š” Gateway๊ฐ€ ํ•ต์‹ฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

“Spring Cloud๊ฐ€ ์„œ๋น„์Šค ๊ฐ„์— Gateway ์—ญํ• ์„ ํ•œ๋‹ค๋Š”๋ฐ, ๋„๋Œ€์ฒด Gateway๊ฐ€ ๋ญ”๊ฐ€์š”?”

๐Ÿ” Gateway๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

Gateway๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋ฐ›์•„ ์ ์ ˆํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•ด์ฃผ๋Š” '์ •๋ฌธ(์ถœ์ž…๊ตฌ)' ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด, ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ์‚ฌ์ด์—์„œ ์ค‘๊ฐ„ ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•˜๋Š” ๊ฑฐ์˜ˆ์š”.


๐Ÿค” ์™œ Gateway๊ฐ€ ํ•„์š”ํ• ๊นŒ?

๐Ÿ’ฅ Gateway๊ฐ€ ์—†์„ ๋•Œ

[์‚ฌ์šฉ์ž] โ”€โ”€> [ํšŒ์› ์„œ๋น„์Šค: 8081]
         โ””โ”€> [์ฃผ๋ฌธ ์„œ๋น„์Šค: 8082]
         โ””โ”€> [์ƒํ’ˆ ์„œ๋น„์Šค: 8083]
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ชจ๋“  ์„œ๋น„์Šค์˜ ์ฃผ์†Œ์™€ ํฌํŠธ๋ฅผ ์•Œ์•„์•ผ ํ•จ
  • CORS, ์ธ์ฆ, ๋กœ๊น… ๋“ฑ์„ ๊ฐ ์„œ๋น„์Šค์—์„œ ์ค‘๋ณต ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ

โœ… Gateway๋ฅผ ๋„์ž…ํ–ˆ์„ ๋•Œ

[์‚ฌ์šฉ์ž] โ”€โ”€> [๐ŸŒ Gateway: 8080] โ”€โ”€> [ํšŒ์› ์„œ๋น„์Šค]
                                  โ””โ”€> [์ฃผ๋ฌธ ์„œ๋น„์Šค]
                                  โ””โ”€> [์ƒํ’ˆ ์„œ๋น„์Šค]
  • ํด๋ผ์ด์–ธํŠธ๋Š” Gateway๋งŒ ์•Œ๋ฉด ๋จ
  • ์ธ์ฆ, ๋ณด์•ˆ, ๋กœ๊น… ๋“ฑ ์ค‘์•™ ์ง‘์ค‘ํ™” ๊ฐ€๋Šฅ

๐Ÿ“ฆ Gateway๊ฐ€ ํ•˜๋Š” ์ผ๋“ค

์—ญํ•  ์„ค๋ช…
๐Ÿ”€ ๋ผ์šฐํŒ… ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ์š”์ฒญ์„ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ
๐Ÿ” ์ธ์ฆ/์ธ๊ฐ€ JWT ๋˜๋Š” OAuth๋กœ ์‚ฌ์šฉ์ž ๊ถŒํ•œ ๊ฒ€์‚ฌ
๐Ÿ“Š ๋กœ๊น…/๋ชจ๋‹ˆํ„ฐ๋ง ์š”์ฒญ ์ •๋ณด ์ˆ˜์ง‘ ํ›„ ๋กœ๊ทธ ๋ฐ ๋ถ„์„
๐ŸŽฏ Rate Limiting ๊ณผ๋„ํ•œ ์š”์ฒญ ์ œ์–ด (์˜ˆ: 1์ดˆ์— 10๊ฑด ์ดํ•˜)
๐ŸŒ CORS ์ฒ˜๋ฆฌ ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ ๊ฐ„ ๋„๋ฉ”์ธ ํ—ˆ์šฉ ์„ค์ •

๐Ÿš€ Spring Cloud Gateway ์˜ˆ์‹œ

Spring Cloud์—์„œ๋Š” WebFlux ๊ธฐ๋ฐ˜์˜ ๊ณ ์„ฑ๋Šฅ Gateway๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๊ฐ„๋‹จํ•œ ์„ค์ •๋งŒ์œผ๋กœ๋„ ๋ผ์šฐํŒ…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงพ application.yml ์˜ˆ์‹œ

spring:
  cloud:
    gateway:
      routes:
        - id: member-service
          uri: http://localhost:8081
          predicates:
            - Path=/members/**
        - id: order-service
          uri: http://localhost:8082
          predicates:
            - Path=/orders/**

์ด ์„ค์ •์€ ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:

  • /members/** ์š”์ฒญ → 8081 ํฌํŠธ์˜ ํšŒ์› ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ
  • /orders/** ์š”์ฒญ → 8082 ํฌํŠธ์˜ ์ฃผ๋ฌธ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ

๐Ÿงฉ Gateway ๊ตฌ์„ฑ๋„

             [์‚ฌ์šฉ์ž ์š”์ฒญ]
                   โ”‚
                   โ–ผ
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ”‚  ๐ŸŒ Gateway     โ”‚
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
             โ”‚     โ”‚     โ”‚
             โ–ผ     โ–ผ     โ–ผ
      [ํšŒ์› ์„œ๋น„์Šค] [์ฃผ๋ฌธ ์„œ๋น„์Šค] [์ƒํ’ˆ ์„œ๋น„์Šค]

Gateway๋Š” ์ด์ฒ˜๋Ÿผ ๋ชจ๋“  ์š”์ฒญ์˜ ์ค‘์•™ ํ†ต์ œ์†Œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.


โœ… ์š”์•ฝ

  • Gateway๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋ฐ›์•„ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ์ถœ์ž…๊ตฌ์ž…๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ, ์ธ์ฆ, ๋กœ๊น… ๋“ฑ ๊ณตํ†ต ์ฒ˜๋ฆฌ๋ฅผ ํ•œ ๊ณณ์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Spring Cloud Gateway๋Š” WebFlux ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋ฉฐ, ์„ค์ •๋„ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • Gateway๋Š” ๋ฐ˜๋“œ์‹œ ๋ณ„๋„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ฐฐํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ๋งˆ๋ฌด๋ฆฌ

MSA ํ™˜๊ฒฝ์—์„œ๋Š” ์„œ๋น„์Šค๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์š”์ฒญ ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค.
Spring Cloud Gateway๋ฅผ ํ†ตํ•ด ์ค‘์•™์—์„œ ์š”์ฒญ์„ ํ†ต์ œํ•˜๊ณ , ๊ฐ ์„œ๋น„์Šค๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์–ด์š”.

๋‹ค์Œ ๊ธ€์—์„œ๋Š” Spring Cloud Gateway์— JWT ์ธ์ฆ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์†Œ๊ฐœํ•ด๋ณผ๊ฒŒ์š”!