주문이 생성될 때 결제와 재고 감소는 중요한 비즈니스 로직입니다. 하지만 이 과정에서 각 서비스가 동시에 처리될 필요는 없으며, 비동기 처리가 더 나은 사용자 경험을 제공할 수 있다고 판단했습니다.
1. 동기적 처리의 문제점
동기적인 처리 방식에서는 서비스 간 강한 결합이 발생하며, 주문 생성 후 결제와 재고 감소가 즉시 완료되어야 합니다. 하지만 이로 인해 다음과 같은 문제들이 발생할 수 있습니다.
- 외부 시스템 통신의 지연: 결제 과정에서 외부 결제 시스템과 통신이 필요하기 때문에 지연 시간이 길어질 수 있습니다.
- 예외 상황 처리: 결제 실패 등의 예외 상황이 발생할 경우, 전체 프로세스가 중단될 수 있습니다.
- 결제가 성공한 후 재고 감소 과정에서 재고 부족이 발생하거나 동시성 문제로 인해 재고 감소가 실패하면, 결제를 취소하고 고객에게 환불해야 합니다.
- 적절한 예외 처리가 없다면 사용자는 오류 메시지를 보게 됩니다.
- 이 과정에서 이미 완료된 결제를 취소하는 작업 역시 복잡할 수 있으며, 특히 외부 결제 시스템과의 연동이 필요한 경우 시간 지연이 추가로 발생합니다.
- 재고 감소의 병목: 여러 개의 상품을 처리해야 하는 경우 재고 감소 과정에서 동시성 문제와 병목 현상이 생길 수 있습니다.
2. Kafka 선택의 이유
이러한 문제를 해결하기 위해, 우리는 Kafka를 도입해 비동기적인 메시지 기반 아키텍처를 구현했습니다. Kafka를 선택하게 된 이유는 다음과 같습니다.
- 비동기 처리 지원: Kafka는 서비스 간 느슨한 결합을 통해 비동기 처리가 가능합니다. 주문이 생성되면 결제와 재고 감소를 각각 독립적인 이벤트로 처리할 수 있어 각 서비스가 별도로 작업을 완료할 수 있습니다.
- 높은 확장성: Kafka는 대규모 데이터를 처리할 수 있는 높은 확장성을 제공해 동시다발적인 주문에도 문제없이 대응할 수 있습니다.
- 메시지 저장 및 장애 복구: Kafka는 메시지를 안정적으로 저장할 수 있어, 결제나 재고 감소 요청이 실패할 경우에도 메시지를 손실 없이 복구할 수 있습니다.
- 실시간 데이터 처리: Kafka는 실시간 스트리밍 처리를 지원해 빠른 주문 처리를 가능하게 합니다.
3. 비동기 처리로 인한 장점
Kafka를 도입함으로써 저희는 다음과 같은 중요한 포인트를 기대합니다.
- 독립적인 서비스 처리: 주문 처리 후 결제와 재고 감소가 비동기적으로 이루어져 병목 현상이 줄어들고, 주문이 지연 없이 처리됩니다.
- 안정적인 장애 복구: Kafka는 실패한 요청을 안전하게 재시도할 수 있으며, 메시지 손실을 방지할 수 있습니다.