[스프링] 스프링 클라우드 게이트웨이의 데이터 중심 설계

스프링 클라우드 게이트웨이는 마이크로서비스 아키텍처에서 사용되는 루팅, 필터링, 인증, 로드 밸런싱 등의 기능을 제공하며, 데이터 중심 설계를 지원합니다.

1. 라우팅

게이트웨이는 클라이언트의 요청을 라우트를 통해 특정 서비스로 전송합니다. 라우트는 필드를 기반으로 파라미터를 추출하거나, 게이트웨이에 대한 URL 패턴에 대한 룰로 지정할 수 있습니다.

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
        .route("path_route", r -> r.path("/get")
            .uri("http://httpbin.org"))
        .build();
}

2. 필터링

게이트웨이는 서비스 호출 전후에 필터를 적용하여 요청 또는 응답을 가공할 수 있습니다. 예를 들어 헤더, 파라미터, 인증 여부를 확인하고 조작할 수 있습니다.

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
        .route("rewrite_request_obj", r -> r.host("*.hystrix.com")
            .filters(f -> f.rewritePath("/foo/(?<segment>.*)", "/${segment}"))
            .uri("http://httpbin.org"))
        .build();
}

3. 인증

게이트웨이는 요청에 대한 인증 처리를 통해 보안을 강화할 수 있습니다. 스프링 시큐리티와 연동하여 보안 정책을 쉽게 적용할 수 있습니다.

@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
    return http.authorizeExchange()
        .pathMatchers("/foo").authenticated()
        .anyExchange().permitAll()
        .and().httpBasic()
        .and().build();
}

결론

스프링 클라우드 게이트웨이는 데이터 중심 설계를 통해 다양한 라우팅, 필터링, 인증 등의 기능을 제공하여 보다 안전하고 효율적인 서비스 통신을 지원합니다.

더 많은 정보는 스프링 공식문서를 참고하시기 바랍니다.