inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

재고 감소와 쿠폰 발급은 왜 서로 다른 방식으로 동시성을 제어하나요?

해결된 질문

55

차니

작성한 질문수 13

0

강사님 안녕하세요, 좋은 강의 여러번 반복해서 잘 듣고 있습니다.

재고 감소와 비교했을때 차이점이 궁금하여 문의드립니다.


안녕하세요 강사님 이전 재고 관리 강의와 차이에 대해 궁금합니다.


이전 질문을 참고하였으나 추가로 더 궁금한게 있어서 문의드립니다.

재고 감소와 쿠폰 발급의 차이점이 너무 헷갈려서 정리하고 있습니다.


두 경우 모두 한정된 수량을 여러 요청이 동시에 차지한다는 점에서는 비슷해 보입니다. 그렇다면 쿠폰도 이벤트 테이블에 잔여 수량을 100개나 300개로 설정하고, 재고처럼 수량을 차감한 뒤 사용자 쿠폰을 생성하는 방식으로 구현할 수 있지 않을까요?


강의에서는 쿠폰 발급의 정합성을 위해서 전체 로직에 락을 걸 필요가 없다고 하셨는데, 그러면 반대로 재고 감소 같은 경우도 마찬가지로 재고 감소의 정합성을 위해 전체로직에 락을 걸 필요 없이 다른 방법으로 하는게 더 나은 방법 아닌가요??


비슷해 보이는 한정 수량 문제를 서로 다르게 푼 이유를 잘 모르겠습니다 ㅠㅠ


java docker spring-boot kafka redis

답변 2

0

차니

이해되었습니다! 답변 감사드립니다!

0

최상용

차니님 안녕하세요.
질문주셔서 감사합니다.

Q1. 두 경우 모두 한정된 수량을 여러 요청이 동시에 차지한다는 점에서는 비슷해 보입니다. 그렇다면 쿠폰도 이벤트 테이블에 잔여 수량을 100개나 300개로 설정하고, 재고처럼 수량을 차감한 뒤 사용자 쿠폰을 생성하는 방식으로 구현할 수 있지 않을까요?

A1. 말씀하신것처럼 쿠폰도 이벤트 테이블에 잔여수량을 설정한 후 락을 재고처럼 수량을 차감한 뒤 사용자쿠폰을 생성하는 방식으로 구현할 수 있습니다.

이 강의에서 redis 를 통해 제어하고 kafka 를 활용한 이벤트방식을 사용한것은 아래와 같은 이유입니다.

"선착순 이벤트" 특성상 짧은순간에 많은 트래픽이 몰리게됩니다.

  1. 이벤트 테이블에 잔여수량을 설정한 후 락을 재고처럼 수량을 차감한 뒤 사용자쿠폰을 생성하는 방식을 사용할 수 있겠지만 디비의 처리속도보다 redis 의 처리속도가 빠르며 단순히 개수만 처리하면 되기에 redis 를 사용하는것이 합리적이라고 판단하였습니다.

  2. server 에서 바로 쿠폰을 생성할 수 있겠으나 많은 쓰기트래픽이 한번에 몰리게 되면 데이터베이스에 부하를 줄 수 있습니다. "선착순 이벤트" 는 발급이 되는것은 중요하지만 약간의 딜레이는 있어도 된다고 생각하여 kafka 를 활용하였습니다.
    kafka 를 통해 자연스럽게 처리량을 조절할 수 있게되며 오류발생시에도 재처리를 쉽게 보장할 수 있습니다.

"짧은 시간 에 몰릴 수 있는 트래픽" 에 대응하기 위하여 이러한 방법을 선택하였다고 생각해주시면 좋을 것 같습니다.


Q2. 강의에서는 쿠폰 발급의 정합성을 위해서 전체 로직에 락을 걸 필요가 없다고 하셨는데, 그러면 반대로 재고 감소 같은 경우도 마찬가지로 재고 감소의 정합성을 위해 전체로직에 락을 걸 필요 없이 다른 방법으로 하는게 더 나은 방법 아닌가요??

A2. 재고같은경우는 성능을 일부포기하더라도 "강한 정합성" 을 보장하는것이 더 중요한 도메인입니다.
그렇기때문에 정합성을 보장하기 위한 락은 필수적이라고 생각됩니다.
이 강의에서 쿠폰 발급의 정합성을 위해 전체로직에 락을 걸 필요가 없다는것은 redis 를 활용하여 개수를 체크함으로써 정합성을 보장할 수 있기때문입니다.


설명이 부족했거나 추가적인 질문이 있으시다면 언제든 질문 주세용!

감사합니다.

ApplyService와 Consumer서비스의 db공유?

0

97

2

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

0

103

1

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

0

127

2

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

0

105

2

안되서 스트레스 받아요

-3

140

2

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

0

216

2

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

0

237

1

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

0

203

2

키생성 방식에 따른 성능

0

200

2

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

0

161

2

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

0

235

1

쿠폰 발급 개수 제한

0

213

2

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

0

172

1

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

0

259

2

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

0

309

2

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

0

327

1

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

0

331

2

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

0

272

2

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

0

429

2

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

0

428

1

도커 환경설정에 대해서

0

297

2

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

0

639

1

consumer 모듈

0

358

2

카프카 토픽 생성오류

0

421

2