이 글은
트랜잭션(Transaction)과 ACID 개념 정리에 이어지는 내용이다.
ACID 중에서도
Isolation(격리성) 은 가장 중요하면서도
면접에서 가장 많이 헷갈리는 개념이다.
이번 글에서는
트랜잭션 격리 수준(Isolation Level)이 무엇인지,
각 단계가 무엇을 보장하고 왜 실무에서 다르게 선택되는지 정리한다.
1. 트랜잭션 격리 수준(Isolation Level)이란?
트랜잭션 격리 수준이란
여러 트랜잭션이 동시에 실행될 때
서로의 작업을 어디까지 볼 수 있도록 허용할 것인가를 정의한 기준이다.
즉,
- 격리를 강하게 하면 → 안전하지만 느리다
- 격리를 약하게 하면 → 빠르지만 위험하다
👉 정합성과 성능 사이의 트레이드오프다.
2. 격리 수준이 필요한 이유
동시에 여러 트랜잭션이 실행되면
다음과 같은 문제가 발생할 수 있다.
- Dirty Read
- Non-Repeatable Read
- Phantom Read
이 문제들을 어디까지 허용할지 결정하는 것이
Isolation Level이다.
3. 대표적인 동시성 문제
Dirty Read
아직 커밋되지 않은 데이터를
다른 트랜잭션이 읽는 문제
Non-Repeatable Read
같은 데이터를 두 번 읽었는데
값이 달라지는 문제
Phantom Read
조건에 맞는 데이터 개수가
트랜잭션 도중 달라지는 문제
4. 트랜잭션 격리 수준 종류
SQL 표준에서는
다음 4가지 격리 수준을 정의한다.
4-1. READ UNCOMMITTED
- 커밋되지 않은 데이터도 읽을 수 있음
- Dirty Read 발생 가능
격리 수준 가장 낮음
실무에서 거의 사용하지 않음
4-2. READ COMMITTED
- 커밋된 데이터만 읽을 수 있음
- Dirty Read 방지
- Non-Repeatable Read 발생 가능
대부분의 DB 기본값
(Oracle, PostgreSQL 등)
👉 실무에서 가장 많이 사용
4-3. REPEATABLE READ
- 트랜잭션 동안 같은 데이터를 여러 번 읽어도 값이 변하지 않음
- Dirty Read, Non-Repeatable Read 방지
- Phantom Read 발생 가능
MySQL(InnoDB) 기본 격리 수준
4-4. SERIALIZABLE
- 가장 높은 격리 수준
- 모든 동시성 문제 방지
- 성능 저하 큼
사실상 트랜잭션을 순차 실행
실무에서는 거의 사용하지 않음
5. 격리 수준별 문제 발생 여부 정리
| Isolation Level | Dirty Read | Non-Repeatable Read | Phantom Read |
|---|---|---|---|
| READ UNCOMMITTED | O | O | O |
| READ COMMITTED | X | O | O |
| REPEATABLE READ | X | X | O |
| SERIALIZABLE | X | X | X |
6. 실무에서는 어떤 격리 수준을 선택할까?
대부분의 경우
- READ COMMITTED 사용
- 성능과 정합성의 균형이 좋음
높은 정합성이 필요한 경우
- 금융, 결제, 재고 처리
- REPEATABLE READ 또는 별도 Lock 전략 사용
👉 SERIALIZABLE은 최후의 수단
7. ACID의 Isolation은 100% 보장될까?
항상 그렇지는 않다.
- 성능을 위해 격리 수준을 낮추기도 하고
- 애플리케이션 레벨에서 보완하기도 한다
즉,
Isolation은 설정 + 설계로 함께 관리해야 한다.
8. 면접에서 자주 나오는 질문 & 답변
Q1. 트랜잭션 격리 수준이란 무엇인가요?
여러 트랜잭션이 동시에 실행될 때
서로의 데이터를 어디까지 볼 수 있는지 정의한 기준입니다.
Q2. READ COMMITTED를 가장 많이 쓰는 이유는?
Dirty Read를 방지하면서
성능 저하가 크지 않기 때문입니다.
Q3. SERIALIZABLE은 왜 잘 안 쓰나요?
동시성이 거의 사라져
성능이 급격히 저하되기 때문입니다.
Q4. Phantom Read란 무엇인가요?
같은 조건으로 조회했는데
트랜잭션 도중 결과 개수가 달라지는 현상입니다.
9. 한 줄 요약
- Isolation Level은 정합성과 성능의 균형 설정
- 실무 기본값은 READ COMMITTED
- 가장 강력한 격리는 SERIALIZABLE
마무리
트랜잭션 격리 수준은
ACID 개념을 실제로 어떻게 적용할 것인가에 대한 문제다.
이 개념을 이해하면
트랜잭션 전파, Lock, 동시성 제어까지
자연스럽게 이어서 이해할 수 있다.
2026.01.06 - [IT/CS] - 트랜잭션(Transaction)과 ACID 개념 정리 – 백엔드 면접 필수
트랜잭션(Transaction)과 ACID 개념 정리 – 백엔드 면접 필수
백엔드 개발자 면접에서거의 빠지지 않고 등장하는 질문이 바로트랜잭션(Transaction)과 ACID이다.이 글에서는프레임워크나 구현 방식이 아닌,트랜잭션의 본질적인 개념과 ACID 원칙을 면접 기준으
gxnzi.tistory.com
'IT > CS' 카테고리의 다른 글
| DB Lock이란 무엇인가? Shared Lock · Exclusive Lock · Deadlock 정리 (면접 필수) (4) | 2026.01.15 |
|---|---|
| 개발하면서 자주 헷갈리는 HTTP 상태 코드 정리 – 면접에서 꼭 나오는 것만 (3) | 2026.01.14 |
| 트랜잭션(Transaction)과 ACID 개념 정리 – 백엔드 면접 필수 (0) | 2026.01.06 |
| 동기 / 비동기 vs 블로킹 / 논블로킹 정리 - 백엔드 면접 필수 (2) | 2026.01.05 |
| [CS] 프로세스와 스레드 차이와 Context Switching (3) | 2025.07.20 |