DB의 수호자: Transaction

JACKJACK·2022년 11월 16일
1
post-thumbnail

📝Transaction이란?

Transaction은 DB에서 수행하는 작업의 최소 단위이며 데이터베이스의 무결성을 유지하며 데이터 처리 기능을 수행한다.

무결성을 지키는 예시로는 은행 계좌 송금이 있으며 A가 B에게 송금을 할 때 A의 출금과 B의 입금을 하나의 Transaction으로 묶어 처리하는 경우이다. 이렇게 DB에서 데이터를 다룰 때 크리티컬한 장애가 생기지 않도록 일련의 작업을 묶은것 Transaction이라고 한다.

// 트랜잭션 예시
START TRANSACTION
// (1) A 계좌 잔액 가져옴 A = 100
// (2) B 계좌 잔액 가져옴 B = 100
// (3) A 출금 A = A - 10
// (4) B 입금 B = B + 10
UPDATE Customer SET balance = balance - 10 WHERE name='A';
UPDATE Customer SET balance = balance + 10 WHERE name='B';

//COMMIT
// (5) A 계좌 잔액 저장 A = 90
// (6) B 계좌 잔액 저장 B = 110
COMMIT

사진예시




🗄Transaction은 DB의 무결성을 위해 ACID 성질을 만족해야한다.

ACID는 원자성, 일관성, 고립성, 지속성의 약자이다.

  • 원자성(Atomicity): 트랜잭션 안의 작업들이 전부 수행되지 않았다면 수행을 하지 않은것으로 간주(all or nothing)

  • 일관성(Consistency): 트랜잭션이 일어난 후에도 DB가 일관성 있게 유지 되는 성질(송금 전후 데이터 타입이 int로 동일)

  • 고립성(Isolation): 트랜잭션이 여러개 동시 수행 될 때 각 트랜잭션간에 데이터 연산 작업 시 충돌이 일어나지 않도록 제어해주는 성질(Concurrency control 이라고도 불리며 같은 리소스 A를 사용할 때 1번 트랜잭션에서 A에 Lock를 걸고 사용하는 중이면 Unlock이 될 때까지 다른 2,3번 트랜잭션 실행 중 A리소스를 접근하지 못하게 한다.)

  • 지속성(Durability): 트랜잭션에서 성공적으로 수행이 완료되면 DB에 수행 내용이 꼭 반영이 되야하는 성질( commit 응답이 완료되고 DB의 변경사항이 DISK에 반영되기전에 장애가 일어나도 LOG를 읽어 장애 처리 후에 commit 내용을 반영)




💀고립성의 동시성 제어의 문제: Deadlock

DB의 교착상태(Deadlock)는 여러 트랜잭션 사이에 서로 같은 리소스들을 사용할 때 서로 상대방의 리소스의 Unlock 상태를 영원히 기다리는 상태를 뜻한다.

Deadlock의 해결방법으로는
1. 예방: trasaction에 사용되는 모든 데이터를 Locking 해준다.
2. 회피: 자원 할당시 timestamp를 활용해 교착상태가 일어나지 않도록 하는 알고리즘 적용.
3. 탐지, 회복: 트랜잭션이 실행되는 동안 검사 수행X, Deadlock이 발생할 때 감지하여 회복하는 방법.




💡결론

- Transaction은 ACID 성질을 통해 데이터의 무결성을 보장하는 DB수행 작업의 최소 단위이다.

- DB에서는 예방, 회피, 탐지/회복 기법을 통해 Deadlock 문제를 해결한다.

profile
러닝커브를 빠르게 높이자🎢

0개의 댓글