본문 바로가기
Dev/Spring Framework

『Spring Cloud』 리전에 따라 경로에 차이가 생기면 어떻게 해결할까?

by 세대교체 2025. 1. 27.

잠깐 도와주러 들어간 프로젝트에서 한국 리전에서만 서비스를 운영하다가 VM 생성과 관련된 특정 기능은 미국 리전에서도 동시에 운영하고 싶다는 요구를 들었다.

 

기존 API Gateway를 통해 라우팅 되는 방식은 /vms/..., /lb/..., /os/... 이런 식으로 서비스 기준으로 설정했다. 프론트엔드에서 VM 생성 관련 기능에만 prefix를 붙여서 요청을 보내기에는 공수가 꽤 클 걸로 예상을 했고, 이에 따라 모든 기능에 대해 공통된 prefix를 붙여서 요청을 보내면 Gateway 기능을 통해 경로를 재작성해 라우팅 하는 방법을 선택했다.

 

핵심은 아래와 같다.

  • /vms 및 /sas/vms 경로를 각각 다른 포트(서버)로 라우팅 한다.
  • 여러 리전에서 제공하지 않는 /sas/lb, /sas/os 기능은 실제로 /lb, /os 경로로 Rewrite(경로 변환)되도록 필터를 적용한다.

 

 

실제 API Gateway 서비스의 application.yml 파일은 훨씬 더 복잡하지만 간단하게 예제를 살펴보고 필수적으로 알아야 하는 개념들만 짚고 넘어가 보자.

 

 

필수적으로 알아야 하는 개념

   
Route
  • “어떤 조건에 부합하면, 어떤 주소로 보내줄 것인지”를 정의하는 요소.
  • id, uri, predicates, filters 같은 설정들을 갖는다.
Predicate
  • 라우트가 적용될지 여부를 판별하는 “조건”.
  • 예: Path=/vms/** → 경로가 /vms/로 시작하면 매칭.
Filter
  • 라우팅이 매칭된 뒤, 요청/응답을 전처리·후처리할 수 있게 해주는 기능.
RewritePath
  • 요청 경로를 정규식을 이용해 재작성(Rewrite).
  • /sas/lb/... 같은 경로를 /lb/...로 변환.
URI
  • 실제로 요청이 전달될 서버 주소(혹은 로드밸런싱 주소)를 기입.
  • http://localhost:9005, http://192.168.0.100:9008, lb://vms-service(서비스 디스커버리) 등 다양한 방식 가능.
경로 매핑 방식
  • Path=/lb/** 로 하면 /lb로 시작하는 모든 하위 경로가 매칭.
  • Path=/sas/lb/**, /lb/** 같이 여러 경로를 콤마로 구분해 한 라우트에서 처리할 수도 있다.