n명이 동시에 db의 데이터값의 증감을 요청하는데(데이터값(정수)+1)
기대했던 결과는 데이터 값 + 요청 수인데
트랜잭션끼리 교통정리가 안되서 n-1의 요청들은 무시되더라구
스프링 기준 @version(낙관적 락)이면 된다길래
테스트코드로 스레드풀 만들어서 동시에 실행해도 같은 결과여서
비관적 락방식으로 적용해서 1개의 트랜잭션이 1개의 데이터 접근시
조회, 수정이 불가하게 해서 해결은했는데
낙관적 락이 업데이트 타이밍에 version 값을 체크하는거라고 알고있거든
그럼 이론 상 뒤에 따라오는 트랜잭션들은 롤백이 되야 할 것 같은데
안되더라구 왜 이문제가 낙관적 락으로 해결할 수 없는걸까......?
락없이 걍 업데이트할때 기좆컬럼값 +1 하면됨
근까 그게 버전체크잖아 그런데 그게 안되던데...? 버전체크실패시 던져야하는 예외가 안떠...
이 파트가 어려운부분이야? 첫 인턴하면서 고생한부분이여서 땜빵질하고 나왔는데 너무 어려워
스프링 버전 어테이션은 첨들어봄 본인이 말한건 업데이트 sql이었음
이게 @version 코드를 넣으면 업데이트 쿼리에 where절에 버전체크를 해주거든 아.. 아니다.. 쉬는기간에 공부를 좀 해봐야게따..
update set count = count + 1 때리면 락없이 요청수만큼 증가 가능 ㅇㅅㅇ
인턴시절에 안되서 개고생을 좀 했거든.. 알려주라..
비관적 락 ㄱ
비관적 락 많이 써 실제 서비스에서? 이거 쓰면 확실 할 것 같았는데 어쨎든 서비스가 확장되고 데이터 단위마다 접근하려는 로직이 많아 질 것 같은데 비관적 락으로 다 해결하면 조회, 수정 트랜잭션도 다 대기를 시키자나 그러면 언젠가 문제가 생길것 같아서 못 넣겠더라구