Programming/SQL

[SQL] 트랜잭션(Transaction) - 트랜잭션의 활용 / 특성 / ACID

reeme 2020. 12. 17. 22:49

 

트랜잭션

: 논리적인 일의 단위

기본 설정  하나의 SQL 은 하나의 트랜잭션임

여러 개의 SQL 문들이 합쳐져서 하나의 트랜잭션이 될 수도 있음

 

트랜잭션의 활용

동시성

-- 대규모 데이터베이스를 수백 , 수천 명 이상의 사용자들이 동시에 접근함

-- 많은 사용자들이 동시에 데이터베이스의 서로 다른 부분 또는 동일한 부분을 접근하면서 데이터베이스를 사용함

동시성 제어

-- 동시에 수행되는 트랜잭션들이 데이터베이스에 미치는 영향 = 이들을 순차적으로 수행하였을 때 데이터베이스에 미치는

영향과 같도록 보장함

-- 다수 사용자가 데이터베이스를 동시에 접근하도록 허용하면서 데이터베이스의 일관성을 유지함

-- 여러 사용자나 여러 응용 프로그램들이 동시에 수행되어도 서로 간섭하지 못하도록 보장함 -> 트랜잭션 단위 , 동시성 제어

회복

데이터베이스를 갱신하는 도중에 시스템 고장 시에도 데이터베이스의 일관성을 유지함 -> 트랙잭션 단위 회복

 


트랜잭션이 없다면 ?

1. 은행 계좌 이자 증가

전체 계좌들에 대한 이자가 모두 계산되어야 함

만약 일부 계좌 이자만 증가되고 컴퓨터가 다운되었다가 재가동 된다면 ?

->처음부터 다시 계산하면 이중 이자 계산이 됨

2. 다양한 예약 시스템

항공권 , 극장 등의 예약 시스템

좌석을 선점하고 돈을 내기 전에 시스템이 다운됨

돈은 내지 않았지만 좌석을 잡았기 때문에 해당 좌석은 절대 다시 잡을 수 없어짐

3. 은행 계좌 이체 : B 통장에서 돈이 들어 왔는데 A 통장에 돈이 안 빠짐 -> 은행에 막대한 손실이 발생함

 


트랜잭션의 특성 (반응할거면 다 반응하고 안할거면 다 하지마라)

ACID
1. Atomicity : 원자성
-- 한 트랜잭션 내의 모든 연산들이 완전히 수행되거나 전혀 수행되지 않음 ( All or Nothing ) 을 의미함
-- DBMS 의 회복 모듈은 시스템이 다운되는 경우에 , 부분적으로 데이터베이스를 갱신한 트랜잭션의 영향을 취소함으로써
-- 트랜잭션의 원자성을 보장함
-- 완료된 트랜잭션이 갱신한 사항은 트랜잭션의 영향을 재수행함으로써 트랜잭션의 원자성을 보장함
2. Consistency : 일관성
-- 어떤 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태를 가졌다면 트랜잭션이 수행된 후에 데이터베이스는 또 다른 일관된 상태를 가짐
-- 트랜잭션이 수행되는 도중에는 데이터베이스가 일시적으로 일관된 상태를 갖지 않을 수 있음
3. Isolation : 격리성
-- 고립성이라고도 함
-- 한 트랜잭션이 데이터를 갱신하는 동안 이 트랜잭션이 완료되기 전에는 갱신 중인 데이터를 다른 트랜잭션들이 접근하지 못하도록 해야 함
-- 다수의 트랜잭션들이 동시에 수행되더라도 그 결과는 어떤 순서에 따라 트랜잭션들을 하나씩 차례대로 수행한 결과와 같아야 함
-- DBMS 의 동시성 제어 모듈이 트랜잭션의 고립성을 보장함
-- DBMS 는 응용들의 요구사항에 따라 다양한 고립 수준 (Isolation Level) 을 제공함
4. Durability : 영속성
-- 일단 한 트랜잭션이 완료되면 이 트랜잭션이 갱신한 것은 그 후에 시스템에 고장이 발생하더라도 손실되지 않음
-- 완료된 트랜잭션의 효과는 시스템이 고장 난 경우에도 데이터베이스에 반영됨
-- DBMS 의 회복 모듈은 시스템이 다운되는 경우에도 트랜잭션의 지속성을 보장함

 


ACID 와 DB 기능

ACID 특성과 DB 의 기능은 모두 다 연관이 있음 ( 연관성이 높은 순서 )

-- DB 회복 기능 : 원자성과 지속성에 연관됨

-- DB 동시성 제어 : 일관성과 고립성에 연관

-- 무결성 제약 조건 : 일관성과 관련