[JPA] 트랜잭션(Transaction)

동동·2022년 4월 7일

JPA

목록 보기
3/18
post-thumbnail

트랜잭션(Transaction)이란?

데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위이다. 다시 말해 여러 쿼리를 논리적으로 하나의 작업으로 묶어주는 것이다.

📍트랜잭션의 특성

  • Atomicity(원자성)
    트랜잭션은 DB에 모두 반영되거나, 아예 반영되지 않아야 한다.
    -> 완료되지 않은 트랜잭션을 DB에 반영하면 안된다.

  • Consistency(일관성)
    트랜잭션 작업처리결과는 항상 일관성 있어야 한다. (DB의 제약이나 규칙을 어겨서는 안된다.)
    -> DB는 항상 일관된 상태로 유지돼야 한다.

  • Isolation(독립성)
    둘 이상의 트랜잭션이 동시 실행되고 있을 때 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
    -> 각 각의 트랜잭션은 서로 간섭 없이 독립적으로 이루어져야 한다.

  • Durability(지속성)
    트랜잭션이 성공적으로 완료됐으면 결과는 영구적으로 반영돼야 한다.

📍트랜잭션의 격리 수준

  • 데이터 정합성이 높을수록 성능은 떨어진다.(반비례 관계)
  • 케이스에 맞는 격리 수준을 선택하는 것이 중요함

🎢 READ-UNCOMMITTED

: 커밋 전의 트랜잭션의 데이터 변경 내용을 다른 트랜잭션이 읽는 것을 허용
(Dirty Read / Non-Repeatable Read / Phantom Read 문제 발생)

🎢 READ-COMMITTED

: 커밋이 완료된 트랜잭션의 변경사항만 다른 트랜잭션에서 조회 가능
(Non-Repeatable Read / Phantom Read 문제 발생)

Non-Repeatable Read는 같은 트랜잭션 내에서 셀렉트 쿼리를 날렸을 때 결과 값이 다르게 나오는 문제

🎢 REPEATABLE-READ

: 트랜잭션 범위 내에서 조회한 내용이 항상 동일함을 보장
Phantom Read 문제 발생

🎢 SERIALIZABLE

: 한 트랜잭션에서 사용하는 데이터를 다른 트랜잭션에서 접근 불가

📍트랜잭션 전파 타입

profile
괴발개발

0개의 댓글