본문 바로가기

spring cloud11

Spring Cloud - 데이터 동기화 문제 현재 마이크로 서비스간의 통신을 위해 user-service와 order-service가 나누어져 있다. 그런데 만약 order-service에 주문이 많이 들어와 order-service의 서버를 하나 늘렸다고 해보자. 이때 어떤 주문은 60001번 포트 order-service에 저장되고, 다른 주문은 60002번 order-service에 저장된다면, 유저A가 여러 번 주문했을 경우 유저A의 주문 정보는 60001:order-service, 60002:order-service에 흩어져 저장되었을 수 있다. 이것이 바로 데이터 동기화 문제이다. 하여 이러한 문제를 해결하기 위해 아예 하나의 DB만을 사용하도록 해결할 수도 있지만. 이는 수많은 트랜잭션 관리에 대한 문제가 생길 수 있다. 또 생각해볼 .. 2022. 3. 9.
Spring Cloud micro service 간의 통신 - Feign Client 이전에는 Rest Template을 사용하여 micro service 간의 통신을 해보았다. 이번에는 Spring Cloud Netfilx가 제공하는 Feign Client를 사용하여 통신을 해보자. 이 역시 REST Call을 추상화한 라이브러리이다. 이 방법은 Rest Template보다 더 직관적인 장점이 있다. 먼저 이를 사용하기 위해서는 order-service에게 요청을 보내는 user-service가 클라이언트가 되므로, feign client 의존성을 추가해주어야 한다. 본인은 gradle을 사용 중이다. 그리고 아래와 같이 main함수에 @EnableFeignClients 어노테이션을 추가해준다. import org.springframework.boot.SpringApplication; .. 2022. 3. 9.
Spring Cloud micro service 간의 통신 - Rest Template 마이크로 서비스간의 통신 방법을 동기 방식과 비동기 방식으로 나눌 수 있다. Synchronous HTTP communication - 동기 방식 Asynchronous communication over AMQP - 비동기 방식 먼저 동기 방식을 사용하는 Rest Template을 사용하여 micro service 간의 통신을 구현해보자. 그림으로 보면 아래와 같다. 특정 유저가 자신에 대한 정보를 조회하고 싶을 때, 서버에서 해당 유저가 주문한 목록들도 같이 보여주고 싶다고 하자. 이때 특정 유저가 주문한 주문 목록은 user-service가 아닌 order-service에 의해 수행된다. 하여 /user-service/users/{user_id}에 대한 요청이 오면 Rest Template에 의해 o.. 2022. 3. 8.
Spring Cloud Bus 이전에 spring actuator를 사용하여 config 정보를 하나의 server에 두고, 다른 micro service들이 참조하도록 하였다. 하지만 이와 같이 구현할 경우 config-server에 있는 내용이 변경될 때마다, 모든 micro service들에 대해 actuator/refresh를 해주어야 했다. 하여 이러한 문제를 해결할 수 있는 것이 Spring Cloud Bus이다. Spring Cloud Bus - 분산 시스템의 노드를 경랼 메시지 브로커(RabbitMQ)와 연결 - 상태 및 구성에 대한 변경 사항을 연결된 노드에게 전달(Broadcast) Spring cloud bus를 사용할 경우 HTTP POST /busrefresh 로 여러 micro service 중 하나만 ref.. 2022. 3. 6.