상세 컨텐츠

본문 제목

트랜잭션 격리수준

백엔드 공부진행도/SpringBoot

by myeongjaechoi 2024. 12. 18. 06:09

본문

트랜잭션 격리 수준이란?

  • 동시에 여러 트랜잭션이 실행될 때 한 트랙잭션이 다른 트랜잭션의 연산에 영향을 받지 않도록 하는 정도
  • 낮은 격리 수준은 동시 처리 능력을 높이지만, 데이터의 일관성 문제를 발생시킬 수 있음
  • 높은 격리 수준은 데이터 일관성을 보장하지만, 동시 처리 능력이 떨어질 수 있음
  • 데이터 정합성과 성능은 반비례

트랜잭션 격리 수준 종류와 특징

  • READ UNCOMMITTED
    • 커밋이 되지 않은 트랜잭션의 데이터 변경 내용을 다른 트랜잭션이 조회하는 것을 허용
    • Dirty Read, Phantom Read, Non-Repeatable Read 문제 발생할 수 있음
  • READ COMMITTED
    • 커밋이 완료된 트랜잭션의 변경사항만 다른 트랜잭션에서 조회 가능
    • 특정 트랜잭션이 이루어지는 동안, 다른 트랜잭션은 해당 데이터에 접근X
    • Dirty Read X, Phantom Read, Non-Repeatable Read 문제 발생할 수 있음
  • REPEATABLE READ
    • 한 트랜잭션에서 특정 레코드를 조회할 때 항상 같은 데이터를 응답하는 것을 보장
    • Non-Repeatable Read X, Phantom Read문제 발생할 수 있음

Dirty Read

  • 정의 : 한 트랜잭션이 다른 트랜잭션에서 아직 커밋되지 않은 데이터를 읽는 현상
  • 문제점 : 커밋되지 않은 데이터는 롤백될 가능성이 있으므로, 잘못된 데이터를 기반으로 작업 가능성
  • 예시:
    • 트랜잭션 A가 데이터 값을 수정했지만 커밋하지 않은 상태
    • 트랜잭션 B가 이 데이터를 읽음
    • 이후 트랜잭션 A가 롤백하면, 트랜잭션 B는 잘못된 데이터를 사용

Non-Repeatable Read(반복 불가능 읽기)

  • 정의 : 한 트랜잭션 내에서 같은 데이터를 두 번 읽었을 때, 다른 트랜잭션이 데이터를 변경하거나 삭제하여 결과가 달라지는 현상
  • 문제점 : 동일한 데이터를 반복해서 읽었을 때 일관성을 보장하지 못함
  • 예시:
    • 트랜잭션 A가 특정 데이터를 읽음(값:100)
    • 트랜잭션 B가 해당 데이터를 수정(값:200)하고 커밋
    • 트랜잭션 A가 다시 데이터를 읽었을 때 값이 변경됨(값:200)

Phantom Read

  • 정의 : 한 트랜잭션 내에서 동일한 조건으로 두 번 조회했을 때, 다른 트랜잭션이 데이터를 추가하거나 삭제하여 결과 집합이 달라지는 현상
  • 문제점 : 데이터의 집합의 크기나 내용이 일관되지 않음
  • 예시:
    • 트랜잭션 A가 특정 조건(AGE>30)으로 데이터를 조회(결과: 3명)
    • 트랜잭션 B가 해당 조건에 맞는 새로운 데이터를 추가하고 커밋(새로운 데이터 추가)
    • 트랜잭션 A가 다시 같은 조건으로 조회했을 때 결과가 달라짐(결과: 4명)

격리 수준별 문제 발생 여부

Isolation Level Dirty Read Non-Repeatable Read Phantom Read
Read Uncommitted 발생 발생 발생
Read Committed 방지 발생 발생
Repeatable Read 방지 방지 발생
Serializable 방지 방지 방지

 

관련글 더보기