게시글
질문&답변
2024.09.28
Pessimistic Lock 전체 테스트 오류 문의
HeeSeok Noh 님 안녕하세요. 1) 데이터베이스의 설정이 auto_increment 로 되어있기때문에 그럴겁니다. 2) 테스트를 시작하기전에 findByFirst 를 하여 id 를 얻어온 후 그 값을 사용하면 될것같습니다. 감사합니다.
- 0
- 3
- 37
질문&답변
2024.09.28
비관적 락 vs 레디스(Lettuce)락 비교 관련 질문
현이님 안녕하세요. 일단 테스트환경마다 어떤것이 더 적합한지는 다르다라고 말씀을 드릴 수 있을것 같습니다. 그렇기때문에 어떤방법이 무조건 더 좋다가 아닌 상황별로 좋은 방법은 다르다라고 이해해주시면 좋을것 같습니다. 1개의 테이블만 접근하는것이 아닌 여러개의 테이블에 접근하고 스레드가 많은 상황에서 모든 테이블에 락을 걸게된다면 데드락이 발생할 확률이 높아질것입니다. 이러한 경우에 redis 를 활용한 lock 이 효율적일 수 있을것 같습니다. 이부분은 어떤부분이 궁금하신것인지 조금만 더 자세하게 질문해주실 수 있으실까요? 이 부분도 상황마다 다릅니다. 각자의 데이터베이스에서 락을 거는것이 효율적일 수 있고 redis 를 사용하여 락을 제어하는것이 효율적일때가 있을 수 있을것 같습니다. 예를들어 결제를 위해 포인트도 사용해야하고 카드도 결제해야 하는 상황이있고 MSA 로 구성이 되어있는경우 "결제 API" 에 동시에 1개의 요청만 오도록 하는것이 합리적일것입니다. 이때 각 DB 에 락을 거는것으로는 해결하기 힘드므로 redis 를 활용하여 사용할 수 있을것 같습니다. 감사합니다.
- 0
- 2
- 102
질문&답변
2024.09.28
낙관적락 vs 네임드락
gelab 님 안녕하세요. 답변이 늦어져서 죄송합니다. 네임드락의 경우 락을 다른 세션에서 점유하고 있을 때 일정시간 기다릴 수 있는 기능이 있습니다. 이로 인해 대부분의 경우 별도의 재시도 로직은 필요없을것이라고 생각됩니다. 일정시간 이상 기다렸는데도 실패했을때 다시 시도하기를 원한다면 재시도로직을 작성할수도 있을것 같습니다. 감사합니다.
- 0
- 2
- 54
질문&답변
2024.09.08
동시성 문제 해결방안
gelab 님 안녕하세요! 말씀하신대로 native query 를 사용해서 해결할수도 있습니다. 다만, native query 를 사용할때는 아래와 같은 조건으로 해야할것 같습니다. @Query("UPDATE Stock s SET s.quantity = s.quantity - :quantity WHERE s.id = :id and (s.quantity - :quantity) >= 0") 또한, 이 강의는 동시성이라는 주제를 다루기위하여 "재고" 라는 아이템을 선택한것이지 "재고"를 다루려면 무조건 lock 을 잡아야한다는 아니었습니다! 감사합니다.
- 0
- 2
- 62
질문&답변
2024.09.08
Datasource 분리 의미
gelab 님 안녕하세요. 같은 데이터베이스를 사용해더라도 Database Source 를 분리해서 사용할 수 있습니다! 감사합니다.
- 1
- 2
- 66
질문&답변
2024.08.29
쿠폰 발급 유저 흐름에 대한 질문
이민준님 안녕하세요. 정책같은경우는 상황에 따라서 다르기때문에 어떤것이 정답이다라고 말씀드릴수는 없을것같습니다. 쿠폰이 생성되기까지 약간의 시간이 소요되는것이 가능한 상황이라면 이런정책을 안고갈 수 있을 것 같으며, 그것이 안된다면 감당이 가능한 트래픽만 api 의 요청을 할 수 있도록 해야합니다. 이는 콘서트 티케팅과 같은 이벤트때 순서표를 받는것을 생각하시면 수월할 것 같습니다. 또한, 카프카를 사용했을 때 생각하시는것처럼 많은 시간차이가 발생하지 않으며 준실시간성으로 생각됩니다. 메인으로 질문을 주셨던 실제유저가 쿠폰이 발급이 안되었는데 쿠폰사용을 시도하는 케이스는 일어나지 않습니다. 쿠폰이 발급이 안되었기때문에 사용할 쿠폰이 없기때문입니다. 다른 질문이 있으시다면 말씀 부탁드리겠습니다. 감사합니다!
- 0
- 2
- 57
질문&답변
2024.08.29
네임드락 부모에(facade) 트랜잭션이 없을때
donkey 님 안녕하세요 namedlock 의 특성상 같은 세션 안에서만 동일한 키에 대한 락을 획득과 해제를 할 수 있습니다. 같은세션이란 Application Layer 의 세션이 아닌 mysql session 입니다. 따라서, 트랜잭셔널을 사용하여 같은 세션을 사용토록 하기위함입니다. 감사합니다.
- 0
- 1
- 34
질문&답변
2024.08.29
네임드락과 분산락
gelab 님 안녕하세요. 1. named lock 같은경우는 redis 와 비슷한 방법으로 사용을 하신다고 생각하시면 편할것 같습니다. named lock 을 획득하는것만으로 정합성이 보장되는것이 아닌, named lock 획득이 1개의 스레드밖에 안되는특성을 활용하여 1개의 요청만 정합성이 요구되는 로직을 실행하도록 만든다 라고 이해해주시면 될것 같습니다. 1번의 답변으로 어느정도 말씀을 드린것 같습니다. 혹시 다른게 궁금하시다면 말씀 부탁드리겠습니다! 감사합니다.
- 0
- 2
- 58
질문&답변
2024.08.29
facade 패턴 질문
donkey 님 안녕하세요. 일단 AOP 의 구현이 힘든 이유를 잘 모르겠습니다. Spring 의 Aop 를 활용하신다면 구현이 가능할것이라고 생각됩니다. facade 를 활용할 것이고, 그곳에서 service 를 이용하고 service 를 외부에서 이용 못하게 하고싶다면 접근제어자를 활용하여 같은 패키지 안에서만 사용가능하도록 하면 되지 않을까 생각합니다. 감사합니다.
- 0
- 2
- 49
질문&답변
2024.08.29
Redisson lock() vs tryLock()
donkey 님 안녕하세요! 말씀하신 lock(3,TimeUnit.SECONDS) 이 어떤건지 좀만 자세하게 말씀해주실 수 있으실까요?
- 0
- 2
- 31