https://github.com/Spaces-Place/space-place-payment/blob/dev/routers/payment_kafka.py
<aside> 💡
카카오 페이 결제는 준비, 요청, 승인 단계로 구성되어 있으며 카프카를 사용하지 않았을 때 각 서비스들의 호출이 많아지는 점을 주목하자
</aside>
카프카 없이 REST API로만 통신한다면, 결제가 끝난 후 예약 서비스에 알려주기 위해 예약 서버의 주소를 직접 알아야 하고, 예약 서버가 점검 중이면 결제도 실패하게 된다.
카프카를 사용하게 된다면 결제 서비스는 결제가 완료되었다는 메시지를 카프카에 보내기만 하면 된다.
시스템 중 하나가 장애일 경우 데이터가 유실되지 않는다.
결제가 완료되었다는 메시지를 카프카에 보내면 해당 메시지는 카프카에 저장되어 있고, 장애가 복구되면 못 읽은 부분부터 다시 데이터를 읽어 처리하게 된다.
트래픽이 갑자기 몰려 어느 한 서비스가 폭주하여 서버가 감당할 수 없을 때 사용자의 요청은 실패하게 된다.
이때 카프카를 사용하면, 중간에서 버퍼 역할을 하게 되어 요청이 몰려도 카프카에 쌓아두고, 서버들이 차례대로 처리하기 때문에 전체 시스템이 장애가 일어나는 일을 막아준다.
크게 달라진 점은 없지만, 결제 승인이 되었을 때 reservation.payment 토픽에 결제 승인이 완료되었다는 메시지를 발송하고 해당 토픽을 구독하는 소비자는 해당 메시지를 읽어 예약 상태를 업데이트 하게 된다.
<aside> 💡
예약 → 결제 준비 과정도 카프카를 사용할 수 있었으나 시간 관계상 해당 과정은 API 호출로 대신했다. (실제로는 카프카를 사용하여 서비스간의 결합도를 늦추는 게 좋다)
</aside>
