데이터베이스의 고립성(Isolation)
데이터베이스에서 고립성(Isolation)은 트랜잭션이 서로 영향을 주지 않고 독립적으로 실행될 수 있도록 보장하는 ACID 특성 중 하나임.
이는 여러 트랜잭션이 동시에 실행될 때, 각 트랜잭션이 자신의 작업을 마칠 때까지 다른 트랜잭션의 영향을 받지 않음을 의미함.
트랜잭션과 고립성
트랜잭션이란?
- 데이터베이스의 논리적 작업 단위.
- 여러 작업이 하나의 작업 단위로 실행되고, 모두 성공하거나 모두 실패해야 함.
- 예: 은행 계좌 간 송금 시, 한 계좌에서 돈을 인출하고 다른 계좌로 입금하는 작업.
고립성의 필요성
트랜잭션이 실행되는 동안, 다른 트랜잭션의 중간 상태를 읽거나 영향을 받지 않아야 데이터의 일관성과 신뢰성을 유지할 수 있음.
읽기 현상(Read Phenomena)
고립성 문제는 여러 트랜잭션이 동시에 실행될 때 발생할 수 있으며, 대표적인 읽기 현상은 다음과 같음:
Dirty Reads
- 트랜잭션이 다른 트랜잭션이 커밋되지 않은 데이터를 읽는 상황.
- 예: 트랜잭션 A가 데이터를 수정했으나 커밋하지 않은 상태에서 트랜잭션 B가 이를 읽음.
Non-Repeatable Reads
- 트랜잭션이 동일한 데이터를 두 번 읽을 때, 다른 트랜잭션의 변경으로 인해 값이 달라지는 현상.
- 예: 트랜잭션 A가 데이터를 읽고, 트랜잭션 B가 해당 데이터를 수정한 후, 트랜잭션 A가 다시 읽음.
Phantom Reads
- 트랜잭션 중에 쿼리 결과에 포함되지 않던 데이터가 다른 트랜잭션의 삽입으로 나타나는 현상.
- 예: 특정 조건을 만족하는 행의 수를 조회했는데, 다른 트랜잭션이 새로운 행을 추가하여 결과가 달라짐.
Lost Updates
- 두 트랜잭션이 동시에 데이터를 수정할 때, 한 트랜잭션의 수정 결과가 덮어씌워져 사라지는 현상.
- 예: 트랜잭션 A와 B가 동시에 동일한 데이터를 수정하여 최종 결과가 트랜잭션 B의 값으로 덮어씌워짐.
고립성을 위한 격리 수준(Isolation Levels)
DBMS는 고립성을 보장하기 위해 다양한 격리 수준을 제공하며, 이는 읽기 현상에 따라 구현됨. 격리 수준은 아래와 같음:
Read Uncommitted
- 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있음.
- Dirty Reads, Non-Repeatable Reads, Phantom Reads 발생 가능.
Read Committed
- 트랜잭션이 커밋된 데이터만 읽음.
- Non-Repeatable Reads, Phantom Reads 발생 가능.
Repeatable Read
- 동일 트랜잭션 내에서 동일 데이터를 읽을 때 항상 같은 값을 반환.
- Phantom Reads 발생 가능.
Snapshot (MVCC)
- 트랜잭션이 시작된 시점의 스냅샷 데이터를 읽음.
- Phantom Reads 방지.
Serializable
- 가장 높은 고립 수준.
- 트랜잭션 간 완전한 고립을 보장.
- 모든 읽기 현상을 방지하지만, 성능 저하가 발생할 수 있음.
DBMS에서의 고립성 구현
DBMS는 고립성을 유지하기 위해 다양한 잠금 메커니즘을 사용함:
- 행 레벨 잠금: 특정 행만 잠그는 방식.
- 테이블 잠금: 테이블 전체를 잠그는 방식.
- 페이지 잠금: 데이터 페이지 단위로 잠그는 방식.
이러한 잠금 방식을 통해 트랜잭션 간 충돌을 방지하고 고립성을 보장함.
요약
고립성(Isolation)은 트랜잭션이 동시에 실행되더라도 독립적으로 처리될 수 있도록 보장함. 읽기 현상(Read Phenomena)을 방지하기 위해 다양한 격리 수준과 잠금 메커니즘이 활용되며, 이는 데이터베이스의 일관성을 유지하는 핵심 요소임.
고립성은 데이터의 신뢰성을 유지하기 위해 필수적인 개념으로, 상황에 맞는 격리 수준을 선택하여 시스템 성능과 일관성을 균형 있게 유지하는 것이 중요함.
'DB' 카테고리의 다른 글
[DB] 지속성(Durability) (0) | 2024.12.01 |
---|---|
[DB] 일관성(Consistency) (0) | 2024.12.01 |
[DB] 원자성(Atomicity) (0) | 2024.11.27 |
[DB] 트랜잭션(Transaction) (0) | 2024.11.26 |
[DB] django 에서 다대다(Many-to-Many) 관계 예시 (1) | 2024.09.16 |
배움에 즐거움을 느끼는 마네의 연구소입니다. 이미지 출처 : https://www.instagram.com/hoseobiiiiiii._.0410/
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!