Spring

[MSA 구축해보기_1] SpringBoot + Spring Cloud Gateway

For_HW 2021. 9. 9. 20:59

사전 지식

 

- Spring Cloud Gateway 는 WebFlux와 Reactor 프로젝트를 기반으로 비동기적으로 만들어졌다.
- Servlet 대신 netty 서버를 이용한다.

- 마이크로 서비스를 위한 API Gateway는 늘어난 http 통신을 빨리빨리 처리하기 위해 nonblocking & asynchronus 하게 돌아가야한다.

 


인증서버 역할

  • 로그인/회원가입 페이지 MVC
  • Refresh Token과 Access Token 발행
  • 로그아웃 블랙리스트 관리
  • Refresh Token db 관리

Gateway

  • 첫 토큰 발행 요청(로그인 요청)을 받으면 인증 서버로 전달해서 Access token과 Refresh Token 받아와서 Client에 전달
  • Client로부터 Refresh Token을 받으면 인증 서버에서 확인하고, 유효하면 새로운 access token을 발급받은 뒤 Client에 전달하고 유효하지 않으면 로그인 하라고 알려주기

Gateway RouteLocator 작성 및 테스트

 

Gateway: 8080

AuthServer: 8083 

으로 설정해두었다.

 

Gateway 프로젝트에서 최상위 Application.java 에 RouteLocator를 작성해준다!

@SpringBootApplication
public class GatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(VirspitGatewayApplication.class, args);
    }

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {

        return builder.routes()
                .route("path_route",  r-> r.path("/test")
                        .filters(f -> f.addRequestHeader("Hello", "World")
                                .rewritePath("/test", "/auth"))
                        .uri("http://localhost:8083/"))
                .build();
    }

}

기본적으로는 route.uri와 route.path를 다르게 취급해서

 

r.path("/test").uri("http://localhost:8083/") 만으로는 http://localhost:8083/8083으로 간다.

이를 위해 rewritePath(원래루트, 바꿀루트) 필터를 사용하는데,

필터를 여러개 사용할 때는 filters(f-> f.필터1.필터2) 식으로 이어서 쓸 수 있다.

 

 

테스트를 위해 각각 테스트용 api 를 만들어주었습니다.

@RestController
public class GatewaytestController {

    @GetMapping
    public String test() {
        return "Gateway 8080 test";
    }
}

 

@RestController
public class AuthtestController {

    @GetMapping("/auth")
    public String test() {
        return "Gateway 8080 test";
    }
}

 

http://localhost:8080  Get 호출

 

http://localhost:8080/test  Get 호출

 

다음과 같이 확인 할 수 있다!!!

 

일단 여기까지 gateway 는 잠시 두고, 다음편은 spring Security 작업을 해보자!


 

'Spring'의 다른글

  • 현재글 [MSA 구축해보기_1] SpringBoot + Spring Cloud Gateway