Hamutaro - Hamtaro 4

Backend/Spring

[Spring] API gateway

carsumin 2026. 1. 26. 14:33
API Gateway๋ž€?
  • MSA ์—์„œ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์˜ ๋‹จ์ผ ์ง„์ž…์  ์—ญํ• ์„ ํ•˜๋Š” ์„œ๋ฒ„
  • Spring์—์„œ๋Š” ๋ณดํ†ต Spring Cloud Gateway๋ฅผ ์‚ฌ์šฉ
  • ํด๋ผ์ด์–ธํŠธ -> Gateway -> ๋‚ด๋ถ€ ์„œ๋น„์Šค๋“ค
  • ์„œ๋น„์Šค๋“ค์€ ์™ธ๋ถ€์— ์ง์ ‘ ๋…ธ์ถœ๋˜์ง€ ์•Š์Œ

 

 

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

 

Spring Cloud Gateway ํ•ต์‹ฌ ์—ญํ• 
  • ์š”์ฒญ ๋ผ์šฐํŒ… (Routing)
    • URL, Header, Method ๊ธฐ์ค€์œผ๋กœ ์„œ๋น„์Šค ๋ถ„๊ธฐ
    • /members/** -> member-service
  • ์ธ์ฆ/์ธ๊ฐ€
    • JWT ๊ฒ€์ฆ
    • ํ† ํฐ ์—†์œผ๋ฉด ์„œ๋น„์Šค ์ง„์ž… ์ฐจ๋‹จ
  • ํ•„ํ„ฐ ์ฒ˜๋ฆฌ
    • ์š”์ฒญ ์ „, ํ›„ ๊ณตํ†ต ๋กœ์ง
    • ๋กœ๊น…, ํ—ค๋” ์ถ”๊ฐ€, ๊ถŒํ•œ ์ฒดํฌ ๋“ฑ
  • ํŠธ๋ž˜ํ”ฝ ์ œ์–ด

 

Gateway ๋™์ž‘ ํ๋ฆ„
  1. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ˆ˜์‹ 
  2. Predicate๋กœ ๋ผ์šฐํŒ… ๋Œ€์ƒ ๊ฒฐ์ •
  3. Pre Filter ์‹คํ–‰
  4. ์‹ค์ œ ์„œ๋น„์Šค๋กœ ์š”์ฒญ ์ „๋‹ฌ
  5. Post Filter ์‹คํ–‰
  6. ์‘๋‹ต ๋ฐ˜ํ™˜

 

์ฃผ์š” ๊ฐœ๋… ์ •๋ฆฌ
  • Route
    • id : ๋ผ์šฐํŠธ ์‹๋ณ„์ž
    • uri : ๋ชฉ์ ์ง€ ์„œ๋น„์Šค
    • predicates : ์š”์ฒญ ์กฐ๊ฑด
spring:
  cloud:
    gateway:
      routes:
        - id: member-service
          uri: lb://MEMBER-SERVICE
          predicates:
            - Path=/members/**

 

  • Predicate
    • ์š”์ฒญ์„ ์–ด๋–ค ์„œ๋น„์Šค๋กœ ๋ณด๋‚ผ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์กฐ๊ฑด
- Path=/api/orders/**
- Method=POST

 

  • Filter
    • ์š”์ฒญ/์‘๋‹ต์„ ๊ฐ€๊ณตํ•˜๋Š” ๋กœ์ง
      • Global Filter : ๋ชจ๋“  ์š”์ฒญ ๊ณตํ†ต
      • Custom Filter : ํŠน์ • ๋ผ์šฐํŠธ ์ „์šฉ
      • ์˜ˆ : JWT ๊ฒ€์ฆ, ์‚ฌ์šฉ์ž ์ •๋ณด ํ—ค๋”์— ์ฃผ์ž…, ์‘๋‹ต ๋กœ๊น…

 

Spring Cloud Gateway์˜ ํŠน์ง•
  • Non-Blocking (WebFlux ๊ธฐ๋ฐ˜)
    • ๊ณ ์„ฑ๋Šฅ, ๊ณ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ์— ์œ ๋ฆฌ
  • Spring ์ƒํƒœ๊ณ„์™€ ๊ถํ•ฉ ์ข‹์Œ
    • Eureka, Config Server ์—ฐ๋™
    • OAuth2, JWT ์—ฐ๊ณ„ ์‰ฌ์›€
  • ์ฝ”๋“œ + ์„ค์ • ๊ธฐ๋ฐ˜ ๋ชจ๋‘ ๊ฐ€๋Šฅ
    • YML๋กœ ๊ฐ„๋‹จ ๊ตฌ์„ฑ

 

Gateway vs Nginx
๊ตฌ๋ถ„ Spring Cloud Gateway Nginx
๋ชฉ์  MSA ๋‚ด๋ถ€ ๋ผ์šฐํŒ… L7 ํ”„๋ก์‹œ
์ธ์ฆ/์ธ๊ฐ€ ๋งค์šฐ ์œ ์—ฐ ์ œํ•œ์ 
๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€๋Šฅ
๋Ÿฌ๋‹์ปค๋ธŒ ์žˆ์Œ ๋‚ฎ์Œ

 

 

์–ธ์ œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„๊นŒ?
  • ์„œ๋น„์Šค๊ฐ€ 3๊ฐœ ์ด์ƒ
  • ์ธ์ฆ/์ธ๊ฐ€ ๊ณตํ†ต ์ฒ˜๋ฆฌ ํ•„์š”
  • MSA ๊ตฌ์กฐ ๋„์ž… ๋‹จ๊ณ„
  • ํด๋ผ์ด์–ธํŠธ ์ข…๋ฅ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ (์›น/์•ฑ)