트랜잭션
- 단일한 논리적인 작업 단위
- 논리적인 이유로 여러 SQL 문들을 단일 작업으로 묶어서 나눠질 수 없게 만든 것이 트랜잭션이다.
- 트랜잭션의 SQL 문들 중에 일부만 성공해서 DB에 반영되는 일은 일어나지 않는다.
- 둘 다 정상 처리되어야만 성공하는 단일 작업
일반적인 트랜잭션 사용 패턴
- 트랜잭션을 시작한다.
- 데이터를 읽거나 쓰는 등의 SQL문들을 포함해서 로직을 수행한다.
- 일련의 과정들이 문제없이 동작했다면 트랜잭션을 커밋한다.
- 중간에 문제가 발생했다면 트랜잭션을 롤백한다.
트랜잭션이 가져야 할 속성 (ACID)
- Atomicity
- Consistency
- Isolation
- Durability
Atomicity(원자성)
- ALL or Nothing
- 트랜잭션은 논리적으로 쪼개질 수 없는 작업 단위이기 때문에 내부의 SQL문들이 모두 성공해야 한다.
- 중간에 SQL문이 실패하면 지금까지의 작업을 모두 취소하여 아무 일도 없었던 것 처럼 롤백한다.
Consistency(일관성)
- 트랜잭션은 DB 상태를 일관된 상태에서 또 다른 일관된 상태로 바꿔줘야 한다.
- 제약조건, 트리거 등을 통해 DB에 정의된 룰을 트랜잭션이 위반했다면 롤백해야 한다.
- 트랜잭션이 DB에 정의된 룰을 위반했는지 DBMS가 커밋 전에 확인하고 알려준다.
Isolation(독립성)
- 여러 트랜잭션들이 동시에 실행될 때도 혼자 실행되는 것 처럼 동작하게 만든다.
- DBMS는 여러 종류의 isolation level을 제공한다.
- 개발자는 isolation level 중에 어떤 level로 트랜잭션을 동작시킬지 설정할 수 있다.
- concurrency control의 주된 목표가 isolation 이다.
Durability(지속성)
- 커밋된 트랜잭션은 DB에 영구적으로 저장한다.
- 즉, DB 시스템에 문제가 생겨도 커밋된 트랜잭션은 DB에 남아 있는다.
- 영구적으로 저장한다라고 할 때는 일반적으로 비휘발성 메모리에 저장함을 의미한다.
- 기본적으로 트랜잭션의 Durability는 DBMS가 보장한다.
'DB' 카테고리의 다른 글
[DB] 트랜잭션 회복 기법 (0) | 2024.11.25 |
---|---|
[DB] Soft Delete VS Hard Delete (0) | 2024.11.24 |
[DB] 데이터베이스 설계 (0) | 2024.11.17 |
[SQL] 트리거 (0) | 2024.06.08 |
[SQL] 스토어드 프로시저, 스토어드 함수, 커서 (0) | 2024.06.07 |