728x90
✍️ 학습 목표
- 트랜잭션
- 트랜잭션 격리 수준
📌 트랜잭션
트랜잭션이란? 데이터베이스의 상태를 변화시키는 작업의 단위이다.
Data Manipulation Language(DML)을 사용해서 DB에 접근하는 것을 말한다.
🧷 트랜잭션 특징, ACID
- Atomicity : 트랜잭션이 DB에 모두 반영되거나 반영되지 않아야 한다.
- Consistency : 트랜잭션 이전과 이후의 데이터베이스의 상태는 동일해야 한다.
- Isolation : 모든 트랜잭션은 다른 트랜잭션으로부터 독립적이다.
- Durability : 성공적으로 처리된 트랜잭션의 결과는 지속적으로 유지돼야 한다.
🧷 트랜잭션 연산
- Rollback : 작업 도중 오류가 발생하면 이전 상태로 되돌린다.
- Commit : 작업이 성공적으로 처리되면 데이터베이스에 반영한다.
📌 트랜잭션 격리 수준 (Isolation Level)
데이터베이스에서 ACID 특성에 따라 트랜잭션이 독립적으로 수행할 수 있게 한다.
제한(Locking)을 설정해서 독립성을 제공하는데, 무조건적인 Locking은 성능이 떨어질 수밖에 없다.
효율적으로 트랜잭션을 사용하기 위해서 제한 수준을 분리해야 한다.
🧷 Isolation Level 종류
1️⃣ Read Uncommitted (레벨 0)
- SELECT 문장이 수행되는 동안 해당 데이터에 Lock이 걸리지 않는 수준
- 처리 중이거나 커밋되지 않는 데이터를 다른 트랜잭션이 읽을 수 있다.
- Dirty Read, Non-Repeatable Read, Phantom Read 현상 발생
2️⃣ Read Commited (레벨 1)
- SELECT 문장이 수행되는 동안 해당 데이터에 Lock이 걸리는 수준
- 커밋이 이루어진 데이터는 읽을 수 있다.
- 대부분 DBMS의 Default Level
- Non-Repeatable Read, Phantom Read 현상 발생
3️⃣ Repeatable Read (레벨 2)
- 트랜잭션이 완료될 때까지 SELECT 문장이 사용되는 모든 데이터에 Lock이 걸리는 수준
- 트랜잭션 영역의 데이터를 다른 트랜잭션이 수정할 수 없다.
- MySQL의 Default Level
- Phantom Read 현상 발생
4️⃣ Serializable Read (레벨 3)
- 트랜잭션이 완료될 때까지 SELECT 문장이 사용되는 모든 데이터에 Lock이 걸리는 수준
- 트랜잭션 영역의 데이터를 다른 트랜잭션이 수정할 수도, 입력할 수도 없다.
- 완벽한 읽기 일관성 모드를 제공한다.
격리 수준이 높다고 무조건적으로 좋은 것이 아니다. (Cost Issue)
동시성과 데이터 무결성은 반비례하기 때문에 필요에 맞춰서 사용해야 한다.
🧷 격리 수준에 따른 현상
1️⃣ Dirty Read (= Uncommitted Dependency)
- 확정되지 않은 데이터를 읽는 경우를 말한다.
- 트랜잭션 A가 커밋하지 않은 데이터를 트랜잭션 B가 읽음으로 커밋 이후 조회 결과가 달라지는 현상이다.
2️⃣ Non-Repeatable Read (= Inconsistent Analysis)
- 한 트랜잭션에서 실행되는 같은 쿼리가 다른 결과를 반환할 때를 말한다.
- 트랜잭션 A가 같은 쿼리를 두번 수행할 때, 그 사이 트랜잭션 B가 값을 변경함으로써 쿼리 결과가 다르게 나타나는 현상이다.
3️⃣ Phantom Read
- 없던 데이터가 등장하는 경우를 말한다.
- 트랜잭션 A가 어떤 데이터를 두 번 이상 읽을 때, 첫 쿼리에 없던 값이 다음 쿼리에서 나타나는 현상이다.
-Reference
'Web > BackEnd' 카테고리의 다른 글
[AWS] AWS 인프라 구축하기 - CodeDeploy (5) (0) | 2023.04.05 |
---|---|
[AWS] AWS 인프라 구축하기 - SES (4) (0) | 2023.04.05 |
[AWS] AWS 인프라 구축하기 - S3 (3) (0) | 2023.04.04 |
[AWS] AWS 인프라 구축하기 - RDS (2) (0) | 2023.04.04 |
[AWS] AWS 인프라 구축하기 - EC2 (1) (0) | 2023.04.03 |
댓글