인프런 커뮤니티 질문&답변

Calice님의 프로필 이미지
Calice

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Kafka를 활용한 데이터 동기화 테스트 ②

Kafka 동기화 문제에 대해 질문이 있습니다.

작성

·

457

·

수정됨

1

항상 좋은 강의 감사합니다. 궁금한 점이 있어 질문을 남깁니다.

 

Kafka를 이용해서 멀티 서버에서 하나의 DB를 사용하여 동시성 문제를 해결하는 것을 이해했습니다.

 

상품 제고가 0이 되면 더 이상 주문을 못하도록 하게 하고 싶습니다. 하지만 Kafka 요청을 통해 비동기로 주문을 하기 때문에 주문을 신청한 순간에는 재고가 있어 주문이 되었지만 Kafka의 모든 처리를 하고 나니 재고가 0이 되어 사실 주문할 수 없는 상황이었습니다. 이런 상황이 발생할 수도 있지 않나요??

이럴 때는 어떻게 대처를 해야 하나요??

쓰기 작업과 읽기 작업에서 동기화 문제는 어떻게 처리할 수 있나요?


답변 1

1

안녕하세요, 인프런 AI 인턴이에요. Kafka를 이용한 동기화 문제에 대한 질문이시네요.

Kafka는 비동기식 메시징 시스템으로, 메시지가 전송되는 시점과 수신되는 시점이 다를 수 있습니다. 이로 인해 주문을 신청한 시점에는 재고가 충분하지만, 실제 처리가 완료되는 순간에는 재고가 0이 되었다는 상황이 발생할 수 있습니다.

이러한 상황에 대처하기 위해서는 다음과 같은 방법들을 고려할 수 있습니다:

  1. 트랜잭션 처리: Kafka에서 데이터를 송수신할 때, Kafka의 트랜잭션을 사용하여 데이터의 일관성을 보장할 수 있습니다. 주문을 신청할 때와 재고를 업데이트할 때 동일한 트랜잭션에 포함시켜서 처리하면 재고가 0인 상황을 방지할 수 있습니다.

  2. 상태 체크: 주문을 처리하기 전에, 주문을 신청한 시점에서 재고의 상태를 확인하는 과정을 추가할 수 있습니다. 주문 요청을 받은 서버에서 재고를 조회하여, 0보다 큰지 먼저 확인한 뒤에 주문을 처리하도록 구현합니다.

  3. 예외 처리: 재고가 0인 상황이 발생했을 때, 예외를 발생시켜서 주문을 거부하는 방법을 선택할 수도 있습니다. 이 경우, 예외를 정확히 처리하고 클라이언트에게 적절한 알림을 제공해야 합니다.

물론 이러한 방법들은 상황에 따라 다를 수 있으며, 어떤 방법을 선택하느냐에 따라 구현 방법이 달라질 수 있습니다. 비동기 처리에서의 동기화 문제는 제대로 처리되지 않으면 예기치 않은 문제를 발생시킬 수 있으므로, 여러 측면을 고려하여 처리해야 합니다.

더 자세한 내용이나 실제 구현 방법에 대해서는 Kafka의 공식 문서나 관련 자료를 참고하시는 것을 권장드립니다. 많은 도움이 되길 바라요. 좋은 하루 되세요!

Calice님의 프로필 이미지
Calice

작성한 질문수

질문하기