Isolation level

Parker.Park·2022년 9월 1일
0

CodeCampTeamProject

목록 보기
22/22

지난 시간 ACID에 대해서 정리하면서 팀프로젝 때에도 검색했던 기억이 있었다. 그래서 이번 기회에 정리해 보자.
[ACID?]

Isolation level

ACID와 함께 등장하는 것이 Isolation level이었다. 지난 팀프로젝트 때에도 transaction을 사용하기 위해서는 Isolation level에 대해서 알아야 했다.

[팀프로젝트 회고 - QueryBuilder 사용과 Isolation level]

Isolation level은 트랜잭션이 독립적으로 수행하도록 Locking을 통해 다른 트랜잭션이 관여하지 못하도록 막는데, 아예 막는다면 성능저하로 이어질 것이다. 그래서 성능을 위해서 Locking의 범위를 level에 따라 나눈것이다.

  1. Read Uncommitted (레벨 0)

    • SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리지 않는 계층
      트랜잭션이 처리중이고 아직 Commit되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용한 것이다.
      데이터 베이스의 일관성을 유지하는 것이 불가능하다.
  2. Read Committed (레벨 1)

    • SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리는 계층
      트랜잭션이 수행되는 동안 다른 트랜잭션이 접근할 수 없어 대기해야한다. Commit이 이루어진 트랜잭션만 조회가능하다. 대부분의 SQL서버가 Default로 사용되는 Isolation level이다.
  3. Repeatable Read (레벨 2)

    • 트랜잭션이 완료될 때까지 SELECT 문장이 사용되는 모든 데이터에 Shared Lock이 걸리는 계층
      트랜잭션 범위 내에서 조회한 데이터 내용이 항상 동일함을 보장한다. 다른 사용자는 트랜잭션 영역에 해당되는 데이터에 대한 수정이 불가능 하면 MySQL에서 Default로 사용하는 Isolation level이다.
      commit이 끝나기전 조회한 데이터에 대해서는 동일한 결과를 가져온다는 뜻이다.
  4. Serializable (레벨 3)

    • 트랜잭션이 완료될 때까지 SELECT 문장이 사용되는 모든 데이터에 Shared Lock이 걸리는 계층
      완벽한 읽기 일관성 모드를 제공하고 다른 사용자는 트랜잭션 영역에 해당되는 데이터에 대해 수정 및 입력이 불가능하다.

낮은 Isolation Level에서 나올 수 있는 현상들

  • Dirty Read
    커밋되지 않은 수정중인 데이터를 다른 트랜잭션에서 읽을 수 있도록 허용할 때 발생하는 현상이다. Read Uncommitted level에서 발생한다.
  • Non-Repeatable Read
    한 트랜잭션에서 같은 쿼리를 두 번 수행할 때 그 사이에 다른 트랜잭션 값을 수정 또는 삭제하면서 두 쿼리의 결과가 상이하게 나타나는 일관성이 깨진 현상이다. Read Committed나 Read Uncommitted level에서 발생한다.
  • Phantom Read
    한 트랜잭션 안에서 일정 범위의 레코드를 두 번 이상 읽었을 때, 첫번째 쿼리에서 없던 레코드가 두번째 쿼리에서는 나타나는 현상을 말한다. 트랜잭션 도중 새로운 레코드가 삽입 되었기 때문에 나타나는 현상이다. Non-Repeatable Read 현상 중 하나라고 볼 수 있다.

참조

[트랜잭션 격리 수준(Transaction Isolation Level), Tech Interview for developer]

[[10분 테코톡] 🌼 예지니어스의 트랜잭션, 우아한Tech Youtube]

profile
개발자준비중

0개의 댓글