트랜잭션
: 논리적인 작업 단위 (a single logical unit of work)
- 논리적인 이유로 여러 SQL문들을 단일 작업으로 묶어서 나누어질 수 없도록 만든 것
- 트랜잭션 내 SQL 문들은 모두 성공하는 경우 commit, 하나라도 실패하는 경우 전체 rollback
- 트랜잭션 내 SQL문 중 일부만 성공해서 DB에 반영되는 일은 일어나지 않는다.
트랜잭션 ACID란?
ACID 규칙을 모두 보장하여 데이터베이스 트랜잭션이 안전하게 수행되어야 한다.
원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)의 앞글자를 딴 규칙
원자성(Atomicity)
- ALL OR NOTHING
- 트랜잭션은 모두 실행하거나 모두 실행하지 않음의 두가지 상태만
트랜잭션은 논리적으로 쪼개질 수 없는 작업 단위이기 때문에 내부의 SQL 문들이 모두 성공하거나, 어떤 하나의 SQL문이라도 실패하면, 지금까지 작업은 모두 취소해 이전 상태로 롤백해야 한다.
=> 일부만 성공하는 상태는 존재해서 안된다.
일관성(Consistency)
- 트랜잭션 이전과 이후에 데이터베이스는 항상 consistent한 상태여야 한다는 규칙이다.
트랜잭션은 DB 상태를 consistent 상태에서 또 다른 consistent 상태로 가야 한다.
만약에, constraints, trigger 등을 통해서 DB에 정의된 규칙을 트랜잭션이 위반했다면 롤백해야 한다.
예시로, 계좌에 잔액을 업데이트하는 트랜잭션 결과로 잔액이 마이너스로 가버렸다면 그냥 롤백해야 한다.
또 다른 예시로, 데이터는 미리 정의된 규칙에서만 수정이 가능한 특성을 의미하는데, 숫자 컬럼에 문자열 값을 저장이 안되도록 보장해준다.
트랜잭션이 DB에 정의된 규칙을 위반했는지는 DBMS가 커밋 전에 확인하고 알려준다.
고립성(Isolation)
- 여러 트랜잭션이 동시 실행 시, 혼자 실행되는 것처럼 동작하도록 만들어야 한다.
즉, 동시에 실행되는 여러 트랜잭션은 서로 영향을 주지 않고 독립적으로 실행되는 것처럼 보여야 한다.
영속성(Durability)
- 커밋된 트랜잭션의 결과는 데이터베이스에 영구적으로 저장되어야 한다.
영구적 저장 == 비휘발성 메모리(HDD, SSD 등)에 저장
- DB System 에 문제가 생겨도 커밋된 결과는 계속 데이터베이스에 남아있어야 한다.
한번 반영된 트랜젝션의 내용은 영원히 적용되는 특성을 의미
출처 및 참고
- https://engineerinsight.tistory.com/210
- https://chrisjune-13837.medium.com/db-transaction-%EA%B3%BC-acid%EB%9E%80-45a785403f9e
출처 및 참고
- ACID란? https://engineerinsight.tistory.com/210
- https://chrisjune-13837.medium.com/db-transaction-%EA%B3%BC-acid%EB%9E%80-45a785403f9e
'공부' 카테고리의 다른 글
[DB] 제 n 정규형(1NF, 2NF, 3NF, BCNF, 4NF, 5NF) (0) | 2025.02.09 |
---|---|
Large Language Models are Zero-Shot Reasoners 논문 리뷰 (3) | 2025.02.02 |
[Open CV] 색상 곰 탐지 알고리즘 다양한 방법으로 풀기 cv2.HoughCircles, bfs (0) | 2025.01.26 |
Docker 개념 및 핵심 설명, 왜 핫한가? (2) | 2025.01.19 |
docker: error during connect: dockerDesktopLinuxEngine: The system cannot find the file specified. (0) | 2025.01.14 |