반응형
안녕하세요
코딩하는헬린이입니다.
면접을 진행하면서 isolation Level에 대하여 따로 고민하거나 생각해두질 않아 포스팅합니다.
일단 트랜젝션의 성질부터 알아보는게 좋을듯합니다.
트랜잭션의 성질 (ACID)
- 원자성(Atomicity)은 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.
- 일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.
- 격리성(Isolation)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 고립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다.
- 지속성(Durability)은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.
하지만 격리성을 높이면 트랜잭션을 순차적으로 처리해야하는 방면에 있어서 성능이 나빠지게 됩니다.
그래서 이러한 문제로 인하여 격리성을 4단계로 분리합니다.
Isolation Level (4단계)
- READ UNCOMMITTED(커밋되지 않은 읽기) --> level0
- A라는 데이터를 B로 바꾸는 동안 B가 완료되지 않은 상태에서 Dirty Read(다른 트랜잭션이 완료되지 않은 상태에서 읽는것) 가 가능하다. - READ COMMITTED(커밋된 읽기) --> level1
- 커밋이 완료된 데이터가 확정된 시점에 읽는게 가능하다. - REPEATABLEREAD(반복 가능한 읽기) --> lovel2
- 트랜잭션이 발생하기 전 데이터에 대해서만 조회가 가능하다. - SERIALIZABLE(직렬화 가능) --> level3
- 가장 높은 일관성을 보이며, 읽기 작업중에도 Lock 을 걸어버린다. 고로 가장 엄격한 단계이다
- Dirty Read
- 트랜잭션이 완료되지 않은 상태에서 중간에 데이터를 읽어들이는 행위
- Non-Repeatable Reads
- 한 트랜잭션안에서 조회 쿼리를 두번 요청했을경우 다른 데이터가 나오는 현상이며 다른 트랜잭션에서 업데이트를 진행 했을경우 이러한 현상이 발생한다.
- Phantom reads
- 한 트랜잭션내 두번의 조회하는 경우 없었던 Row 생기는 행위이며, Insert에 인하여 생긴다.
ref
https://medium.com/geekculture/transaction-isolation-levels-f438f861e48a
https://zzang9ha.tistory.com/381
반응형
'이론' 카테고리의 다른 글
RESTfull API 설계를 위한 규칙 (0) | 2022.11.02 |
---|---|
[BlockChain] IPFS (파일 분산 시스템) (0) | 2022.10.14 |
[BlockChain] BIP-32 / BIP-39 / BIP-44 는 무엇인가 ? (0) | 2022.10.12 |
CI(Continuous Integration), CD(Continuous Delivery / Deployment) 란 무엇일까? (0) | 2020.08.03 |
DevOps 란 무엇일까? (0) | 2020.07.28 |