데이터 베이스 상태를 변화시키기 위해 수행하는 작업 단위
예를 들어 트랜젝션 : 오늘 날씨와 일기를 작성할때
작업단위 : select와 insert를 합친것
트랜젝션 특징
트랜젝션이 데이터베이스에 모두 반영되던가, 아예 반영되지 않던가
트랜젝션이 진행되는 동안에 데이터베이스가 변경되더라도 업데이트된 데이터베이스로 트랜젝션이 진행되는것이 아니라 처음에 트랜젝션을 진행하기 위해 참조한 데이터 베이스로 진행된다
둘 이상의 트랜젝션이 동시에 실행되고 있을경우 어떤 하나의 트랜젝션이라도, 다른 트랜젝션의 연산에 끼어들 수 없다는 점
하나의 특정 트랜젝션이 완료될때까지, 다른 트랜젝션이 특정 트랜젝션의 결과를 참조할 숭 벗다
트랜젝션이 성공적으로 완료되었을때 결과는 영구적으로 반영되어야한다는점
트랜젝션의 commit과 rollback
commit은 한 개의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났고 데이터베이스가 다시 일관된 상태에 있을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.
Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산
다수의 트랜잭션이 경쟁시 발생할 수 이쓴 문제
아직 트랜젝션이 완료되지 않은 상황에서 데이터 접근을 허용할 경우 발생할 수 있는 데이터 불일치
한 트랜젝션이 같은 쿼리를 두번 실행했을때 발생할 수 있는 데이터 불일치
한 트랜젝션에서 일정 범위의 레코드를 두번 이상 읽을때 발생하는 데이터 불일치
클래스나 메서드 위에 어노테이션을 추가할 수 있음
트랜젝션 기능이 적용된 프록시 객체 생성
Isolation격리수준
트랜젝션에서 일관성이 없는 데이터를 허용하는 수준
DEFAULT
READ_UNCOMMITTED (Dirty Read 발생)
READ_COMMITTED (Dirty Read 방지)
REPEATABLE_READ (Non-Repeatable Read 방지)
SERIALIZABLE (Phantom Read 방지)
Propagation 전파수준
트랜젝션 동작 도중 다른 트랜젝션을 호출하는상황에서 선택할 수 있는 옵션
트랜제션을 시작하거나 기존 트랜젝션에 참여하는 방법에 대해 결정하는 속성값
ReadOnly
트랜젝션 읽기 전용으로 설정할 수 있음. 성능 최적화를 위해 특정 트랜젝션 작업안에서 쓰기 작업이 일어나는 것을 의도적으로 방지하기 위해 사용
트랜젝션 롤백 예외
예외발생했을때 트랜젝션 롤백시킬 경우를 설정
@Transactional(rollbackFor=Exception.class)
@Transactional(noRollbackFor=Exception.class)
TimeOUT
일정시간내에 트랜젝션 끝내지 못하면 롤백
@Transactional(timeout=10)
@EnableTransactionManagement을 Application에 추가해서 트랜젝션 반영하기