재고 감소와 쿠폰 발급은 왜 서로 다른 방식으로 동시성을 제어하나요?
강사님 안녕하세요, 좋은 강의 여러번 반복해서 잘 듣고 있습니다.
재고 감소와 비교했을때 차이점이 궁금하여 문의드립니다.
안녕하세요 강사님 이전 재고 관리 강의와 차이에 대해 궁금합니다.
이전 질문을 참고하였으나 추가로 더 궁금한게 있어서 문의드립니다.
재고 감소와 쿠폰 발급의 차이점이 너무 헷갈려서 정리하고 있습니다.
두 경우 모두 한정된 수량을 여러 요청이 동시에 차지한다는 점에서는 비슷해 보입니다. 그렇다면 쿠폰도 이벤트 테이블에 잔여 수량을 100개나 300개로 설정하고, 재고처럼 수량을 차감한 뒤 사용자 쿠폰을 생성하는 방식으로 구현할 수 있지 않을까요?
강의에서는 쿠폰 발급의 정합성을 위해서 전체 로직에 락을 걸 필요가 없다고 하셨는데, 그러면 반대로 재고 감소 같은 경우도 마찬가지로 재고 감소의 정합성을 위해 전체로직에 락을 걸 필요 없이 다른 방법으로 하는게 더 나은 방법 아닌가요??
비슷해 보이는 한정 수량 문제를 서로 다르게 푼 이유를 잘 모르겠습니다 ㅠㅠ
답변 2
0
차니님 안녕하세요.
질문주셔서 감사합니다.
Q1. 두 경우 모두 한정된 수량을 여러 요청이 동시에 차지한다는 점에서는 비슷해 보입니다. 그렇다면 쿠폰도 이벤트 테이블에 잔여 수량을 100개나 300개로 설정하고, 재고처럼 수량을 차감한 뒤 사용자 쿠폰을 생성하는 방식으로 구현할 수 있지 않을까요?
A1. 말씀하신것처럼 쿠폰도 이벤트 테이블에 잔여수량을 설정한 후 락을 재고처럼 수량을 차감한 뒤 사용자쿠폰을 생성하는 방식으로 구현할 수 있습니다.
이 강의에서 redis 를 통해 제어하고 kafka 를 활용한 이벤트방식을 사용한것은 아래와 같은 이유입니다.
"선착순 이벤트" 특성상 짧은순간에 많은 트래픽이 몰리게됩니다.
이벤트 테이블에 잔여수량을 설정한 후 락을 재고처럼 수량을 차감한 뒤 사용자쿠폰을 생성하는 방식을 사용할 수 있겠지만 디비의 처리속도보다 redis 의 처리속도가 빠르며 단순히 개수만 처리하면 되기에 redis 를 사용하는것이 합리적이라고 판단하였습니다.
server 에서 바로 쿠폰을 생성할 수 있겠으나 많은 쓰기트래픽이 한번에 몰리게 되면 데이터베이스에 부하를 줄 수 있습니다. "선착순 이벤트" 는 발급이 되는것은 중요하지만 약간의 딜레이는 있어도 된다고 생각하여 kafka 를 활용하였습니다.
kafka 를 통해 자연스럽게 처리량을 조절할 수 있게되며 오류발생시에도 재처리를 쉽게 보장할 수 있습니다.
"짧은 시간 에 몰릴 수 있는 트래픽" 에 대응하기 위하여 이러한 방법을 선택하였다고 생각해주시면 좋을 것 같습니다.
Q2. 강의에서는 쿠폰 발급의 정합성을 위해서 전체 로직에 락을 걸 필요가 없다고 하셨는데, 그러면 반대로 재고 감소 같은 경우도 마찬가지로 재고 감소의 정합성을 위해 전체로직에 락을 걸 필요 없이 다른 방법으로 하는게 더 나은 방법 아닌가요??
A2. 재고같은경우는 성능을 일부포기하더라도 "강한 정합성" 을 보장하는것이 더 중요한 도메인입니다.
그렇기때문에 정합성을 보장하기 위한 락은 필수적이라고 생각됩니다.
이 강의에서 쿠폰 발급의 정합성을 위해 전체로직에 락을 걸 필요가 없다는것은 redis 를 활용하여 개수를 체크함으로써 정합성을 보장할 수 있기때문입니다.
설명이 부족했거나 추가적인 질문이 있으시다면 언제든 질문 주세용!
감사합니다.
ApplyService와 Consumer서비스의 db공유?
0
96
2
consumer가 topic을 전부 사용하기 전에 사용자에게는 쿠폰이 발급된것으로 확인하는 과정에서 발생가능한 문제.
0
103
1
쿠폰에 관련되어서 좀 더 참고할만한 자료가 있을까요?
0
126
2
흐름정리 제가 이해한게 맞나요?
0
105
2
안되서 스트레스 받아요
-3
139
2
프로젝트 진행할때 모듈로 추가하는 이유가 궁금합니다!
0
216
2
Redis 활용하기 문제점 해결하기 부분이 이해가 잘 안됩니다...
0
237
1
카프카를 도입하고 난 뒤 로그로 보여지는 장점을 발견하지 못하고 있습니다.
0
203
2
키생성 방식에 따른 성능
0
200
2
사용자 동선에 대한 트랜잭션 문의
0
160
2
강사님 강의를 듣고 실제 프로젝트에서 이벤트 응모 시스템을 만들어 봤습니다.
0
235
1
쿠폰 발급 개수 제한
0
213
2
ApplyService 의 총 처리 시간이 궁금합니다.
0
171
1
쿠폰 생성 에러 처리에 관해서 질문이 있습니다.
0
258
2
마지막에 하신 테스트 자체는 실패하는 게 맞는거죠??
0
308
2
안녕하세요 질문 있습니다!
0
326
1
쿠폰 발급 유저 흐름에 대한 질문
0
331
2
수량 조절에 대한 질문이 있습니다.
0
272
2
kafka Producer 실행 중 에러 시 redis count 정합성 이슈
0
429
2
test 과정에서 오류가 발생합니다.
0
428
1
도커 환경설정에 대해서
0
296
2
Redis의 INCR 사용 해도 Race condition이 잡히지 않는 문제
0
639
1
consumer 모듈
0
358
2
카프카 토픽 생성오류
0
421
2





