1. 트랜잭션의 성질
▶ 원자성(Atomicity)
- 한 트랜잭션 내에서 실행한 작업들은 하나로 간주한다. 즉, 모두 성공 또는 모두 실패.
▶ 일관성(Consistency)
- 트랜잭션은 일관성 있는 데이타베이스 상태를 유지한다. (data integrity 만족 등.)
▶ 격리성(Isolation)
- 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야한다.
▶ 지속성(Durability)
- 트랜잭션을 성공적으로 마치면 결과가 항상 저장되어야 한다.
2. 트랜잭션의 속성
▶ 격리수준(isolation)
- 일관성이 없는 데이터를 허용하는 수준
- 격리수준이 올라갈 수록 성능 저하의 우려
* DAFAULT : 기본격리수준(DB 설정을 따름)
* READ_UNCOMMITED : LEVEL 0, 커밋되지 않은 데이터(트랜잭션 처리중)에 대한 읽기 허용
* READ_COMMITED : LEVEL 1, 커밋된 데이터만 읽기 허용
* REPEATABLE_READ : LEVEL 2, 트랜잭션 시작 후 처음 조회한 데이터를 이후 동일 쿼리 호출 시 보여줌
* SERIALIZABLE : LEVEL 3, 데이터의 일관성 및 동시성을 위해 MVCC를 사용하지 않음
→ 순차적으로 트랜잭션을 실행시키기 때문에 여러 트랜잭션이 동시에 같은 데이터에 접근하지 못함
▶ 전파옵션(propagation)
- 트랜잭션 중 다른 트랜잭션을 실행하는 상황에 선택할 수 있는 옵션
* REQUIRED : default 옵션, 부모 트랜잭션이 있으면 부모 트랜잭션 내에서 실행 및 부모 트랜잭션이 없을 경우
트랜잭션 생성
* SUPPORTS : 부모 트랜잭션이 있으면 참여, 없으면 트랜잭션 없이 진행
* REQUIRES_NEW : 부모 트랜잭션을 무시하고, 새로운 트랜잭션 생성
* MANDATORY : 부모 트랜잭션 내에서 실행 및 부모 트랜잭션이 없을경우 예외 발생
, 혼자 독립적으로 진행하면 안되는 경우에 사용
* NOT_SURRPORTED : 트랜잭션을 사용하지 않게 함, 부모 트랜잭션이 있으면 보류시킴
* NEVER : 트랜잭션을 사용하지 않도록 강재함, 부모 트랜잭션이 있으면 예외 발생
* NESTED : 부모 트랜잭션이 있으면 중첩 트랜잭션 시작
▶ 읽기전용(readOnly)
- 트랜잭션을 읽기 전용으로 설정
- 읽기 이외의 작업이 진행되면 예외 발생
▶ 트랜잭션 롤백 예외(rollbackFor, noRollbackFor)
- 특정 예외시 롤백 여부
▶ timeout
- 지정한 시간 내에 완료되지 않으면 롤백
'Java' 카테고리의 다른 글
Ehcache3 & SpEL (0) | 2023.01.26 |
---|---|
Reflection (0) | 2023.01.20 |
[안전한 객체 생성법] Builder 패턴 + Assert (0) | 2023.01.19 |
@Valid - 객체 유효성체크 (0) | 2023.01.19 |
API - MultipartFile 파일전송 (0) | 2023.01.19 |