일단 내 가설을 세워볼게.


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가 꼭 필요하잖아