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

류건희님의 프로필 이미지

작성한 질문수

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

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

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

작성

·

764

1

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

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

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

감사합니다!

답변 2

0

최상용님의 프로필 이미지
최상용
지식공유자

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

감사합니다.

0

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

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

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

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

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

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

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