일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- TypeScript
- Scheduling
- MongoDB
- node.js
- Kotlin
- HTML
- Network
- typeorm
- Android
- python
- docker
- Crawling
- linux
- OS
- OOAD
- S3
- sequelize
- algorithm
- mysql
- React
- wireshark
- mongoose
- DATABASE
- AWS
- ubuntu
- Express
- css
- macos
- Util
- postman
- Today
- Total
Seongwon Lim
[DB] 트랜잭션(Transaction)의 특성 - ACID 본문
서론
이번 글에서는 트랜잭션의 4가지 특성인 원자성, 일관성, 고립성, 영속성에 대한 개념을 간단하게 알아보고자 한다.
트랜잭션 (Transaction)
트랜잭션이란 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.
데이터베이스 시스템에서 트랜잭션이 가지는 특징은 다음과 같다.
- 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위로 사용된다.
- 또한, 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위로도 사용된다.
- 상태 변환이란, 데이터 조작어(DML)의 SELECT, INSERT, UPDATE, DELETE 등의 명령어를 통해 데이터베이스에 접근하는 것을 의미한다.
트랜잭션의 4가지 특징
트랜잭션의 특징은 크게 4가지로 구분할 수 있으며 데이터 무결성을 보장하기 위해 DBMS은 4가지 특징을 반드시 만족해야 한다.
- 원자성(Atomicity)
- 일관성(Consistency)
- 독립성(Isolation)
- 영속성(Durability)
원자성(Atomicity)
원자성이란, 트랜잭션의 연산은 데이터베이스에 모두 반영되도록 완료(Commit) 되거나 혹은 전혀 반영되지 않도록 복구(Rollback) 되어야 한다는 의미이다.
계좌 이체를 예시로 원자성의 의미를 이해해보자.
계좌 이체는 입금과 출금이 동시에 이루어져야 성공 했다고 판단한다.
그러나, 예를 들어 돈을 보내는 사람은 출금에 성공했지만 돈을 받는 사람은 입금 받지 못했더라면 이것은 원자성에 위배되는 것이다.
계좌 이체의 예시에서 원자성을 만족하려면 다음과 같은 상황이 되어야 한다.
- 보내는 사람의 출금과 받는 사람의 입금이 모두 정상적으로 이루어진다.
- 입금과 출금 모두 실패한다.
따라서, 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 완벽하지 않고 어느 하나라도 오류가 발생한다면 트랜잭션 전부가 취소되어야 한다.
일관성(Consistency)
일관성이란, 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환해야 한다는 것이다.
- 일관성 있는 상태란 도메인의 유효 범위, 제약 조건을 위배하지 않는 상태를 의미한다.
예를 들어, 계좌에는 잔고가 남아있어야 한다는 제약 조건이 있다면 트랜잭션이 완료되기 이전과 트랜잭션이 완료된 후에도 계좌 잔고는 남아있어야 한다는 것이다.
결과적으로 시스템이 가지고 있는 고정 요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
독립성(Isolation)
독립성이란, 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없다는 의미이다.
다시 말하면 독립성은 수행중인 트랜잭션이 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
예를 들어, A->B->C->D 순서대로 실행하는 4개의 트랜잭션이 있다고 가정하면
트랜잭션 B는 트랜잭션 A가 완료될 때까지 트랜잭션 A의 수행 결과를 참조할 수 없다는 것이다.
영속성(Durability)
성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다는 의미이다.
예를 들어, A->B->C->D 순서대로 실행하는 4개의 트랜잭션이 있을 때
트랜잭션 B까지 성공적으로 완료 후 Commit이 되었고, 트랜잭션 C를 수행하는 과정에서 시스템 문제가 발생한다면 트랜잭션 C는 원자성을 만족해야 하기 때문에 당연히 취소될 것이고, 이 때 데이터베이스의 상태는 트랜잭션 B를 완료한 이후의 상태를 유지해야 한다는 것이다.
'Database' 카테고리의 다른 글
[Mysql] 데이터베이스 특정 테이블 추출하기 (1) | 2023.06.20 |
---|---|
[MariaDB] 포트 번호(Port Number) 확인 방법 - Ubuntu (0) | 2022.12.26 |
[DB] 데이터 제어어 (DCL) 이란? (0) | 2022.07.06 |
[DB] MySQL 조건문 사용 방법 (0) | 2022.07.04 |
[DB] 데이터 조작어 (DML) 이란? (0) | 2022.07.03 |