커밋을 호출하기 전까지는 임시로 데이터를 저장하는 것이다.
따라서 해당 트랜잭션을 시작한 세션(사용자)에게만 변경 데이터가 보이고
, 다른 세션(사용자)에게는 변경 데이터가 보이지 않는다.


커밋하지 않은 데이터를 다른 곳에서 조회할 수 있으면 어떤 문제가 발생할까?
세션2에서 세션1이 아직 커밋하지 않은 변경 데이터가 보인다면, 세션1이 롤백 했을 때 심각한 문제가 발생할 수있다.
세션2는 데이터를 조회했을 때 신규 회원1, 2가 보일 것이고 신규 회원1, 신규 회원2가 있다고 가정하고 어떤 로직을 수행할 수 있다.
그런데 세션1이 롤백을 수행하면 신규 회원1, 신규 회원2의 데이터가 사라지게 된다
트랜잭션 격리 수준 - Isolation level
READ UNCOMMITED( 커밋되지 않은 읽기 ) - 성능이 좋긴한데 위험, 안씀
READ COMMITTED( 커밋된 읽기 )
REPEATABLE READ( 반복 가능한 읽기 )
SERIALIZABLE( 직렬화 가능 )
자동 커밋, 수동 커밋
자동 커밋으로 설정하면 각각의 쿼리 실행 직후에 자동으로 커밋을 호출한다.
이는 우리가 원하는 트랜잭션 기능을 제대로 사용할 수 없게 한다.
commit , rollback 을 직접 호출하면서 트랜잭션 기능을 제대로 수행하려면
자동 커밋을 끄고 수동 커밋을사용해야 한다.
수동 커밋 모드나 자동 커밋 모드는 한번 설정하면 해당 세션에서는 계속 유지된다
'김영한님 인강듣고 > 스프링 DB' 카테고리의 다른 글
| 스프링 트랜잭션 @Transactional (0) | 2024.10.30 |
|---|---|
| 스프링 트랜잭션 전파(propagation) (1) | 2024.10.30 |
| 스프링 트랜잭션 시작 (1) | 2024.10.26 |
| JDBC이해 (0) | 2024.10.17 |
| 트랜잭션 시작 (3) | 2024.09.23 |