구조

Client(요청) → Gateway → Eureka → 여러 개의 인스턴스(1ST-SERVICE)

즉,

게이트웨이는 사용자의 요청을 받아서

Eureka에 등록된 여러 개의 서비스(레플리카) 중 하나로 자동 분배(Load Balancing) 해주는 구조

스크린샷 2025-09-23 오후 12.09.44.png

Spring Cloud Gateway 라우팅 설정

스크린샷 2025-10-09 오후 5.43.50.png

기본 구조

spring:
  cloud:
    gateway:
      routes:

1ST-SERVICE 라우트

- id: 1st-service-get
  uri: lb://1ST-SERVICE
  predicates:
    - Path=/first-service/**
  filters:
    - RewritePath=/first-service/(?<segment>.*), /${segment}
    - AddRequestHeader=first-request, first-request-header
    - AddResponseHeader=first-response, first-response-header
설정 항목 설명
id 라우트 식별자 (로그나 모니터링용 이름)
uri lb://1ST-SERVICE → Eureka에 등록된 “1ST-SERVICE” 이름을 가진 인스턴스로 로드밸런싱하여 전달
predicates 조건: 요청 경로가 /first-service/** 로 시작할 때만 이 라우트 적용
filters 요청/응답을 조작하는 필터 설정

filters 상세

필터 역할
RewritePath=/first-service/(?<segment>.*), /${segment} 접두어(/first-service)를 제거 → 백엔드가 /hello로 받을 수 있게 함
AddRequestHeader=first-request, first-request-header 요청 헤더에 "first-request: first-request-header" 추가
AddResponseHeader=first-response, first-response-header 응답 헤더에 "first-response: first-response-header" 추가 (디버깅용, 확인용)
사용자 요청: <http://localhost:8000/first-service/hello>
↓
Gateway가 조건(Path=/first-service/**) 매칭
↓
/first-service 접두어 제거 → /hello 로 변경
↓
Eureka에서 등록된 1ST-SERVICE 인스턴스 중 하나로 전달
↓
응답 헤더에 “first-response-header” 추가 후 반환