⏰ 2024. 07. 03 수
✔ 스프링 이론 강의를 듣고 정리하면서 작성했습니다.
Transaction
원자성('A'tomicity)
: 트랜잭션 내의 모든 연산이 완료되면 그 결과가 DB에 반영되고, 하나라도 실패하면 모든 연산은 취소된다.일관성('C'onsistency)
: 트랜잭션의 작업 처리 결과는 항상 일관적이어야 하고, 그 결과가 DB의 일관성을 유지해야 한다.독립성('I'solation)
: 동시에 발생하는 트랜잭션은 서로 간섭하지 않고 독립적으로 실행되어야 한다.지속성('D'urability)
: 트랜잭션의 수행이 완료되면 그 결과는 영구적으로 DB에 반영되어야한다.트랜잭션 격리 수준은 트랜잭션 상태안에 있는 데이터의 조회할 수 있는 수준을 나태내는 단계이다. 종류로는 4 가지 Read Uncommitted
, Read Committed
, Repeatable Read
, Serializable
이 있다.
Read Uncommitted
: 다른 트랜잭션이 커밋하지 않은 변경 사항도 읽을 수 있는 수준 (더티 리드 발생 가능)
Read Committed
: 다른 트랜잭션이 커밋한 데이터만 읽을 수 있는 수준 (더티 리드 방지)
Repeatable Read
: 트랜잭션 동안 읽은 데이터가 변경되지 않는 수준 (팬텀 리드 발생 가능)
Serializable
: 가장 높은 격리 수준으로, 트랜잭션을 순차적으로 실행하여 모든 문제를 방지하는 수준
Spring에서의 트랜잭션
@Transactional
애노테이션은 public 메서드에만 적용해야 하며, 프록시
를 통해 트랜잭션이 관리되기 때문에 메서드 내부에서 다른 트랜잭션 메서드를 호출하면 트랜잭션이 제대로 적용되지 않을 수 있다.Begin
메서드를 통해 트랜잭션이 시작된다.Commit
하고 임시로 저장된 내용이 DB에 영구적으로 반영된다.Rollback
한다.