본문 바로가기
Computer Science/DB

Transaction_and_ACID

by 꽃요미 2024. 12. 18.

* 트랜잭션 (Transaction)

 - 대용량 데이터 동기화 등을 처리하다 보면 개발자가 트랜잭션을

어떻게 처리 하느냐에 따라 데이터의 정합성 등에 영향을 주게 된다.

그래서 백엔드 개발자로서 트랜잭션은 중요한 개념이다.

 

* 트랜잭션 상태

- 위에서 알게된 Commit과

Rollback은 트랜잭션이 어떤 상태일 때 발생할 수 있을까

- Active : 트랜잭션이 실행 중이며 동작 중인 상태

- Partially Committed : 트랜잭션이 실행되고 데이터 변경을 DB에 적용 전 메모리 공간에만 변경해놓을상태.

- Committed : 트랜잭션이 정상적으로 완료 상태. 즉 실제로 메모리에서 DB에 데이터를 쓴 상태. Rollback 불가능.

- Failed : 오류로 트랜잭션 실패 상태.

- Aborted : 트랜잭션이 취소 상태. 트랜잭션 실행 이전 데이터로 돌아감.

 

* ACID

 1) 원자성 (Atomicity)

  - 모두 수행되었거나, 되지 않았거나를 보장함.

  - all or nothing

  - commit 이전에는 메모리 버퍼에 저장한다든지 실패하면 디스크에 반영하지 않는 방식

 

 2) 일관성 (Consistency)

  - 트랜잭션이 완료된 다음의 상태에서도 트랜잭션이 일어나기전 상황과 동일하게 일관성을 보장해야함.

  - 그래서 constraints, trigger 등을 통해 DB에 정의된 rules을 transaction이 위반했다면 rollback 해야 한다.

 

[예시 : 패트 -> 매트]

 

위에 예시를 다시 가지고 와서 주디와 송송의 계좌에는 현재 각각 200만원, 100만원이 있다.

패트 계좌 : 200 만원
매트 계좌 : 100 만원

 

이때 주디가 210만원을 추가 이체한다고 생각해보자.

그럼 주디의 계좌는 -10만원이 된다.

그런데 account 테이블에 balance가 음수가 될 수 없다는 제약사항이 있다.

 

CREATE TABLE account (
    ...,
    balance INT,
    check (balance >= 0)
)

 

그렇다면 210만원을 이체하는 UPDATE문은 일관성을 깨뜨리기 떄문에 Inconsistent 실패하게 된다.

그래서 롤백함.

 

 3) 격리성(Isolation)

  - 각각의 트랜잭션이 서로 간섭 없이 독립적으로 수행되는 것을 말함.

  - 다양한 Isolation level을 제공한다. 

 

[ 예시 : 패트 -> 매트 ]

동시에 트랜잭션이 실행하는 경우 문제가 생길 수 있다. 그래서 isolation은 트랜잭션에서 중요한 특징이다.

패트 계좌 : 200 만원
매트 계좌 : 100 만원

 

1) 패트 -> 매트 10만원 이체 트랜잭션 시작

< 패트 >

read( balance ) => 200만원

write( balance = 190만원 )

 

< 매트 >

read( balance ) => 100만원

 

2) 이때 매트가 자신의 계좌에 40만원 입금 트랜잭션 시작

read(balance)

write(balance = 140만원)

write(balance = 110만원)

 

 4) 지속성(Durability)

  - 성공적으로 수행된 트랜잭션은 영구적으로 데이터베이스에 작업의 결과가 저장되어야 함.

  - 시스템 장애가 발생해도 원래 상태로 복구하는 기능이 있다.

 

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

스키마란?  (1) 2024.12.18
B tree, B+ tree 개념  (0) 2024.12.18
Transaction_Isolation_level  (0) 2024.11.28
DB의 Index(인덱스)  (1) 2024.11.28
DB Connections  (1) 2024.11.25