inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

발급가능한 쿠폰개수를 1인당 1개로 제한하기

발급가능 쿠폰개수가 1인당 2개이상일 때

920

류건희

작성한 질문수 4

2

안녕하세요! 강의 재미있고 유익하게 잘 듣고 있습니다 :)

확장에 대해 생각해보니, Set을 이용해서는 중복방지 이상 개수 확장에 대해서 처리는 불가능 할 거 같아서요.

혹시, 2개 이상 N개 제한에 대한 확장 방법은 어떤게 있을까요??

감사합니다!

java docker spring-boot kafka redis

답변 2

1

최상용

류건희님 안녕하세요.
2개 이상 N 개 제한이 필요하다면 유저의 id 를 key 로 잡고 분산락을 구현하여 정합성을 보장할 것 같습니다.
류건희님 말씀대로 Set 을 이용해서는 N 개 이상의 제한이 안되기때문입니다.

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

쿠폰 개수를 제한해야하는 경우에는 Set 자료구조보다는 다른 자료구조를 사용하는 것이 좋을 수 있습니다. Set은 중복된 값을 허용하지 않기 때문에 한 사용자당 2개 이상의 쿠폰을 발급하는 경우에는 Set 자체로는 처리가 어려울 수 있어요.

그래서 대안으로는 리스트나 딕셔너리를 사용할 수 있어요. 이들 자료구조를 사용하면 개수를 제한할 수 있고, 중복 값도 허용할 수 있어요.

예를 들어, 리스트를 사용해서 한 사용자가 발급받을 수 있는 쿠폰 개수를 제한하는 방법은 다음과 같이 구현할 수 있어요.

  1. 리스트를 선언하고 초기값으로 한 사용자당 최대 발급 가능한 쿠폰 개수인 N을 저장합니다.
  2. 쿠폰을 발급할 때마다 해당 사용자의 리스트 값을 1씩 감소시킵니다.
  3. 감소된 값이 0보다 작거나 같으면 더 이상 쿠폰을 발급할 수 없다는 의미입니다.

딕셔너리를 사용하는 경우에는 사용자 별로 발급받은 쿠폰 개수를 관리하는 방식으로 처리할 수 있어요. 예를 들어, 각 사용자를 키로 가지고 그 값을 쿠폰 개수로 설정한 딕셔너리를 선언하고, 쿠폰을 발급할 때마다 해당 사용자의 값에 1을 더해주면 됩니다. 그리고 2 이상인 경우에만 쿠폰 발급 가능하도록 조건문을 추가하면 되겠죠.

이렇게 리스트나 딕셔너리를 활용해서 한 사용자당 2개 이상 N개 제한을 구현할 수 있습니다. 원하시는 방식에 맞게 선택해서 사용하시면 될 것 같아요. 개발에 참고가 되셨길 바랍니다. 감사합니다!

ApplyService와 Consumer서비스의 db공유?

0

56

2

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

0

77

1

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

0

86

2

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

0

73

2

안되서 스트레스 받아요

-2

111

2

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

0

185

2

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

0

213

1

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

0

167

2

키생성 방식에 따른 성능

0

168

2

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

0

135

2

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

0

210

1

쿠폰 발급 개수 제한

0

184

2

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

0

154

1

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

0

224

2

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

0

276

2

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

0

295

1

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

0

308

2

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

0

231

2

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

0

398

2

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

0

384

1

도커 환경설정에 대해서

0

269

2

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

0

599

1

consumer 모듈

0

322

2

카프카 토픽 생성오류

0

384

2