인프런 커뮤니티 질문&답변
KafkaProducer와 OrderProducer 차이
작성
·
360
1
안녕하세요.
Producer 구조 관련해서 문의드립니다.
어디선가 이해를 못하고 있는건지...
order-service에서 catalogs-service 호출할때
KafkaProducer를 만들어서 send할때 그냥 topic, orderDto만 jsonString 형식으로 보냈는데
왜 OrderProducer에서는 스키마, 필드 등 형식을 만들어서 send하는지요?
둘다 Topic에 전달하는건 같고...
차이점은 다른 서비스에 전송(catalogs-service)하냐 자신(order-service)에게 전송하냐 차이가 보이는데  결국 Topic에 전송하는거라.. 같은게 아닌가 합니다.
답변 2
3
안녕하세요, 이도원입니다.
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에 주문 정보를 업데이트하게 됩니다.
감사합니다.
0






안녕하세요, 답변을 보고 추가로 궁금한 점이 생겨서 질문드립니다.
두 가지 방식의 차이점을 저는 다음과 같이 이해했습니다.
catalog-service로의 전송
JSON으로 전송 → 애플리케이션에서 수신 → 비즈니스 로직 처리 후 DB 업데이트
order-service 동기화
스키마 기반 전송 → Kafka Connect를 통해 직접 DB 업데이트
저는 catalog-service의 경우 단순한 데이터 저장이 아니라 재고 차감, 유효성 검증 등의 비즈니스 로직이 필요하기 때문에 애플리케이션 레벨에서 처리해야 하고,
order-service의 경우는 단순한 데이터 동기화 목적이므로 Kafka Connect를 통해 직접 DB에 반영하는 방식을 선택한 것으로 이해해도 맞을까요?
그리고 이런 구분 기준이 일반적으로 비즈니스 로직의 유무에 따라 결정되는 건지도 궁금합니다.