다섯 살도 알 수 있게 · DB/데이터

트랜잭션 격리 수준이 뭐예요?

격리 수준과 이상현상을, 같은 상자를 동시에 만지는 포장 담당과 배송 기사 이야기로 풀어봤어요.

상자 수량을 10으로 고칠게요어? 방금 본 숫자랑 다른데요?두 사람이 같은 상자를 동시에 손대면 서로 다른 수량을 봐요

포장 담당과 배송 기사가 같은 상자를 동시에 만져요.두 사람이 같은 상자를 동시에 손대면 서로 다른 수량을 봐요.

더티 리드반복 불가 읽기유령 읽기동시 작업 규칙이 없으면 세 가지 읽기 사고가 나요

동시 작업 규칙이 없으면 세 가지 읽기 사고가 나요.더티 리드·반복 불가 읽기·유령 읽기예요.

읽기쓰기읽기쓰기격리 수준 = 동시에 손댈 때 서로의 작업을 얼마나 엄격히 막을지 정하는 규칙규칙이 엄격할수록 숫자는 안전하지만, 처리는 느려질 수 있어요

격리 수준 = 동시에 손댈 때 서로의 작업을 얼마나 엄격히 막을지 정하는 규칙이에요.규칙이 엄격할수록 숫자는 안전하지만, 처리는 느려질 수 있어요.

더티 리드 막기확정 전 값은 못 봐요
같은 값 보장하기다시 읽어도 값이 안 변해요
유령 읽기 막기새로 끼어든 행도 막아요
차례로 처리하기가장 엄격한 Serializable
SQL 표준 격리 수준 네 단계Read Uncommitted — 다 보임(더티 리드 O)가장 느슨Read Committed — 확정된 값만 읽음더티 리드 막음Repeatable Read — 다시 읽어도 같은 값반복 불가 읽기 막음Serializable — 차례로 처리한 것처럼가장 엄격

SQL 표준의 격리 수준은 네 단계예요.Serializable이 가장 엄격해요.

Serializable = 가장 안전대신 뒷사람이 더 오래 기다릴 수 있어요그래서 작업에 필요한 안전과 속도에 맞는 격리 수준을 골라야 해요

Serializable은 가장 안전하지만, 낮은 격리 수준보다 뒷사람이 오래 기다릴 수 있어요.그래서 작업에 필요한 안전과 속도에 맞는 격리 수준을 골라야 해요.

한 줄로

격리 수준 = 여러 사람이 동시에 같은 데이터를 손댈 때, 서로의 작업이 얼마나 보이고 가려질지 정하는 규칙.

트랜잭션 격리 수준은 Read Uncommitted·Read Committed·Repeatable Read·Serializable 네 단계가 있고, 낮을수록 더티 리드·반복 불가 읽기·팬텀 리드 같은 이상현상이 더 많이 허용돼요. 격리가 강할수록 일관성은 높아지지만 동시 처리량(성능)은 떨어질 수 있어요.

어른들은 이렇게 불러요

더티 리드
Dirty Read
아직 확정 안 된 값을 보는 것. SQL 표준 기준으로 Read Uncommitted에서만 허용돼요.
반복 불가 읽기
Non-repeatable Read
같은 걸 다시 읽었더니 값이 바뀜. Repeatable Read부터 막혀요.
유령 읽기(팬텀 리드)
Phantom Read
없던 행이 다시 조회하니 생겨남. SQL 표준 기준으로 Serializable에서 완전히 막혀요. PostgreSQL처럼 Repeatable Read에서 막는 제품도 있어요.
Serializable
Serializable
동시 작업을 차례로 하나씩 처리한 것처럼 만드는 수준. 가장 엄격하고, 동시 작업이 많을 때 보통 가장 느려요.
ACID
ACID
전표가 지키는 네 가지 약속. 격리(I)는 그중 하나예요. → 전표가 지키는 네 약속
병행제어
Concurrency Control
격리 수준을 실제로 지켜내는 방법. 락이나 MVCC로 구현해요. → 동시에 안 부딪히는 규칙
CAP 정리
CAP Theorem
SRE 분야의 트레이드오프 이야기. 분산 환경에서 일관성 자체의 한계를 다뤄요. → CAP 정리
최종 일관성
Eventual Consistency
복제본 값이 당장은 달라도 결국 같아지는 것. 격리 수준과는 또 다른 분산 환경의 타협이에요. → 최종 일관성
다음 이야기
문을 열고 번호표를 달아 연결해두는 창고 →
다른 용어도 그림책으로 보고 싶다면 요청하기 →