본문 바로가기
Computer Science/DB

트랜잭션

by 밍상 2021. 11. 30.

A가 B에게 계좌로 돈을 보낸다고 가정하면 다음과 같은 과정이 필요하다.

1. A 계좌 잔액 확인

2. A 계좌 잔액 차감

3. B 계좌 잔액 확인

4. B 계좌 잔액 증가

이러한 일련의 과정을 트랜잭션이라고 한다.

 

트랜잭션은 4가지 특성(ACID)을 만족해야한다.

  1. 원자성(Atomicity)
    전부 반영되거나 전부 반영되지 않게(All or Nothing) 
  2. 지속성(Consistency)
    결과가 지속돼야함
  3. 독립성(Isolation)
    여러 트랜잭션이 서로 영향을 미치면 안됨
  4. 일관성(Durability)
    결과가 변하면 안됨

하지만 성능을 위해 특성을 위배하게 됨

 

동시에 1000000개의 요청이 들어올 때 순차적으로 처리할 수 없기 때문

 

트랜잭션 격리 수준

(동시성)

  1. Read-uncommited
  2. Read-commited
  3. Repeatable-read
  4. Serializable

(데이터 정합성)

 

Read-uncommited

커밋되지 않은 값도 바로 읽어서 사용

->Dirty Read, Non-Repeatable Read, Phantom Read 문제점 있음

 

Read-commited

커밋이 완료된 트랜잭션의 변경사항만 다른 트랜잭션에서 조회 가능

커밋하기 전이라면 커밋하기 전 값을 읽고 커밋하게 되면 변경된 데이터를 읽어옵니다.

->Non-Repaeatable Read, Phantom Read 현상 발생 - 같은 데이터를 조회했는데 값이 불일치한 문제

 

Repeatable-read

반복적으로 조회해도 같은 값을 반환

->Phantom Read - 

 

Serializable

한 트랜잭션에서 사용하는 데이터를 다른 트랜잭션에서 접근 불가

ACID는 잘 지켜지나, 성능이 떨어짐

 

 

'Computer Science > DB' 카테고리의 다른 글

Redis란?  (0) 2023.03.17
MongoDB 기본 개념에 대해 알아보기 (정리)  (0) 2022.05.13
DB 기초  (0) 2022.02.03
NoSQL  (0) 2021.10.29
정규화  (0) 2021.10.29