본문 바로가기
Dev/Spring Framework

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

by Day-T 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/** 같이 여러 경로를 콤마로 구분해 한 라우트에서 처리할 수도 있다.