개발로 자기계발
728x90

READ UNCOMMITTED

정의 다른 트랜잭션에서 아직 커밋되지 않은 데이터도 조회할 수 있다.
부정합 '더티 리드(Dirty Reads)'가 발생할 수 있다.
아직 확정되지 않은 데이터를 읽어서 그 트랜잭션이 롤백되었을 경우 잘못된 정보를 기반으로 작업을 수행할 위험이 있다.

상황 설명:

  • 도서관에서 책을 읽기 시작했다.
  • 다른 사람이 책에 메모를 하고 있지만, 아직 메모를 완성하지 않았다.
  • READ UNCOMMITTED 상황에서는, 본인이 그 미완성 메모를 읽을 수 있다.
  • 즉, 작성자가 아직 메모를 확정하지 않았음에도 불구하고, 그 내용을 볼 수 있다.

READ UNCOMMITTED는 다른 사람이 최종적으로 확정하지 않은 정보에 접근할 수 있다.
이는 메모가 나중에 변경되거나 삭제될 수 있음을 의미하며, 이로 인해 잘못된 정보를 기반으로 판단할 위험이 있다.

 

READ COMMITTED

정의 다른 트랜잭션에 의해 커밋된 데이터만 조회할 수 있다.
READ하는 시간을 기준으로 그전에 COMMIT된 데이터를 읽는다.
부정합 더티 리드를 방지하지만, '비반복 가능 읽기(Non-repeatable reads)'는 발생할 수 있다.
같은 트랜잭션 내에서 같은 데이터를 여러 번 조회했을 때 읽어온 데이터가 다른 경우를 말한다.

상황 설명:

  • 도서관에 가서 책을 읽기 시작했다.
  • 본인이 읽고 있는 도중, 누군가가 와서 같은 책의 일부 페이지를 교체하고 갔다고 해보자.
  • 본인이 그 페이지를 다시 읽으려고 할 때, 교체된 새 페이지(즉, 변경된 정보)를 읽게 된다.

READ COMMITTED는 본인이 책을 읽는 동안 다른 사람이 변경한 내용을 본인이 다시 그 부분을 읽을 때 반영해 준다.
즉, 읽고 있는 정보가 다른 사람에 의해 변경될 수 있으며, 본인은 변경된 최신 정보를 읽게 된다.

 

REPEATABLE READ

정의 트랜잭션 시작 시점에 커밋된 데이터만 조회할 수 있다.
TX 시작 시간을 기준으로 그전에 COMMIT된 데이터를 읽는다
부정합 트랜잭션이 진행되는 동안 조회하는 데이터는 변경되지 않으므로, '비반복 가능 읽기' 문제를 방지할 수 있다.
'팬텀 리드(Phantom reads)'는 여전히 발생할 수 있다. 이는, 조회해 온 결과의 행이 새로 생기거나 없어지는 현상을 말한다.

상황 설명:

  • 도서관에서 책을 읽기 시작했다.
  • 이번에도, 본인이 책을 읽는 동안 누군가가 와서 같은 책의 일부 페이지를 교체하려고 한다.
  • 하지만 REPEATABLE READ 상황에서는, 본인이 책을 시작한 순간의 원본 페이지를 계속 유지한다.
  • 다른 사람이 페이지를 교체하려 해도, 본인이 읽고 있는 동안은 원본 페이지가 보존된다.

REPEATABLE READ는 본인이 처음 책을 열고 읽기 시작한 순간의 정보가, 책을 읽는 동안 계속 유지된다는 것을 의미한다.
즉, 읽고 있는 동안 다른 사람의 변경사항이 적용되지 않아, 정보의 일관성이 보장된다.

 

SERIALIZABLE

정의 가장 엄격한 격리 수준으로, 트랜잭션이 진행되는 동안 해당 데이터에 대해 다른 트랜잭션이 접근하지 못하도록 한다.
부정합 모든 종류의 읽기 문제(더티 리드, 비반복 가능 읽기, 팬텀 리드)를 방지하지만, 동시성이 크게 떨어질 수 있다.

상황 설명:

  • 도서관에서 책을 읽고 있다.
  • SERIALIZABLE 상황에서는, 본인이 책을 읽는 동안 다른 사람이 그 책에 접근하거나 변경하는 것이 안된다.
  • 이는 본인이 책을 읽기 시작할 때부터 완전히 끝날 때까지, 책의 상태가 완전히 고정되어 있음을 의미한다.
  • 다른 사람은 본인이 책을 다 읽고 나서야 책을 볼 수 있다.

SERIALIZABLE 격리 수준은 도서관에서 책을 읽는 동안 다른 어떤 활동도 그 책에 대해 이루어지지 않도록 보장한다.
모든 종류의 읽기 문제(더티 리드, 비반복 가능 읽기, 팬텀 리드)를 방지한다.
그러나, 이 격리 수준은 다른 사용자의 작업을 상당히 제한하기 때문에, 동시성이 크게 떨어질 수 있다.
728x90
SMALL
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)