트랜잭션과 락

jijang·2021년 7월 13일
0

데이터베이스

목록 보기
2/2

트랜잭션(Transaction)

트랜잭션은 ACID 을 보장해야 한다. ACID란?

원자성(Atomicity)

  • 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하든가 모두 실패해야 한다.

일관성(Consistency)

  • 모든 트랜잭션은 일관성있는 데이터베이스 상태를 유지해야 한다. 예를 들어 데이터베이스에서 정한 무결성 제약 조건을 항상 만족해야 한다.

격리성(Isolation)

  • 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치치 않도록 격리한다. 예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야 한다. 격리성은 동시성과 관련된 성능 이슈로 인해 격리 수준을 선택할 수 있다.

지속성(Durabillity)

  • 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다. 중간에 시스템에 문제가 발생해도 데이터베이스 로그 등을 사용해서 성공한 트랜잭션 내용을 복구해야 한다.

격리성과 동시성의 상관관계

  • 격리 수준이 낮을 수록 동시성은 증가되고, 격리 수준이 높을 수록 동시성은 낮아진다.

동시성이란

  • 여러 요청들을 하나의 모듈이 처리 할 수 있는 능력을 말한다.
  • 하나의 모듈이 여러 작업을 하는 것처럼 보이는 능력

트랜잭션의 격리 수준

순서대로 READ UNCOMMITED의 격리 수준이 가장 낮고 SERIALIZABLE의 격리 수준이 가장 높다.

  • READ UNCOMMITTED (커밋되지 않은 읽기)
    커밋하지 않은 데이터를 읽을 수 있다.
    결국 다른 트랜잭션이 수정하는 내용을 읽을 수 있다.

    DIRTY READ 문제점이 발생한다.
    NON-REPEATABLE READ 문제점이 발생한다.
    PHANTOM READ 문제점이 발생한다.

  • READ COMMITTED (커밋된 읽기)
    커밋된 데이터를 읽을 수 있다.
    하지만 반복된 읽기를 하지 않는다. 다시 조회해야만 변경된 내용을 읽을 수 있다.

    NON-REPEATABLE READ 문제점이 발생한다.
    PHANTOM READ 문제점이 발생한다.

  • REPEATABLE READ (반복 가능한 읽기)
    반복된 조회를 한다.
    하지만 반복된 조회로 결과가 달라진다.

    PHANTOM READ 문제점이 발생한다.

  • SERIALIZABLE (직렬화 기능)

트랜잭션의 격리 수준에 따른 문제점

  • DIRTY READ (더러운 읽기)
    커밋되지 않은 데이터를 읽을 수 있는 문제점
  • NON-REPEATABLE READ (반복 불가능한 읽기)
    데이터를 읽은 이후 또는 다른 트랜잭션이 변경 한 내용을 반복하여 읽지 않는 문제점
  • PHANTOM READ (유령 읽기)
    반복 조회 시 결과 집합이 달라지는 문제점

격리 수준의 문제점 표

격리수준DIRTY READNON-REPEATABLE READPHANTOM READ
READ UNCOMMITTED허용허용허용
READ COMMITTED-허용허용
REPEATABLE READ--허용
SERIALIZABLE---

출처 자바 ORM 표준 JPA 프로그래밍 - 김영한님

0개의 댓글