Written on
·
23
0
보통 사용자의 행동패턴은 쿠폰 발급 후 [쿠폰이 발급되었습니다]
라는 메세지 이후 쿠폰을 바로 사용합니다.
현재 플로우는 pub/sub을 통한 비동기이므로 사용자의 한 트랜잭션으로 처리 되지 않을 것 같은데 위와 같은 요구사항을 구현하기 위해 어떤 방법이 있을까요?
Answer 2
0
아무도_모를_아이디님 안녕하세요.
답변이 늦어져서 죄송합니다.
말씀하신대로 실제 쿠폰발급까지 비동기이기때문에 말씀하신대로 쿠폰을 바로 사용하기는 어려울 수 있습니다.
두가지 방향이 있을 것 같습니다.
비동기이기지만 준실시간이기 때문에 특별한 상황이 아니라면 문제가 되지 않을 확률이 높습니다. 문제가 되지 않을 수 있다면 감수하고 해당 아키텍쳐를 선택할 수 있습니다.
약간의 딜레이가 용납되지 않는다면 서버, 데이터베이스가 받을 수 있는 요청량을 제한해서 요청을 받고 발급까지 하나의 트랜잭션에서 진행하는 방법이 있을 수 있습니다. 이를 위해서 흔히사용되는것은(유명 가수 콘서트 예매 등과같은곳에서) 순서대기열이 있습니다. 순서를 발급해준 후 순서가 됐을때 요청을 받고 해당 로직을 수행합니다.
2번 방법을 선택한다면 하나의 트랜잭션에서 수행할 수 있을것 같습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 아무도_모를_아이디님.
사용자가 쿠폰을 발급받고 즉시 사용하려는 시나리오를 다루기 위해서는, 비동기적 시스템에서 동기적 동작을 보장할 수 있는 몇 가지 방법을 고려할 수 있습니다.
트랜잭션 매니저 사용: 메시징 큐 혹은 이벤트 버스를 사용할 때, 트랜잭션 관리가 가능한 메시지 프로세싱 서비스를 사용하는 것이 하나의 방법입니다. 이러한 서비스는 메시지의 시작부터 끝까지 전체 트랜잭션을 관리하여 데이터의 일관성을 유지할 수 있습니다.
쿠폰 상태 관리: 쿠폰 발급 후 발급 상태를 유지하고 관리하는 방법도 고려할 수 있습니다. 예를 들어, 쿠폰 발급 요청을 큐에 넣으면서 동시에 쿠폰이 발급된 것으로 간주하고, 발급 여부를 고객에게 반환합니다. 사용자가 실제 사용을 시도할 때 서버에서 발급 프로세스가 완료되었는지 확인한 후 사용을 허가하는 방식입니다.
잠금 메커니즘: 동시에 발급 및 사용 요청이 처리되지 않도록, 데이터베이스 상에서 잠금 메커니즘을 사용하는 것도 고려할 수 있습니다. 이를 통해 한 사용자가 쿠폰을 발급받고 사용하는 동안 다른 사용자의 요청을 일정 시간 지연시킬 수 있습니다.
이와 같은 방법들을 고려하면서, 시스템의 성능과 사용자 경험 사이에서 균형을 맞출 필요가 있습니다. 이에 대해 더욱 구체적인 방법과 고민을 공유하고 싶다면, 해당 강의의 유사한 질문과 답변을 참조하시기 바랍니다. 이 링크에서는 쿠폰 발급 기능을 다루며, 쿠폰 발급 여부와 관련된 API 설계 방식에 대한 논의가 담겨있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.