본문 바로가기
Database

DATABASE 트랜잭션 기초

by joooing 2021. 2. 26.
반응형

트랜잭션이란?


데이터베이스의 조건

✔️ 다수 사용자가 동시에 사용해도 모순없이 정확한 데이터 유지해야함

✔️ 장애 발생시에도 빠르게 복구할 수 있어야 함

트랜잭션

✔️ DB 회복, 병행 제어를 가능하게 해 일관된 상태를 유지하게 해줌

✔️ 하나의 작업을 수행하는 데 필요한 DB 연산들을 모아둔 것 (DB의 논리적 작업 단위)

 

ex. 계좌이체 트랜잭션 → 2개의 UPDATE문으로 구성

    1) 보내는 사람 잔액 감소

    2) 받는 사람 잔액 증가

 

//1
UPDATE 계좌 SET 잔액 = 잔액 - 5000 WHERE 계좌번호 = 100;
//2
UPDATE 계좌 SET 잔액 = 잔액 + 5000 WHERE 계좌번호 = 200;

 

ex. 상품주문 트랜잭션 → INSERT, UPDATE문으로 구성

 

//1
UPDATE 계좌 SET 잔액 = 잔액 - 5000 WHERE 계좌번호 = 100;
//2
UPDATE 계좌 SET 잔액 = 잔액 + 5000 WHERE 계좌번호 = 200;

 

트랜잭션의 특성 : ACID


Atomicity 원자성

✔️ 트랜잭션을 구성하는 연산들이 모두 정상 or 모두 실패여야한다는 특성 (all-or-nothing)

✔️ 장애 발생시 연산처리를 싹다 취소하고 작업전 상태로 돌아가야함

    → 일부처리만 반영해서는 안됨! 

 

 

Consistency 일관성

✔️ 트랜잭션의 성공적 수행 후에도 DB가 일관된 상태를 유지해야함 (병행제어 기능)

✔️ 트랜잭션 수행 중에는 잠시 일관성을 잃을 수 있지만, 완료 후에는 반드시 모순없이 일관되어야한다!

 

Isolation 격리성

✔️ 수행중인 트랜잭션이 완료될 때까지, 중간 연산 결과에 다른 트랜잭션들이 접근할 수 없음 (병행제어 기능)

✔️ 여러 트랜잭션이 동시에 수행되는데, 각 트랜잭션은 독립적으로 수행되어야함

      (순서대로 하나씩 수행되는 것과 같은 결과를 얻을 수 있도록)

 

ex. 계좌이체

A 가 B에게 5000원을 갚음

B가 용돈 1000원을 받음

⇒ 차례로 더해져 총 6000이 B에게 더해져야 하는데, 중간에 서로 접근하면 5000원같은 이상한 결과가 나올 수도 있게됨

 

Durability 영속성

✔️ 트랜잭션의 성공 완료 후 DB에 반영한 수행 결과는 손실되지 않고 영구적이어야 함 (회복 기능)

✔️ 시스템 장애에도 작업결과는 그대로 DB에 남아있어야 함

 

트랜잭션 연산


commit 연산

✔️ 트랜잭션의 성공적 수행을 선언 (작업 완료)

✔️ commit 실행 후에야 트랜잭션 수행 결과가 DB에 반영됨 → 일관성 유지 가능

 

rollback 연산

✔️ 트랜잭션 수행 실패를 알림 (작업 취소)

✔️ 지금까지 실행한 연산 결과가 취소, 수행 전 상태로 돌아감 → 모순 방지

 

 

트랜잭션 상태


트랜잭션은 아래 다섯개 상태 중에 하나가 된다. 실행단계를 시작으로 부분 완료 상태가 되고, 실패 혹은 완료로 넘어간다. 성공시에는 commit으로 완료가 되고 실패 후에는 철회를 함으로써 트랜잭션을 종료한다.

 

출처 : https://thebook.io/006977/ch09/02/02/

반응형

댓글