이번 MSA 아키텍처 기반 과제를 수행함에 앞서, 단순히 기능 구현뿐 아니라 각 기능이 어떻게 상호작용하며 동작하는지를 명확히 이해하는 것이 중요하다고 생각했다.
이러한 이해의 차이는 과제 수행에서 얻어가는 것에 대해 분명 큰 영향을 미칠 것이다.
이에 과제 수행에 앞서 Spring Cloud 의 전반적인 흐름을 이해하는 시간을 가졌다.
// ==== 예시코드 === //
@FeignClient(name = "product-service")
public interface ProductClient {
@GetMapping("/product/{id}")
String getProduct(@PathVariable("id") String id);
}
위 코드를 예시로 들어 Spring cloud 의 흐름을 짚어보자면 다음과 같다.
Feign 이 porduct-service 를 호출.
Eureka 서버가 porduct-service 인스턴스 목록을 반환함
ex. product-service 의 8080, 8081, 8082 등의 인스턴스들을 나열함
Ribbon 이 로드밸런싱 알고리즘을 통해 인스턴스 목록 중 하나를 선택.
Fegin 이 선택된 인스턴스의 /product/{id} 에 대해 HTTP 요청을 함
해당 인스턴스는 응답을 반환
Feign 이 클라이언트에게 결과 반환
전반적으로 이러한 상호작용을 하며 동작하는 것으로 이해하였다.
막연히 어렵기만 했던 MSA 아키텍쳐였는데, 하나하나 이해한 후 전체적으로 바라보니, 비로소 감을 잡을 수 있게 되었다.
이제 이러한 기반 위에서 과제를 수행한다면 분명 좋은 결과가 있을 거라는 생각과 기대감이 든다.