inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Xây dựng hệ thống thanh toán vững chắc

Xây dựng Dịch vụ Ví

wallet service 구축에서 중복메시지 검증 로직이 필요한지 궁금합니다

295

muyaho

2 câu hỏi đã được viết

0

enable.idempotence = true 로 설정 시 카프카에 중복 메시지를 발행하는 producer는 없을것 같은데 중복으로 전송하는 producer가 있을 수 있다고 가정하고 작성하는 로직일까요?

spring spring-boot dbms/rdbms backend payments

Câu trả lời 2

0

muyaho

말씀하신 답변 이해했습니다 카프카 트랜잭션을 적용하지 않는다면 중복 메시지가 존재할 가능성이 있겟네요. 감사합니다~

0

yjm9505168574

안녕하세요~ 질문 남겨주셔서 감사합니다.

 

카프카 프로듀서에서 enable.idempotence=true 설정을 한다면 멱등성 프로듀서가 되서 중복 메시지는 발행안되는 건 맞습니다.

 

멱등성 프로듀서의 중복 메시지 제거 기법은 프로듀서 ID 와 메시지 Sequence Number 를 통해 중복을 제거하는데요.

 

중요한 건 프로듀서 어플리케이션이 새롭게 시작하는 경우 똑같은 프로듀서 ID 를 재발급 받을 수 없다는거에요.

 

그래서 이건 해당 프로듀서 어플리케이션이 살아있는 세션 내에서만 메시지 발행이 중복이 되지 않습니다.

 

만약 멱등성 프로듀서 어플리케이션이 메시지를 보내다가 죽은 경우, 다시 재부팅되서 메시지를 보내는 경우에는 두 개의 메시지가 전송되는 케이스는 존재하는거죠.

 

그래서 엄격하게 메시지 발행을 하나로만 보장하려면 카프카 트랜잭션을 사용해야하는거죠.

 

물론 현재 저희 어플리케이션에서는 Payment Service 가 트랜잭셔널 아웃박스 패턴으로 메시지를 하나만 발행하고 있기 때문에 메시지는 여러건 발행되지 않으므로 의미는 없긴합니다.

 

그리고 여담이긴 하지만 저 같은 경우는 일관성이 엄격하게 중요한 어플리케이션에서 하나만 믿고 로직을 작성하기 보다는 불확실한 것들이 있는 경우에는 여러가지 케이스를 고려해서 2차까지 방어 로직을 작성하는 것을 선호합니다.

 

도움이 되셨으면 좋겠네요.

 

감사합니다.

프로그램 아키텍쳐

0

60

1

실습코드 압축해제

0

78

1

confirm 로직에서 amount를 검증하는 부분에서 질문이 있습니다.

0

53

1

Transaction Demo 질문 드립니다.

0

60

1

cdc 방식

0

84

1

seed 키 및 orderId 에 대한 질문

0

65

1

결제 이후 404 Error 발생

0

167

1

테스트 코드 중 isPaymentDone 변환

0

76

1

가상의 Checkout 기능 구현 중 질문

0

183

1

docker Mysql 설정 문의

0

106

1

allOpen 설정이 잘못된 거 같습니다.

0

115

1

recovery 동시성 처리 관련 문의

0

119

1

confluent > skip 이 더이상 안되나봅니다.

0

107

1

강의 클론 코딩한 것 public repo에 올려도 되나요?

0

330

1

멱등키에 request를 넘기는 것

0

257

1

동시성 제어 (optimistic locking) 재시도 부분 질문 드립니다.

0

173

1

결제 복구의 세부 과정을 병렬로 처리한 이유가 궁금합니다

0

222

1

전체적인 헥사고날 아키텍쳐 설명

0

275

1

주문, 결제 로직에 대해서 질문이 있습니다.

0

281

1

주문 번호 생성 방식 관련 질문 있습니다

0

927

1

R2DBC 관련해서 질문 드립니다.

0

588

3

payment 상태 업데이트 변경 메서드를 3개나 두는 이유가 궁금합니다.

0

231

2

'더 견고해지기 위해 남은 작업' 수업자료

0

299

1

혹시 코드 리뷰 신청해도 될까요...?

0

311

1