**격리 수준(isolation level)**은 동시 transaction이 서로의 커밋되지 않은(또는 진행 중인) 변경을 무엇까지 볼 수 있는지를 제어합니다 — 일관성과 성능/동시성을 맞바꿉니다. 높은 격리는 더 많은 이상(anomaly)을 방지하지만 잠금/경합을 늘립니다.
동시성 이상 (격리가 방지하는 것)
DIRTY READ → 다른 transaction의 커밋되지 않은 변경을 읽음 (롤백될 수 있음)
NON-REPEATABLE READ → 행을 다시 읽으면 다른 값이 나옴 (다른 txn이 UPDATE함)
PHANTOM READ → 쿼리를 다시 실행하면 다른 행이 나옴 (다른 txn이 INSERT/DELETE함)
이들은 transaction이 동시에 실행될 때 발생할 수 있는 문제입니다 — 격리 수준이 어느 것을 방지할지 제어합니다.
네 가지 표준 격리 수준
수준 | Dirty Read | Non-repeatable | Phantom | 동시성
──────────────────────────────────────────────────────────────────────
READ UNCOMMITTED | 가능 | 가능 | 가능 | 최고 (가장 안전하지 않음)
READ COMMITTED | 방지 | 가능 | 가능 | (흔한 기본값)
REPEATABLE READ | 방지 | 방지 | 가능 |
SERIALIZABLE | 방지 | 방지 | 방지 | 최저 (가장 안전함)
