여러 개의 질의(절차)를 논리적인 하나의 단위로 묶는 것
어떤 트랜잭션에서 변경한 데이터를 커밋되기 전이어도 다른 트랜잭션에서 읽을 수 있다.
처음 실행된 트랜잭션에서 진행 중 문제가 발생해 롤백되어도, 다른 트랜잭션에서는 이미 데이터를 읽은 상황이라면 정확하지 않은 데이터를 읽은 것이므로 정합성에 문제가 생긴다.
하나의 트랜잭션에서 데이터를 변경하더라도 다른 트랜잭션은 커밋된 상태의 데이터만 읽을 수 있다.
A 트랜잭션이 데이터를 변경하고 있는 상황에서 B 트랜잭션이 접근하면 커밋된 데이터만 읽을 수 있기 때문에 변경 전 데이터를 읽을 것이다. B 트랜잭션이 끝나지 않은 상황에서 A 트랜잭션이 변경된 데이터를 커밋하면, 이제 B 트랜잭션은 동일한 트랜잭션 상황에서 달라진 데이터를 확인하게 된다. 이를 Non-Repeatable 현상이라고 한다.
하나의 트랜잭션이 데이터를 읽는 중이면 다른 트랜잭션은 해당 데이터를 변경할 수 없다.
Non-Repeatable 현상을 개선하기 위해 보완된 격리 수준으로
이를 통해 하나의 데이터를 읽을 때 트랜잭션의 시작과 끝까지 그 데이터가 같은 값을 가짐을 보장할 수 있다.
하나의 트랜잭션에 데이터에 접근했다면 다른 트랜잭션은 접근할 수 없다.
@Transactional 어노테이션을 사용한다.
AOP에 의해서 프록시를 통해 템플릿 콜백패턴으로 처리된다.
메서드 레벨에 어노테이션을 붙일 경우 해당 메소드의 로직 실행 전에 트랜잭션을 시작한다. 메서드를 수행하고, 정상적으로 수행되었다면 트랜잭션 매니저를 통해 커밋을 한다. 메서드 실행이 실패(예외 발생)할 경우 롤백한다.
트랜잭션의 격리 수준(isolation Level)이란?
https://youtu.be/e9PC0sroCzc
YouTube
YouTube
DB 트랜잭션(Transaction) | 👨🏻💻 Tech Interview