팬텀 리드(Pantom Read)란?
정의 : 트랜잭션이 동일한 쿼리를 반복 실행할 때, 나중에 실행된 쿼리에서 처음에는 존재하지 않았던 새로운 데이터가 나타남
원인 : 주로 읽기 읽관성(Read Consistency)을 유지하는 과정에서 발생 > 데이터의 삽입, 삭제가 다른 트랜잭션에 의해 이뤄질 때
-- 트랜잭션 A시작
START TRANSECTION;
-- 트랜잭션 A 첫 번째 조회
SELECT * FROM orders WHERE amount > 150;
-- 트랜잭션 B 시작
START TRANSETCION;
-- 트랜잭션 B 새로운 행 삽입
INSERT INTO orders() VALUES(4, 250);
-- 트랜잭션 B 커밋
COMMIT;
-- 동일한 조건으로 트랜잭션 A 두번째 조회시, 트랜잭션 A의 첫번째 조회에서는 존재하지 않던,
-- 트랜잭션 B에서 삽입된 새로운 행이 함께 조회된다.
-- 단, MVCC를 지원하는 경우 해당 케이스에서 팬텀 리드가 발생하지 않음.
SELECT * FROM orders WHERE amount > 150;
갭락(Gap Lock)이란?
정의 : 특정 인덱스 값 사이의 공간을 잠그는 락
특징
- 기존 레코드 간의 간격을 보호하여 새로운 레코드의 삽입을 방지
- 범위 내의 특정 레코드가 존재하지 않을때 적용
- 트랜잭션이 특정 범위 내에서 데이터의 삽입을 막아 팬텀 리드 현상을 방지
넥스트키 락(Next-Key Lock)이란?
정의 : 레코드 락 + 갭락
특징
- 특정 인덱스 레코드와 그 주병의 갭을 동시에 잠그는 락
- 레코드 자체의 변경과 그 주변의 변경도 동시에 제어 가능
- 트랜잭션이 새로운 레코드를 삽입을 막아 팬텀 리드 현상을 방지
갭락과 넥스트키 락을 통한 팬텀 리드방지 매커니즘
: 트랜잭션A가 특정 범위의 데이터를 조회할때, 해당 범위에 대한 갭락 또는 넥스트키락을 설정합니다. 그러면 트랜잭션 B는 해당 범위의 레코드를 수정하거나 새로 삽입할 수 없기에, 트랜잭션A가 다시 동일한 조건으로 조회를 수행하더라도, 팬텀 리드가 발생하지 않습니다.
=====
✨ InnoDB란?
정의 : MySQL 데이터베이스 시스템에서 사용되는 데이터베이스 엔진(트랜잭션 세이프 스토리지 엔진) 중 하나이다.
'cs(with 매일메일)' 카테고리의 다른 글
| [251021화] 리버스 프록시와 포워드 프록시의 차이점에 대해 설명해주세요 (0) | 2025.10.21 |
|---|---|
| [251020월] CORS란 무엇인가요? (0) | 2025.10.20 |
| [251016목] 데이터베이스 시스템에서 동시성을 제어하는 방법에 대해 설명해주세요. (0) | 2025.10.16 |
| [251015수] HTTP 메서드에서 멱등성이란 무엇인가요? (0) | 2025.10.15 |
| [251003금] 동기 방식으로 외부 서비스를 호출할 때 외부 서비스 장애가 나면 어떻게 조치할 수 있나요? (0) | 2025.10.14 |