강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

hungryo님의 프로필 이미지
hungryo

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Orders Microservice 수정 - Order Kafka Producer

KafkaProducer와 OrderProducer 차이

작성

·

360

1

안녕하세요.

Producer 구조 관련해서 문의드립니다.

어디선가 이해를 못하고 있는건지...

order-service에서 catalogs-service 호출할때 

KafkaProducer를 만들어서 send할때 그냥 topic, orderDto만 jsonString 형식으로 보냈는데

왜 OrderProducer에서는 스키마, 필드 등 형식을 만들어서 send하는지요?

둘다 Topic에 전달하는건 같고...

차이점은 다른 서비스에 전송(catalogs-service)하냐 자신(order-service)에게 전송하냐 차이가 보이는데  결국 Topic에 전송하는거라.. 같은게 아닌가 합니다.

 

 

답변 2

3

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

KafkaProducer와 OrderProducer는 사용용도가 다릅니다. 먼저, order-service에서의 KafkaProducer는 catalog-service에게 주문 내역을 전달하기 위해서 사용했습니다. 단순히 제품ID, 수량, 가격 등의 정보를 Json으로 전달하였습니다. 해당 메시지를 토픽으로부터 받게 되는 catalog-service에서도 Json 데이터에 저장된 제품ID, 수랴, 가격 등의 정보를 해석해서 자신의 DB에 업데이트 했습니다. 반면에, OrderProduce의 용도의 다른 order-service간의 데이터 동기화를 위해 사용했습니다. 여러 order-service가 존재할 경우, 각각의 DB를 사용하면 주문에 대한 동기화가 이뤄지지 않기 때문에, 이러한 데이터 동기화를 위해 사용하고 있습니다. 이를 위해 Topic에 주문 정보를 저장하면, 자동으로 DB에 반영해 줄 수 있도록 Kafka Connect도 설정하였습니다. Topic에 저장된 메시지가 자동으로 DB에 저장되기 위해서는 DB가 읽을 수 있는 데이터 형식이어야 하는데, 이를 위해 Payload에 주문 정보를 저장하여 토픽에 보냈습니다. Kafka Connect는 Payload의 값을 해석하여 해당 DB에 주문 정보를 업데이트하게 됩니다. 

감사합니다. 

안녕하세요, 답변을 보고 추가로 궁금한 점이 생겨서 질문드립니다.

 

두 가지 방식의 차이점을 저는 다음과 같이 이해했습니다.

catalog-service로의 전송

JSON으로 전송 → 애플리케이션에서 수신 → 비즈니스 로직 처리 후 DB 업데이트

order-service 동기화

스키마 기반 전송 → Kafka Connect를 통해 직접 DB 업데이트

 

저는 catalog-service의 경우 단순한 데이터 저장이 아니라 재고 차감, 유효성 검증 등의 비즈니스 로직이 필요하기 때문에 애플리케이션 레벨에서 처리해야 하고,

order-service의 경우는 단순한 데이터 동기화 목적이므로 Kafka Connect를 통해 직접 DB에 반영하는 방식을 선택한 것으로 이해해도 맞을까요?

 

그리고 이런 구분 기준이 일반적으로 비즈니스 로직의 유무에 따라 결정되는 건지도 궁금합니다.

0

hungryo님의 프로필 이미지
hungryo
질문자

앗 유레카~! 

 

감사합니다~!

hungryo님의 프로필 이미지
hungryo

작성한 질문수

질문하기