사실 내부의 트랜잭션 동작은 DB마다 다 다르긴 함.
이것도 예시의 하나 이긴 함.
DB 변경 쿼리를 실행하고, 그 결과를 DB에 저장하려면 commit, 저장하고 싶지 않다면 rollback
commit 호출 전 까지 데이터는 임시로 저장하는 것임.
사실 우리가 그냥 쿼리만 날려도 DB에 저장이 되었는데, 그게 오토 커밋 모드라서 그럼.
수동 커밋 모드면 우리가 직접 commit도 해 줘야 함.
이런 느낌이다. 세션 1에서 테이블 조회하면 볼 수 있지만, 다른 세션에서 조회하면 볼 수 없다.
저렇게 세션 1에서만 임시로 보이고, 커밋을 해야 비로소 DB에 제대로 저장이 되는 것이다.
만약 커밋 되지 않은 상태로 트랜잭션 레벨을 설정해서 볼 수 있다고 가정했을 때,
세션 1이 저렇게 해놓은 상태에서, 세션2가 저걸 보고 뭔가를 update 쿼리를 날렸는데 만약 세션1이 그냥 롤백을 해버린 다면
데이터가 일치하지 않는 데이터 정합성의 문제가 일어날 수 있다.
문제의 소지가 많아 READ UNCOMMITED는 안쓴다.
'스프링 > 5. 스프링 DB-1' 카테고리의 다른 글
18. DB 락 (0) | 2023.09.29 |
---|---|
16. 자동커밋, 수동 커밋 (0) | 2023.09.29 |
14. DB 연결 구조와 DB 세션 (0) | 2023.09.28 |
13. 트랜잭션 (0) | 2023.09.28 |
12. 커넥션 풀 적용 (0) | 2023.09.28 |