웹(Web)/Spring

[Spring] 트랜잭션(Transaction)이란?

공.대.남 2023. 4. 4. 21:50
반응형

 

트랜잭션이란 데이터베이스의 상태를 변화시키기 위해 수행하는 작업단위

원자성,일관성,독립성,지속성 => 원자성을 만족시키기위해 전체를 커밋(commit)시키거나 롤백(rollback)시킨다.

여러 트랜잭션이 경쟁하면 (서로다른 사용자가 같은 내용을 수정중일때 조회하려함) => dirty read

여러 트랜잭션이 경쟁하면 (특정값을 a가 쿼리 2번날릴때 중간에 b가 커밋) => non-repeatable read 일관성 해침

여러 트랜잭션이 경쟁하면 (특정 범위 내 a가 쿼리2번날릴때 중간에 b가 커밋) => phantom read 일관성 해침

 

spring에서는 @Transactional으로 클래스,메서드 위에 추가 => 트랜잭션 기능이 적용된 프록시 객체 생성

Isolation (격리수준)  :  트랜잭션에서 일관성이 없는 데이터를 허용하는 수준

DEFAULT

READ_UNCOMMITTED(dirty read 발생)

READ_COMMITTED(dirty read 방지)

REPEATABLE_READ(non-repeatable read 방지)

SERIALIZABLE(phantom read 방지)

 

Propagation (전파수준) : 기존 트랜잭션에 참여하는 방법에 대해 결정하는 속성값

REQUIRED

SUPPORTS

REQUIRES_NEW

NESTED

...

 

readOnly (읽기전용속성) => 단순 조회만하는 클래스에 붙여도 성능최적화에 도움이된다. @Tranactional(readOnly = true)

트랜잭션 롤백 예외 @Tranactional(norollbackFor=Exception.class) Default: RuntimeException, Error 

Timeout 속성 (일정시간내에 트랜잭션 끝내지못하면 롤백) @Tranactional(timeout=10)

 

728x90
반응형