https://github.com/Spaces-Place/space-place-payment/blob/dev/routers/payment_kafka.py

<aside> 💡

카카오 페이 결제는 준비, 요청, 승인 단계로 구성되어 있으며 카프카를 사용하지 않았을 때 각 서비스들의 호출이 많아지는 점을 주목하자

</aside>

스페이스 플레이스-페이지-5.drawio (1).svg

1. 결제 흐름

1.1. 기존 MSA에서의 결제 흐름(카프카 미사용)

1.2. 카프카를 사용한 MSA에서의 결제 흐름

스페이스 플레이스-카프카 카카오 결제 시나리오.drawio.png

크게 달라진 점은 없지만, 결제 승인이 되었을 때 reservation.payment 토픽에 결제 승인이 완료되었다는 메시지를 발송하고 해당 토픽을 구독하는 소비자는 해당 메시지를 읽어 예약 상태를 업데이트 하게 된다.

2. 사용 방식

우선 카프카를 메시지 큐로써 사용하게 되었다. 그리고 기존 결제 방식에서 서비스 간의 호출을 줄이기 위해 카프카를 도입하였고, 어떻게 사용할지 고민을 하게 되었다.

2.1. 사례 1

첫 번째로 생각한 전략은 각 서비스가 컨슈머이면서 프로듀서가 되는 것이다.

스페이스 플레이스-페이지-5.drawio (1).png

이렇게 되었을 때 MSA 환경에서 트랜잭션 처리가 가능하고 각 서비스를 호출하는 오버헤드를 줄이면서 일관성을 유지할 수 있다는 장점이 있었다.(토픽은 하나만 사용) 그러나 처리 중 오류가 발생했을 때 회복 로직을 구현해야 하는 과정이 필요했다.

2.2. 사례 2 (채택)

두 번째로 생각한 방법은 기존 로직은 그대로 유지하되 결제 및 예약 상태를 업데이트 하는 과정에서만 간단하게 사용하는 방법이다.

이 방법을 채택한 이유는 기존 로직에서 간단하게 추가할 수 있겠다는 생각에 채택하게 되었고, 만약 시간이 많았다면 사례 1로 개발했을 것이다.

스페이스 플레이스-페이지-5.drawio (2).png