2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

REPEATABLE READ 격리 수준의 특징은 무엇인가요?

_____
Q1: REPEATABLE READ 격리 수준이란 무엇인가요?
A1: REPEATABLE READ는 데이터베이스 트랜잭션 격리 수준 중 하나로, 트랜잭션 내에서 읽은 데이터가 트랜잭션이 끝날 때까지 변하지 않도록 보장하는 격리 단계입니다.

Q2: REPEATABLE READ의 주요 특징은 무엇인가요?
A2:
- 트랜잭션 내 동일한 쿼리에서 읽은 결과가 반복해서 일관되게 유지됩니다.
- 같은 행에 대해 읽은 데이터는 다른 트랜잭션이 커밋한 변경사항에 영향을 받지 않습니다.
- 다시 읽기 시, 이전에 읽은 데이타가 변경되거나 삭제되는 현상을 방지합니다 (반복 읽기 가능).
- 단, 팬텀 리드(새로운 행이 삽입되어 이전 쿼리 결과와 다르게 보이는 현상)는 완전히 방지하지 못할 수 있습니다.

Q3: REPEATABLE READ 격리 수준에서 발생하지 않는 현상은?
A3:
- 비반복 읽기(Non-repeatable read): 한 트랜잭션에서 같은 쿼리를 두 번 이상 수행할 때 읽은 행의 데이터가 달라지는 현상이 발생하지 않습니다.
- 더티 리드(Dirty read): 다른 트랜잭션의 미커밋 데이터를 읽는 현상이 발생하지 않습니다.

Q4: REPEATABLE READ에서 발생할 수 있는 문제점은 무엇인가요?
A4: 팬텀 리드(Phantom read)가 발생할 수 있습니다. 즉, 한 트랜잭션 중간에 동일 조건으로 실행한 쿼리 결과에 새로운 행이 나타나거나 사라질 수 있습니다.

Q5: REPEATABLE READ 격리 수준은 어떻게 구현되나요?
A5: 주로 행 수준 잠금(Row-level locking)이나 다중 버전 동시성 제어(MVCC)를 통해 구현하며, 읽은 데이터를 다른 트랜잭션이 변경하지 못하도록 잠금하거나, 트랜잭션 시작 시점의 상태를 유지하여 일관성을 보장합니다.

Q6: REPEATABLE READ는 다른 격리 수준과 어떻게 다른가요?
A6:
- READ UNCOMMITTED: 가장 낮은 격리 수준으로, 더티 리드가 발생합니다.
- READ COMMITTED: 더티 리드는 방지하지만, 비반복 읽기와 팬텀 리드가 발생할 수 있습니다.
- REPEATABLE READ: 비반복 읽기와 더티 리드를 방지하지만 팬텀 리드는 완전히 방지하지 못합니다 (일부 DBMS에서는 팬텀까지 방지).
- SERIALIZABLE: 가장 높은 격리 수준으로, 모든 현상(더티, 비반복, 팬텀)을 방지하여 완전한 순차적 일관성을 제공합니다.

Q7: REPEATABLE READ는 언제 사용하면 좋은가요?
A7: 데이터 일관성이 중요하고, 읽은 데이터를 반복적으로 동일하게 참조해야 하는 업무 처리에 적합하며, 동시에 높은 성능을 요구하는 경우 READ COMMITTED보다는 더 강한 일관성을 필요로 할 때 사용합니다.

Q8: 주요 DBMS에서 REPEATABLE READ 지원 상태는 어떤가요?
A8:
- MySQL(InnoDB): REPEATABLE READ가 기본이며, 팬텀 리드를 막기 위해 MVCC 및 갭락(Gap Lock)을 사용하여 팬텀 문제도 대부분 방지합니다.
- PostgreSQL: REPEATABLE READ는 트랜잭션 시작 시점의 스냅샷을 유지해 팬텀 리드를 방지합니다.
- Oracle: 기본적으로 SERIALIZABLE과 유사한 일관성을 제공하며, REPEATABLE READ 격리 수준을 따로 설정하지 않습니다.

---

요약: REPEATABLE READ는 트랜잭션 중 같은 데이터를 여러 번 읽을 때 일관성을 보장하고 더티 리드와 비반복 읽기를 방지하지만, 일부 경우 팬텀 리드는 발생할 수 있는 중간 정도 강도의 격리 수준입니다.
REPEATABLE READ(반복 가능한 읽기) 격리 수준은 데이터베이스 트랜잭션의 격리 수준 중 하나로, ACID(원자성, 일관성, 고립성, 지속성) 속성의 일환으로 트랜잭션의 일관성을 보장하는 중요한 메커니즘입니다.

이 격리 수준은 데이터베이스에서 동시에 여러 트랜잭션이 실행될 때 발생할 수 있는 다양한 문제를 방지하기 위해 설계되었습니다.

REPEATABLE READ는 다음과 같은 특징을 가지고 있습니다.

1. 일관된 읽기 결과 REPEATABLE READ 격리 수준에서는 트랜잭션이 시작된 시점에서 읽은 데이터의 상태가 트랜잭션이 완료될 때까지 유지됩니다.

즉, 같은 트랜잭션 내에서 동일한 쿼리를 여러 번 실행하더라도 항상 동일한 결과를 반환합니다.

이는 데이터의 일관성을 보장하며, 트랜잭션이 진행되는 동안 다른 트랜잭션이 데이터를 수정하더라도 영향을 받지 않습니다.



2. 팬텀 리드 방지 REPEATABLE READ는 팬텀 리드(phantom read) 현상을 방지합니다.

팬텀 리드는 트랜잭션이 실행되는 동안 다른 트랜잭션이 새로운 행을 추가하거나 삭제하여, 이전에 실행된 쿼리의 결과에 영향을 미치는 상황을 말합니다.

REPEATABLE READ에서는 트랜잭션이 시작된 시점의 데이터 스냅샷을 사용하여 이러한 문제를 방지합니다.



3. 잠금 메커니즘 REPEATABLE READ 격리 수준은 일반적으로 데이터베이스에서 행 수준의 잠금을 사용하여 구현됩니다.

트랜잭션이 데이터를 읽을 때 해당 데이터에 대한 잠금을 설정하여 다른 트랜잭션이 해당 데이터를 수정하거나 삭제하지 못하도록 합니다.

이로 인해 데이터의 일관성이 유지되지만, 동시에 여러 트랜잭션이 실행될 경우 성능 저하가 발생할 수 있습니다.



4. 성능과 격리 수준의 균형 REPEATABLE READ는 READ COMMITTED보다 높은 격리 수준이지만 SERIALIZABLE보다는 낮은 수준입니다.

이는 성능과 데이터 일관성 간의 균형을 제공합니다.

REPEATABLE READ는 데이터의 일관성을 보장하면서도, SERIALIZABLE보다 더 나은 성능을 제공할 수 있습니다.

그러나 여전히 트랜잭션 간의 잠금 경합이 발생할 수 있으므로, 성능에 영향을 미칠 수 있습니다.



5. 사용 사례 REPEATABLE READ는 데이터의 일관성이 중요한 애플리케이션에서 유용하게 사용됩니다.

예를 들어, 금융 거래 시스템이나 재고 관리 시스템과 같이 데이터의 정확성이 필수적인 경우에 적합합니다.

이러한 시스템에서는 트랜잭션이 진행되는 동안 데이터의 상태가 변경되지 않도록 보장하는 것이 중요합니다.



6. 제한 사항 REPEATABLE READ 격리 수준은 데이터의 일관성을 보장하지만, 여전히 일부 제한 사항이 존재합니다.

예를 들어, 트랜잭션이 완료되기 전에 다른 트랜잭션이 데이터를 추가하거나 삭제할 수 있지만, 이러한 변경 사항은 현재 트랜잭션에 영향을 미치지 않습니다.

그러나 이러한 잠금 메커니즘으로 인해 교착 상태(deadlock)가 발생할 수 있으며, 이는 트랜잭션의 성능에 부정적인 영향을 미칠 수 있습니다.

REPEATABLE READ 격리 수준은 데이터베이스 트랜잭션의 일관성을 보장하면서도 성능을 고려한 균형 잡힌 선택입니다.

데이터의 정확성과 일관성이 중요한 애플리케이션에서 널리 사용되며, 다양한 상황에서 유용하게 활용될 수 있습니다.

작성자: 최승민 [비회원] | 작성일자: 1년 전 2024-12-01 19:51:26
조회수: 165 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.