본문 바로가기
김영한님 인강듣고/스프링 DB

트랜잭션 이해

by doriver 2024. 10. 26.

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

, 다른 세션(사용자)에게는 변경 데이터가 보이지 않는다.

커밋하지 않은 데이터를 다른 곳에서 조회할 수 있으면 어떤 문제가 발생할까?

세션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