woowacourse / tecoble-comments

0 stars 0 forks source link

post/2023-08-16-concurrency-managing/ #112

Open utterances-bot opened 9 months ago

utterances-bot commented 9 months ago

선착순 티켓 예매의 동시성 문제: 잠금으로 안전하게 처리하기

https://tecoble.techcourse.co.kr/post/2023-08-16-concurrency-managing/?utterances=f6959c8418efd2f444cdf377UVsbufpyVwb7GK4K94rcWJnytIW9cF6R6PHwdKarwoVLAzes5XCRm%2B6XrKGE3%2Fu2rLdvdt8LGB30tSGJKv5xqe63gZiSv1vZup6R%2BsX04cnBWriMfzDOhZFt4HY%3D

BGuga commented 9 months ago

페스타고의 자랑 애쉬 글 잘 봤습니다👍

Cyma-s commented 9 months ago

저희도 고민하던 부분인데 꼼꼼한 글 도움 많이 됐습니다!! 😊

aak2075 commented 9 months ago

좋은 글 잘 읽고 갑니다~👍

rnddp93 commented 5 months ago

궁금한 부분이 있습니다! 이론적으로 synchronized 메소드가 데드락을 막지 못 할 것 같다는 생각이 드는데 맞는지 검토 부탁드립니다!

위의 데드락이 발생하는 상황은 특정 DB의 레코드에 대해 특정 시기에 트랙잭션들이 s-lock, x-lock을 맞물리게 가지고 있어 dead락이 발생한다고 했습니다.

이와 유사한 상황이 @Transactional 과 synchronized가 선언된 메소드에서 발생 가능한 상황이라고 생각합니다.

@Transactionl이 선언된 메소드 호출시 대상 메소드를 감싸는 프록시 객체가 생성되지만 프록시 객체에서
커밋 메소드를 호출하여 DB 커밋이 완료되기전에 synchronized 메소드가 호출되는 상황이 존재하며 앞서 제가 언급한 DB의 특정 레코드에 대해 트랙잭션들이 s-lock, x-lock을 맞물리게 가지고 있는 dead락이 발생할 수 있다고 생각하며 만약 제 얘기가 맞다면 '해결책' 보다는 '예방책'에 가깝다는 생각입니다.