반응형
오라클의 경우 Read Commit 방식을 채택한다.
트랜잭션A가 시작되어 Update를 할 경우 Commit이 이루어질 때까지 UnDo의 영역을 읽기 때문에 Update하고 Commit의 사이에서 누군가 select할 시 1,000원이 출력된다.
트랜잭션A가 진행되면 누군가한테는 홍길동 누군가한테는 1,000원 누군가한테는 2,000원이 보일 수 있다.
이런식으로 보일 수 있기 때문에 정합성이 깨진다 → Phantom Read (데이터가 보였다 안 보였다)
이러한 점의 문제점은 트랜잭션 B와 같이 조회한 4개를 더해서 총 합을 구하는 시스템이라면 도중에 원래 기대값이 4,000원이지만 6,000원이 나오는 문제가 생긴다.
MySQL의 경우 Repeatable Read 방식을 채용한다.
UnDo 영역에 데이터를 읽고 자기 트랜잭션 번호보다 낮은 데이터를 읽기 때문에 중간에 Update를 해도 데이터의 일관성을 지킬 수 있다.
Insert, Select, Update, Delete의 경우 모두 @Transactional 이 필요하다
반응형