inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실습으로 배우는 선착순 이벤트 시스템

쿠폰을 발급하다가 에러가 발생하면 어떻게 하나요 ?

사용자 동선에 대한 트랜잭션 문의

134

아무도_모를_아이디

작성한 질문수 27

0

 

보통 사용자의 행동패턴은 쿠폰 발급 후 [쿠폰이 발급되었습니다]

라는 메세지 이후 쿠폰을 바로 사용합니다.

 

현재 플로우는 pub/sub을 통한 비동기이므로 사용자의 한 트랜잭션으로 처리 되지 않을 것 같은데 위와 같은 요구사항을 구현하기 위해 어떤 방법이 있을까요?

java docker spring-boot kafka redis

답변 2

0

최상용

아무도_모를_아이디님 안녕하세요.
답변이 늦어져서 죄송합니다.

말씀하신대로 실제 쿠폰발급까지 비동기이기때문에 말씀하신대로 쿠폰을 바로 사용하기는 어려울 수 있습니다.
두가지 방향이 있을 것 같습니다.

  1. 비동기이기지만 준실시간이기 때문에 특별한 상황이 아니라면 문제가 되지 않을 확률이 높습니다. 문제가 되지 않을 수 있다면 감수하고 해당 아키텍쳐를 선택할 수 있습니다.

  2. 약간의 딜레이가 용납되지 않는다면 서버, 데이터베이스가 받을 수 있는 요청량을 제한해서 요청을 받고 발급까지 하나의 트랜잭션에서 진행하는 방법이 있을 수 있습니다. 이를 위해서 흔히사용되는것은(유명 가수 콘서트 예매 등과같은곳에서) 순서대기열이 있습니다. 순서를 발급해준 후 순서가 됐을때 요청을 받고 해당 로직을 수행합니다.

2번 방법을 선택한다면 하나의 트랜잭션에서 수행할 수 있을것 같습니다.
감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 아무도_모를_아이디님.

사용자가 쿠폰을 발급받고 즉시 사용하려는 시나리오를 다루기 위해서는, 비동기적 시스템에서 동기적 동작을 보장할 수 있는 몇 가지 방법을 고려할 수 있습니다.

  1. 트랜잭션 매니저 사용: 메시징 큐 혹은 이벤트 버스를 사용할 때, 트랜잭션 관리가 가능한 메시지 프로세싱 서비스를 사용하는 것이 하나의 방법입니다. 이러한 서비스는 메시지의 시작부터 끝까지 전체 트랜잭션을 관리하여 데이터의 일관성을 유지할 수 있습니다.

  2. 쿠폰 상태 관리: 쿠폰 발급 후 발급 상태를 유지하고 관리하는 방법도 고려할 수 있습니다. 예를 들어, 쿠폰 발급 요청을 큐에 넣으면서 동시에 쿠폰이 발급된 것으로 간주하고, 발급 여부를 고객에게 반환합니다. 사용자가 실제 사용을 시도할 때 서버에서 발급 프로세스가 완료되었는지 확인한 후 사용을 허가하는 방식입니다.

  3. 잠금 메커니즘: 동시에 발급 및 사용 요청이 처리되지 않도록, 데이터베이스 상에서 잠금 메커니즘을 사용하는 것도 고려할 수 있습니다. 이를 통해 한 사용자가 쿠폰을 발급받고 사용하는 동안 다른 사용자의 요청을 일정 시간 지연시킬 수 있습니다.

이와 같은 방법들을 고려하면서, 시스템의 성능과 사용자 경험 사이에서 균형을 맞출 필요가 있습니다. 이에 대해 더욱 구체적인 방법과 고민을 공유하고 싶다면, 해당 강의의 유사한 질문과 답변을 참조하시기 바랍니다. 이 링크에서는 쿠폰 발급 기능을 다루며, 쿠폰 발급 여부와 관련된 API 설계 방식에 대한 논의가 담겨있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ApplyService와 Consumer서비스의 db공유?

0

54

2

consumer가 topic을 전부 사용하기 전에 사용자에게는 쿠폰이 발급된것으로 확인하는 과정에서 발생가능한 문제.

0

72

1

쿠폰에 관련되어서 좀 더 참고할만한 자료가 있을까요?

0

83

2

흐름정리 제가 이해한게 맞나요?

0

70

2

안되서 스트레스 받아요

-2

108

2

프로젝트 진행할때 모듈로 추가하는 이유가 궁금합니다!

0

181

2

Redis 활용하기 문제점 해결하기 부분이 이해가 잘 안됩니다...

0

212

1

카프카를 도입하고 난 뒤 로그로 보여지는 장점을 발견하지 못하고 있습니다.

0

167

2

키생성 방식에 따른 성능

0

165

2

강사님 강의를 듣고 실제 프로젝트에서 이벤트 응모 시스템을 만들어 봤습니다.

0

209

1

쿠폰 발급 개수 제한

0

181

2

ApplyService 의 총 처리 시간이 궁금합니다.

0

154

1

쿠폰 생성 에러 처리에 관해서 질문이 있습니다.

0

223

2

마지막에 하신 테스트 자체는 실패하는 게 맞는거죠??

0

274

2

안녕하세요 질문 있습니다!

0

293

1

쿠폰 발급 유저 흐름에 대한 질문

0

306

2

수량 조절에 대한 질문이 있습니다.

0

230

2

kafka Producer 실행 중 에러 시 redis count 정합성 이슈

0

398

2

test 과정에서 오류가 발생합니다.

0

381

1

도커 환경설정에 대해서

0

267

2

Redis의 INCR 사용 해도 Race condition이 잡히지 않는 문제

0

593

1

consumer 모듈

0

321

2

카프카 토픽 생성오류

0

380

2

redis 를 사용하여 문제점 해결하기

0

370

2