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

이재윤님의 프로필 이미지

작성한 질문수

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

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

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

24.08.22 15:17 작성

·

58

0

안녕하세요! 먼저 강의 잘 들었습니다. 좋은 강의 만들어주셔서 감사합니다.

 

해당 강의에서 쿠폰 수량 조절을 Redis로 진행을 하는데 이에 대해 근본적으로 궁금한 점과 전체적으로 제가 이해한 것이 맞는지 여쭙고 싶습니다.

 

  1. 쿠폰 재고의 동시성을 싱글스레드 기반인 Redis를 통해 100개까지 생성해준다. -> 여기서 X-lock을 사용하는 비관적락을 사용해도 문제가 없지 않나요? Redis를 사용했을 때 장점은 직접적인 DB락을 걸지 않아 데드락이나 다른 위험을 방지할 수 있다는 것인가요?(강의에는 해당되지 않지만) 동시성 제어를 위해 비관적락, 낙관적락(x), Redis를 통한 수량제어 이렇게 해볼 수 있을 거 같은데 언제 Redis를 선택할지 감이 잘 오지 않습니다.


  2. 강의에서 DB에 10,000개가 들어와서 서버 사용률이 높아졌는데, 결국 카프카로 보내 컨슈머들이 처리를 하게 된다면 똑같이 DB에는 10,000개의 부하가 오지 않나요? 단지 흐름 제어용이라고 보면 될까요? (카프카가 익숙하지 않습니다.)

  3. 쿠폰의 재고가 아닌 만약 사용자가 상품을 구매할 때에도 해당 강의에 내용을 적용해볼 수 있을 것 같습니다.
    상품 구매할 때 중복 구매를 방지한다고 하면 Redis에 Set 키 값으로 [product:1(pid):member:1] 이런식으로 하면 마찬가지로 실수로 같은 사용자의 중복 결제도 막아볼 수 있을 것 같습니다! (의도라면 시간을 같이 넣어 조절해도 될 거 같아요) 잘 이해한게 맞을까요?

답변 2

0

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

2024. 08. 25. 20:11

이재윤님 안녕하세요.
1. X-lock 을 비관적으로 사용하고자 하려면 쿠폰의 개수에 대한 row 가 이미 존재해야 사용할 수 있습니다.
낙관적락도 동일합니다. redis 를 사용하면 row 가 존재하지 않더라도 사용할 수 있다는 장점이 있습니다.
속도가 굉장히 빠르다는 장점도 존재합니다.

  1. 부하를 분산시킬 수 있습니다. 중간에 카프카를 두지 않았다면 10000개의 요청이 바로 DB 로 가게 됩니다. 중간에 카프카를 일정 개수가 완료된 이후 요청을 보낼 수 있습니다.
    이에 대해서는 카프카가 어떻게 동작하는지를 공부해보시면 도움되실것 같습니다.

  2. 활용의 방법은 다양하지만 일부 상품에 한하여 중복구매를 방지하고자 한다면 말씀해주신 방법도 가능할 것 같습니다.

감사합니다.
다른 질문이 있으시다면 질문 남겨주세용!

0

인프런 AI 인턴님의 프로필 이미지

2024. 08. 24. 15:21

안녕하세요, 인프런 AI 인턴입니다.

강의와 관련된 깊이 있는 질문 주셔서 감사합니다. 강의 내용에 대한 질문에 대해서는 직접 강사님께 더 자세한 답변을 요청하는 것이 좋을 것 같아요. 수강 전 문의 게시판을 통해 강사님께 연락을 시도해 보는 것을 추천드립니다.

질문하신 내용에 대해 제한적으로 답변드립니다:

  1. Redis를 사용하는 주된 이유 중 하나는 높은 성능과 동시성 제어를 위해서입니다. 비관적 락을 사용할 경우, 데이터베이스 레벨에서 락을 걸게 되어 있어 시스템의 병목 현상이 발생할 가능성이 높아집니다. 반면, Redis는 메모리 기반의 데이터 저장소로 빠른 입출력이 가능하며, 싱글 스레드로 동작하기 때문에 복잡한 동시성 문제를 피할 수 있습니다. 상황에 따라 적합한 동시성 제어 방법을 선택하는 것이 중요합니다.

  2. 카프카를 사용하는 경우, 메시지 큐 시스템을 통해 비동기 처리를 할 수 있기 때문에 시스템의 부하를 분산시키는 효과가 있습니다. DB에 부하가 한 번에 몰리는 것을 방지하고, 메시지를 순차적으로 처리함으로써 시스템 전체의 안정성을 유지할 수 있습니다. 그래서 결국 DB에 10,000개의 요청이 들어가더라도 이를 효율적으로 관리할 수 있게 됩니다.

  3. 말씀하신 대로 Redis를 활용하여 사용자의 중복 구매를 방지하는 방법은 유효한 방안 중 하나입니다. 특정 키 값으로 사용자의 구매 요청을 관리하여 중복 요청을 효율적으로 필터링 할 수 있으며, 타임스탬프를 추가하여 제한 시간을 설정하는 것도 가능합니다. 이러한 접근 방식은 다양한 상황에서 유용하게 활용될 수 있습니다.

다시 한 번, 강의 내용에 대한 구체적인 부분은 직접 강사님 또는 관련 전문가에게 문의하는 것이 가장 정확한 정보를 얻는 방법이라는 점을 참고해주시기 바랍니다.