일단 내 가설을 세워볼게.
0. 트랜잭션 안에서 해당 엔티티를 조회한다. 이때 가져온 버전을 특히 잘 기억한다.
1. 트랜잭션이 커밋하기 전에, 변경이 감지된 엔티티가 있다면
2. select for update를 통해 해당 엔티티를 다시 조회한다
3. 버전 필드를 비교한다
4. 버전이 일치한다면 update를 한다
5. 커밋한다.
이 로직이면 안전함.
이 로직이겠지?
저기에서 select for update 가 결국 핵심인데,
결국 Optimistic Lock 도 DB의 update락에 의존해야한다는게 내 주장임.
근데 이제 update락을 광범위하게 걸 필요가 없고
커밋 직전에만 걸 수 있으니까 이득인거고.
ㅇㅈ?
select for update 대신 그냥 select로 버전검사를 해버리면
또 동시성문제가 터지니까
여기선 select for update가 꼭 필요하잖아
결국 DB 동시성제어는 죄다 select for update 이거 하나가 기본블록인거 같은데 내가 아직 DB를 공부하질 않아가지고 잘 모르겠다. 운영체제 동시성제어의 기본블록이 캐쉬코히어런스랑 동기화오퍼레이션인것처럼 DB동시성 제어의 기본블록은 select for update아님? 이거 없으면 그니까 무에서 유를 못만든다는거지 매직은 얘네들이잖아
로우락 테이블락 갭락 등등
다시 공부해라 다 틀렸다