격리 수준 선택 감각

같은 데이터를 다시 읽을 때 결과를 얼마나 고정할지에 따라 격리 수준이 올라갑니다

기본값은 보통 READ COMMITTED입니다. 하지만 트랜잭션 안에서 같은 값을 반복 확인해야 하면 REPEATABLE READ, 결과가 틀리면 안 되는 업무면 SERIALIZABLE 또는 비관적 락까지 올려야 합니다.

오른쪽으로 갈수록 읽기 결과는 더 안정적이지만, 락 경합은 커지고 처리량은 줄어듭니다.
동시성 높음 정합성 높음
공통 상황
T1이 재고를 두 번 읽는 사이, T2가 같은 행을 10개 → 8개로 바꾸고 커밋합니다.

차이는 "T1의 두 번째 읽기"가 무엇을 보게 할지에 있습니다. 이 한 장면이 격리 수준 선택 기준을 가장 빠르게 보여 줍니다.

기본 선택

READ COMMITTED

커밋된 최신 값은 보되, 같은 트랜잭션 안에서도 다시 읽으면 값이 바뀔 수 있습니다.

T1의 두 번째 읽기
10 8
중간에 커밋된 변경을 다시 보므로 최신성은 높지만, 반복 조회 결과는 흔들릴 수 있습니다.
운영 감각
경합이 낮고 대부분의 웹 요청에서 무난합니다.
대표 업무
일반 웹 서비스, 대량 조회, 배치, 감사/로깅
반복 읽기 안정화

REPEATABLE READ

트랜잭션이 처음 본 값을 계속 유지합니다. 예약처럼 같은 대상을 여러 번 확인할 때 적합합니다.

T1의 두 번째 읽기
10 10
같은 트랜잭션 안에서는 읽기 결과가 고정됩니다. 실제 예약 처리에서는 보통 을 함께 써 충돌을 제어합니다.
운영 감각
일관성은 커지지만 READ COMMITTED보다 비용이 더 듭니다.
대표 업무
재고/좌석 예약, 반복 조회가 있는 트랜잭션
정합성 최우선

SERIALIZABLE

트랜잭션이 서로 순서를 양보하도록 강제해, 동시에 실행돼도 직렬 실행처럼 보이게 만듭니다.

T1과 T2의 관계
T1 T2 대기
읽기 결과를 흔들 수 있는 동시 실행을 막거나 순서를 강제합니다. 그만큼 락 경합이 가장 큽니다.
운영 감각
처리량보다 정합성이 더 중요할 때만 선택합니다.
대표 업무
금융 거래, 금액/수량 오류가 치명적인 작업