[ 목차 ]
트랜잭션(Transaction)
- 트랜잭션이란 데이터베이스에서 데이터를 처리하는 논리적인 작업 단위를 의미한다.
- 하나의 작업을 위해 더이상 분할될 수 없는 명령들의 모음으로 즉, 한꺼번에 수행되어야 할 일련의 연산모음을 의미한다.
- 주요 역할 :
- 데이터베이스의 일관성(Consistency)을 유지
- 동시성 제어(Concurrency Control)를 통해 여러 사용자나 프로세스가 데이터에 동시에 접근할 때 발생할 수 있는 문제 방지
- 장애 발생 시 데이터베이스의 복구(Recovery)를 지원
ACID 속성
트랜잭션은 데이터 무결성과 안정성을 보장하기 위해 ACID라는 네 가지 핵심 속성을 따른다.
- 원자성(Atomicity)
- 트랜잭션 내의 모든 작업이 완전히 실행되거나, 전혀 실행되지 않아야 함을 보장한다.
- 중간에 오류가 발생하면 트랜잭션 실행 이전 상태로 복구(롤백).
- 은행 계좌 이체에서 A 계좌에서 돈을 출금한 뒤 B 계좌로 입금하는 두 작업이 하나의 트랜잭션으로 처리된다. 한 작업이라도 실패하면 전체 트랜잭션이 취소되어 데이터의 불일치가 발생하지 않는다.
- 일관성(Consistency)
- 트랜잭션 실행 전후에 데이터베이스가 일관된 상태를 유지해야 한다.
- 데이터 무결성 제약 조건(예: Primary Key, Foreign Key)이 항상 만족되어야 함.
- 상품의 재고는 음수가 될 수 없다. 트랜잭션이 실행되기 전과 후에도 이 조건은 항상 충족되어야 한다.
- 고립성(Isolation)
- 각 트랜잭션은 다른 트랜잭션으로부터 독립적으로 실행되어야 힌다.
- 동시 실행 중인 트랜잭션은 서로 간섭하지 않아야 하며, 그 결과는 순차적으로 실행된 것과 동일해야 한다.
- A 사용자가 재고를 수정하는 동안 B 사용자는 동일한 재고를 조회하거나 수정할 수 없다.
- 지속성(Durability)
- 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 저장되어야 한다.
- 시스템 장애나 오류가 발생해도 데이터는 손실되지 않는다.
- 온라인 쇼핑몰에서 결제 완료 후 서버 장애가 발생해도, 주문 정보는 데이터베이스에 영구적으로 저장된다.
트랜잭션 제어 및 문법
트랜잭션의 작업을 제어하기 위해 데이터베이스는 다음과 같은 명령을 제공한다.
1. Commit : 트랜잭션이 성공적으로 완료되었음을 데이터베이스에 알리고, 변경 내용을 영구적으로 저장.
예시 :
2. Rollback : 트랜잭션 중 문제가 발생하면 모든 변경 사항을 취소하고 이전 상태로 복구.
예시 :
3. Savepoint : 트랜잭션 내 특정 지점을 저장하여 필요 시 해당 지점으로 롤백 가능.
예시 :
※트랜잭션 예외
모든 명령어에 대하영 트랜잭션의 롤백 명령이 적용되는 것은 아니다.
DDL문(CREATE, DROP,ALTER, RENAME, TRUNCATE)는 트랜잭션의 롤백 대상이 아니다.
트랜잭션 상태
- 활성(Active) : 트랜잭션이 실행 중인 상태로, 작업이 진행되고 있는 단계.
- 트랜잭션이 시작되면, 해당 트랜잭션의 상태는 활동 상태가 된다. 이는 설계자가 설계한 대로 연산들이 정상적으로 실행중인 상태를 의미한다.
- 부분 완료(Partially Committed) : 트랜잭션이 마지막 명령을 실행했지만, 아직 커밋되지 않은 상태.
- 완료(Committed) : 트랜잭션이 성공적으로 완료되고, 변경 사항이 영구적으로 저장된 상태.
- 설계된 트랜잭션대로 명령을 성공적으로 수행하면 그 다음 상태는 부분적 완료(Partially Committed) 상태가 된다.설계된 작업대로 작업이 성공해도 무조건 반영하는 것이 아니라, 설계자의 최종 승인(Commit)이 있을 때까지 실제 대이터 베이스에 작업 내용을 반영하지 안고 기다리는 상태이다.
- 설계자가 작업 결과에 대해 반영을 승인(Commit)한다면 트랜잭션이 성공적으로 종료되고 이를 완료(Commited) 상태라고 한다.
- 실패(Failed) : 트랜잭션 실행 중 오류가 발생한 상태.
- 철회(Aborted) : 트랜잭션이 실패하여 이전 상태로 복구된 상태.
- 트랜잭션을 수행하는 중간에 모종의 원인으로 인해 오류가 발생하여 실행이 중단된 상태를 실패(Failed) 상태라고 한다.
- 이때, 트랜잭션이 비정상적으로 종료되었으니, 설계되어있는 트랜잭션 내부의 작업을 다시 수행 이전의 상태로 돌리는 롤백 연산을 수행하면 그 상태를 철회(Aborted)라고 한다.
트랜잭션의 중요성
트랜잭션은 데이터베이스의 안정성과 신뢰성을 유지하는 핵심 요소로, 다음과 같은 이유로 중요하다.
- 데이터 무결성 보장:
- 시스템 오류나 장애가 발생하더라도 데이터를 일관된 상태로 유지.
- 복구 및 재처리 용이성:
- 실패한 작업을 롤백하거나 커밋을 통해 변경 사항을 쉽게 관리.
- 동시성 문제 해결:
- 다중 사용자 환경에서 데이터 충돌을 방지.
- 트랜잭션은 DB가 안정적이고 신뢰성있게 동작하도록 돕는 중요한 메커니즘이다. ACID 속성을 충족해 데이터의 일관성과 안전성을 보장할 수 있다. 트랜잭션 제어를 잘한다면 실무에서 다양한 데이터 처리 요구사항을 효과적으로 관리할 수 있을 것이다. 기본부터 튼튼하게 쌓아나가자!
출처
[MYSQL] 📚 트랜잭션(Transaction) 개념 & 사용 💯 완벽 정리
트랜잭션(Transaction) 이란? 트랜잭션(Transaction)의 사전적 의미는 거래이고, 컴퓨터 과학 분야에서의 트랜잭션(Transaction)은 "더이상 분할이 불가능한 업무처리의 단위"를 의미한다. 이것은 하나의
inpa.tistory.com
https://velog.io/@ksk5401/DDL-DML-DCL-%EC%9D%B4%EB%9E%80
DDL, DML, DCL 이란?
DDL(Data Definition Language) 데이터 정의어란? 데이터베이스를 정의하는 언어이며, 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체의 골격을 결정하는 역할을 하는 언어이다.ALTERDROPTRUNCATE
velog.io
https://velog.io/@shasha/Database-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%A0%95%EB%A6%AC
[Database] 트랜잭션 정리
트랜잭션 총 정리
velog.io
'DB' 카테고리의 다른 글
MVCC (0) | 2024.12.27 |
---|---|
트랜잭션 격리 수준 & 동시성 제어 (0) | 2024.12.26 |
클러스터링 / 레플리케이션 (2) | 2024.12.06 |
정규화 / 반정규화 (0) | 2024.11.28 |
DB 인덱스 (1) | 2024.11.09 |