@Transactional

배고픈 징징이 ㅣ 2023. 1. 19. 15:05

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