MSA
[MSA] API Gateway - 머리부터 발끝까지(3)
코리늬
2021. 1. 18. 21:00
저번 글에 이어서 Client1을 작성해보자
간단하게 Request를 받을 컨트롤러만 작성하여 데이터를 확인해보자.
Client1Controller
@Slf4j
@RestController
@RequestMapping("/client1")
public class Client1Controller {
@GetMapping(value = "/ping")
public Mono<String> getData(ServerHttpRequest request, ServerHttpResponse response){
log.info("getData Method");
HttpHeaders headers = request.getHeaders();
headers.forEach((k,v) ->{
System.out.println(k + " : " + v);
});
ResponseCookie.ResponseCookieBuilder builder = ResponseCookie.from("client1","client1CookieValue");
ResponseCookie cookie = builder.build();
response.addCookie(cookie);
Mono<String> data = Mono.just("Hello from Reactive getData Method");
return data;
}
}
컨트롤러를 구현했으니 이제 제대로 라우팅이 되는지 실행해서 확인해보자.
테스트
http://localhost:8080/client1/ping
8080 서버로 요청을 보냈는데, 8081 서버에서 응답이 제대로 온 것으로 보아 라우팅이 성공적으로 진행됐다.
Mono.just("Hello from Reactive getData Method");
Mono에 담은 데이터가 body에 담겨 응답값으로 전달되었다.
Mono가 정확히 뭘까? 맛보기만 보고 따로 정리를 하자.
- Flux : 0-N 개의 데이터 전달
- Mono : 0-1 개의 데이터 전달
Client1Controller log
컨트롤러 헤더에 담긴 key, value 값이 보여진다.
그럼 저번에 작성한 Filter는 제대로 우선순위에 맞게 동작이 되었을까?
게이트웨이 로그
필터 시작
BeforeOrderedFilter - BeforeFilter - CommonFilter - ClientFilter
필터 종료
ClientFilter - CommonFilter - BeforeFilter - BeforeOrderedFilter
역순으로 잘 종료된 모습을 확인 할 수 있다.
게이트 웨이를 구현함으로써, Request를 단일화 할 수 있고, 공통 로직(인증/인가)를 한 번만 처리하면 된다고하였다.
계속해서 Mono, Flux에 대해 학습하고 인증 과정까지 구현해보자.