Ledger 및 Wallet 서비스에서 Kafka Consumer PaymentEventMessageHandler 에 typecast 문제가 발생됩니다.

@Bean
public Consumer<Message<PaymentEventMessage>> consume() {
return message -> {
PaymentEventMessage payload = message.getPayload();
LedgerEventMessage ledgerEventMessage = doubleLedgerEntryRecordUseCase.recordDoubleLedgerEntry(message.getPayload());
streamBridge.send("ledger", ledgerEventMessage);
};
}
해당 로직은 Ledger 서비스의 Kafka 메시지 Consumer 역할을 맡고 있는 'consume' 메소드 입니다.
정상적으로 결제 confirm 완료가 되면 Kafka 에 메시지를 정상적으로 등록 된 것을 확인 하였는데요.
이 후 consumer 에서 메시지를 잘 가지고 오지만 byte[] 타입이라 PaymentEventMessage 로 타입캐스트 하는데 문제가 발생되네요..


Kafka 설정에서 Deserialize 설정만 해주면 되는 느낌인데... 구글링 해봐도... 잘 안되어서 이렇게 질문 드립니다!

에러 문구
class [B cannot be cast to class com.example.ledgerservice.ledger.domain.PaymentEventMessage ([B is in module java.base of loader 'bootstrap'; com.example.ledgerservice.ledger.domain.PaymentEventMessage is in unnamed module of loader 'app')
Answer 1
0
안녕하세요~ 질문 남겨주셔서 감사합니다.
저도 이전에 이런 에러를 본 적이 있는데 직렬화 과정에서 에러가 나는 것 같아요. Spring MVC 의존성을 넣어주시면 될 것 같은데 한번 추가해 보실래요?
Spring MVC 에 직렬화/역직렬화에 필요한 의존성이 들어가 있어서 이걸 추가하면 될 것 같습니다.
한번 추가해 보시고 안되면 말씀해 주세요~
0
안녕하세요 답변 감사합니다!

기존에는
implementation 'org.springframework.boot:spring-boot-starter-web'추가한 상태에서 문제가 있었고
혹시 몰라서
implementation("org.springframework:spring-webmvc")이 부분도 추가 해서 다시 한번 TEST 해보았지만 다시 동일한 문제가 발생되네요 ㅠ,ㅠ
0
앗 안되시나보네요. 혹시 제가 따로 코드를 실행해 볼 수 있도록 git 레파지토리 있으실까요? 중요한 시크릿 정보들은 제외해서 레파지토리 링크 주시면 제가 따로 해보고 연락드릴게요~
1
안녕하세요~ 살펴보니까 아래와 같이 PaymentEventMessage 에 기본 생성자가 없어서 역직렬화에 실패하고 있었어요. 이거 추가하시면 잘 될겁니다.
기본 생성자가 필요한 이유는 Jackson이 객체를 역직렬화할 때 자바의 리플렉션(Reflection)을 사용하여 객체를 생성하고, 이후에 각 필드에 값을 설정하기 때문이에요.
(리플렉션(Reflection)은 프로그램이 실행 중에 클래스, 메소드, 필드, 인터페이스 등을 동적으로 조사하고 수정할 수 있는 메커니즘을 말해요.)
기본 생성자를 추가하는 방법 이외에도 Jackson 애노테이션을 추가하는 방법도 있으니 찾아보시면 나올거에요~
이것 때문에 강의 진도도 못 나가셨을 것 같아요.. 고생하셨습니다.

프로그램 아키텍쳐
0
60
1
실습코드 압축해제
0
77
1
confirm 로직에서 amount를 검증하는 부분에서 질문이 있습니다.
0
52
1
Transaction Demo 질문 드립니다.
0
59
1
cdc 방식
0
81
1
seed 키 및 orderId 에 대한 질문
0
64
1
결제 이후 404 Error 발생
0
160
1
테스트 코드 중 isPaymentDone 변환
0
75
1
가상의 Checkout 기능 구현 중 질문
0
183
1
docker Mysql 설정 문의
0
105
1
allOpen 설정이 잘못된 거 같습니다.
0
114
1
recovery 동시성 처리 관련 문의
0
117
1
confluent > skip 이 더이상 안되나봅니다.
0
106
1
강의 클론 코딩한 것 public repo에 올려도 되나요?
0
330
1
멱등키에 request를 넘기는 것
0
254
1
동시성 제어 (optimistic locking) 재시도 부분 질문 드립니다.
0
172
1
결제 복구의 세부 과정을 병렬로 처리한 이유가 궁금합니다
0
222
1
전체적인 헥사고날 아키텍쳐 설명
0
275
1
주문, 결제 로직에 대해서 질문이 있습니다.
0
280
1
주문 번호 생성 방식 관련 질문 있습니다
0
925
1
R2DBC 관련해서 질문 드립니다.
0
586
3
payment 상태 업데이트 변경 메서드를 3개나 두는 이유가 궁금합니다.
0
229
2
'더 견고해지기 위해 남은 작업' 수업자료
0
298
1
혹시 코드 리뷰 신청해도 될까요...?
0
310
1

