728x90
트랜잭션이란?
- 데이터 베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위를 뜻한다.
- 이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 보장한다. (ACID)
- 하지만, 실제로는 성능 향상을 위해 이런 특성들이 종종 완화되곤 한다.
- 트랜잭션 설정을 하지 않으면 SQL문 하나에 트랜잭션이 설정된다.
예)
홍길동 - 900원 -> 김국밥
READ(홍길동 잔액)
이름 잔액 홍길동 1000 김천사 500
UPDATE(김국밥 잔액) = 김국밥 잔액 + 900
이름 잔액 홍길동 1000 김천사 1400
UPDATE(홍길동 잔액) = 홍길동 잔액 - 900
이름 잔액 홍길동 100 김천사 1400
만약 3번이 실패 한다면?
트랜잭션이 없다면 데이터 정합성이 깨졌다고 표현이 된다.
그래서 여러 SQL문을 하나의 오퍼레이션으로 묶을 수 있어야 한다.
만약 2번과 3번이 바껴서 실행되고 이순간 김국밥이 1400원을 출금이 되어 버린다면?
처리중인 데이터를 다른 곳에서 조회하게 되면 문제가 발생되므로 트랜잭션 격리레벨을 설정한다.
ACID
원자성(Atomicity)
- 특징
- 트랜잭션은 실행되면 중단 되지 않는다.
- ALL or Nothing -> 성공 또는 실패 만 있다.
- MVCC 기능이 지원한다.
- 동작
- 트랜잭션 시작 (2번 실행)
- 원본 데이터는 Under Log에 저장되어 있다.
- 트랜잭션 실패시 Under Log로 Rollback이 된다.
- MVCC는 버전 관리 개념이다.
- 트랜잭션 성공시
- 변경된 데이터는 Commit이 된다.
- 원본데이터가 바로 삭제 되지 않는다.
일관성(Consistency)
- 트랜잭션이 종료 되어 ㅆ을때 데이터 무결성이 보장된다.
- 제약조건을 통해 보장이된다.
- ex) 유니크 제약, 외래키 제약
독립성(Isolation)
- ex) 유니크 제약, 외래키 제약
- 제약조건을 통해 보장이된다.
- 다른 트랜잭션이 끼어들지 못한다.
- DB 성능 관련으로 가장 유연성있는 제약 조건이다.
지속성(Durability)
- 성공한 트랜잭션은 영원히 반영 되어야 한다.
728x90
'DB' 카테고리의 다른 글
Redis 란?_명령어_brpop (0) | 2023.04.16 |
---|---|
Redis 란?_명령어_기초 (0) | 2023.04.16 |
Redis 란?_Key/value 규칙 (0) | 2023.04.16 |
Redis 란?_기본 정보 (0) | 2023.04.16 |
Connection Pool (0) | 2023.04.15 |