MSA 프로젝트를 진행하다 보니 마이크로서비스간 통신을 할 때에 Feign Client 과 Kafka 중 어떤 것을 적용해야 하는지 고민 생겼다.
둘다 마이크로서비스 간의 통신은 잘 해주지만, 이 둘의 어디에 적용해야 목적에 알맞게 사용하는 것인지 헷갈렸다.
우선 내가 찾아 본 결과..
💡 Feign Client
Feign Client는 마이크로 서비스간의 통신을 추상화 시켜놓은 객체이다.
마이크로서비스 간의 통신을 위해 다른 서비스의 주소나 포트 등의 정보를 직접 입력하지 않고, 서비스의 이름(아이디)를 이용하여 통신할 수 있도록 해준다.
💡 Kafka
Kafka는 마이크로서비스간의 통신을 처리한다기 보다 데이터를 Kafka의 저장소(Topic)에 순차적으로 저장해 주는 목적을 가지고 있다.
정리
Spring Boot + Spring Cloud로 작성된 마이크로서비스 간의 통신을 위해 RestTemplate 또는 Feign Client를 사용한다.
그 외 데이터나 이벤트 등과 같은 다양한 정보를 다른 서비스나 애플리케이션에서 사용하기 위해서 저장하고 가져오는 기술을 위해서 Kafka를 사용한다.
📌 kafka 활용 이벤트
주문 이벤트: 온라인 상점에서 주문이 발생할 때, 주문 이벤트를 Kafka에 게시할 수 있습니다. 이 이벤트는 주문 관리 서비스, 재고 관리 서비스, 배송 서비스 등과 같은 다른 마이크로서비스에 전달되어 처리될 수 있습니다.
로그 이벤트: 애플리케이션의 로그를 Kafka에 게시하여 중앙 집중식 로깅 시스템에 전달할 수 있습니다. 이를 통해 분산된 시스템에서 로그를 효율적으로 관리하고 모니터링할 수 있습니다.
사용자 행동 이벤트: 사용자가 애플리케이션을 사용하는 동안 발생하는 다양한 이벤트(로그인, 클릭, 검색 등)를 Kafka에 게시하여 사용자 행동을 분석하거나 개인화된 서비스를 제공하는 데 사용할 수 있습니다.
시스템 알림: 시스템의 중요한 상태 변화나 경고 메시지와 같은 알림을 Kafka에 게시하여 다른 시스템이나 관리자에게 전달할 수 있습니다.
데이터 변경 이벤트: 데이터베이스나 외부 시스템의 데이터 변경을 감지하여 Kafka에 이벤트를 게시할 수 있습니다. 이를 통해 데이터 동기화나 분산된 데이터 처리를 수행할 수 있습니다.
어떻게 활용?
Feign Client
- 마이크로 서비스 간의 통신은 Feign Client,
- 예를들어 주문내역 보여주기
Kafka
- 예를 들어, 주문 발생 내용 보내주기
- 구독, 사용자 행동 이벤트
조금 더 구체적으로 알아보자.
주문 관리 서비스
Feign Client: 주문이 발생하면 주문 관리 서비스는 재고 관리 서비스의 API를 호출하여 해당 제품의 재고를 확인한다.
이를 통해 주문을 처리하기 전에 제품의 재고 여부를 확인할 수 있다.
Kafka: 주문이 생성되면 주문 관리 서비스는 Kafka에 주문 생성 이벤트를 발행한다.
다른 서비스들은 해당 이벤트를 구독하여 필요한 처리를 수행할 수 있다.
예를 들어, 재고 관리 서비스는 주문 생성 이벤트를 수신하여 해당 제품의 재고를 차감할 수 있다.
재고 관리 서비스
Feign Client: 재고 관리 서비스는 배송 서비스의 API를 호출하여 주문된 상품의 배송 상태를 확인할 수 있다.
이를 통해 배송이 완료되면 해당 제품의 재고를 증가시킬 수 있다.
Kafka: 주문 관리 서비스에서 주문 생성 이벤트를 수신하면 재고 관리 서비스는 해당 제품의 재고를 차감한다.
그 후 배송 서비스는 배송 완료 이벤트를 Kafka에 발행하여 재고 관리 서비스가 해당 제품의 재고를 다시 증가시킬 수 있도록 한다.
배송 서비스
Feign Client: 배송 서비스는 주문 관리 서비스의 API를 호출하여 주문의 상태를 업데이트한다. 주문이 배송되면 배송 서비스는 해당 주문의 상태를 "배송 중"으로 변경할 수 있다.
Kafka: 배송 서비스는 주문 완료 이벤트를 Kafka에 발행하여 다른 서비스들이 해당 이벤트를 수신하고 필요한 처리를 수행할 수 있도록 한다.
참고링크
'Project > Collabo Project' 카테고리의 다른 글
[Villion] 찜한 상품 폴더 만들기(Gson 사용) (0) | 2024.06.25 |
---|---|
[Villion] Docker를 실행 할 때 데이터 넣기 (0) | 2024.05.30 |
[동물전쟁] 아이템 합성 서비스(Kafka 사용) (1) | 2023.11.09 |
[동물전쟁] Socket으로 전체 공개 채팅 만들기(MySQL저장) (0) | 2023.10.22 |
[동물전쟁] Socket에 Token받아오기 (0) | 2023.10.22 |