MSA 구조의 Aling 프로젝트의 인증을 구현하기 위해 API 게이트웨이에 대해 공부한 내용을 정리해 보았다.
마이크로서비스 기반의 애플리케이션의 모든 서버로의 요청을 단일 진입점을 거쳐 처리할 수 있는 기능을 제공한다. 클라이언트에서 들어오는 요청을 적절한 서버로 라우팅하고 다시 클라이언트로 반환하는 리버스 프록시 서버의 역할을 하며, 오픈소스 게이트웨이로 Kong Gateway, Zuul API Gateway, Spring Cloud Gateway 등이 있다.
인증/인가 및 토큰 : 각 서비스에 인증/인가를 구현하지 않고, 게이트웨이와 인증서버를 통해 효율적인 처리로직 처리 : 로깅, 메디에이션, 속도 제한 등 로직 처리부하 분산 (로드밸런싱) : 트래픽 분산 및 장애 발생 감지프록시 서버는 크게 포워드 프록시 서버와 리버스 프록시 서버로 나뉜다.
Spring Framework 및 Spring Boot 기반으로, Spring WebFlux 혹은 Spring WebMVC 위 구축된 API 게이트웨이를 제공한다.

https://cloud.spring.io/spring-cloud-gateway/reference/html/
( + ) 기본 용어
Route : 게이트웨이 기본 빌딩 블록으로, ID, 대상 URI, Predicate 컬렉션 및 Filter 컬렉션으로 정의PredicateFilter : Spring의 Filter, 특정 팩토리로 구성된 Spring Framework GatewayFilter의 인스턴스, 요청과 응답의 전과 후 수정 가능
path.route(r -> r.path("/get")
.uri("https://aling.kr")AddRequestHeader, AddResponseHeader, CacheRequestBody, ModifyResponseBody, RedirectTo, SetStatus 등 다양한 Filter Factory ( + ) AbstractGatewayFilterFactory를 상속받아 커스텀 필터 생성 가능SetStatus.route(${Route Predicate})
.filters(f -> f.setStatus(404).uri("https://aling.kr"))<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
@Configuration
public class GatewayConfig {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
...
.build();
}
}