트랜잭션 Transaction
: 트랜잭션은 데이터베이스 내에서 데이터를 처리하는 작업 수행의 논리적인 작업 단위를 (하나의 그룹을) 의미한다.
예를 들어 온라인 쇼핑을 한다고 가정해보자.
주문 완료를 위해 쇼핑몰 업체에 계좌이체를 하려고 한다.
1. 내 계좌에서 2만원을 인출 및 이체한다.
2. 내 계좌에 잔액이 차감된다.
3. 업체에 내 이름으로 2만원이 입금된다.
4. 업체 계좌에 잔액이 더해진다.
이체에 필요한 위의 과정에서 만약, 카드사 및 은행 시스템의 문제로 내 계좌에서는 2만원이 인출됐지만 업체에는 입금되지 않았다면? 내 계좌의 인출 작업도 곧바로 취소돼야 한다.
처리하는 과정에서 문제가 발생하게 되면 진행 중이던 작업(전체)을 취소하고 처음부터 다시 시작해야 하는데(즉, 이체가 완료되거나 or 안되거나) 이것이 트랜잭션의 특성이다.
데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)을 보장한다. 이 성질을 첫글자를 따 ACID라 부른다.
트랜잭션의 4가지 특징 ACID*
ACID ; 데이터베이스 트랜잭션이 안전하게 수행되는 것을 보장하기 위한 성질을 가리키는 약어
Atomicity - 원자성
Consistency - 일관성
lsolation - 독립성
Durability - 지속성
원자성(Atomicity)
: 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다.
위의 예시와 같이, 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다.
원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.
일관성(Consistency)
: 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.
독립성(Isolation)
: 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다.
이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다.
은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 독립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다.
지속성(Durability)
: 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.
트랜잭션 로그파일과 트랜잭션의 관계
'Web programming > SQL & DB' 카테고리의 다른 글
[MySQL] 기본 문법, Oracle SQL과의 차이 (0) | 2020.05.08 |
---|---|
[ORACLE SQL] 데이터 조회 기본 문법 !! (0) | 2020.05.08 |
JOIN (0) | 2020.04.17 |
SQL 페이징 (0) | 2020.04.16 |
집합 연산자로 데이터 레코드를 합하여 출력 (UNION, UNION ALL, INTERSECT, MINUS) (0) | 2020.04.16 |