트랜잭션 1편
2022. 7. 26. 23:51ㆍDataBase/DB 이론
✅ 트랜잭션에 대해서 알아보자
DB 트랜잭션 이란, 데이터베이스 상태를 변경시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.
트랜잭션의 목적은 데이터베이스의 완전성 유지와 무결성을 유지하기 위해 사용된다.
하나의 트랜잭션에는 N개의 SQL(질의어)가 포함되어 있다. 하나의 트랜잭션은 Commit 되거나 혹은 Rollback이 되어야 한다.
트랜잭션의 특징
1.Atomicity(원자성) 보장
- 원자성은 수행하고 있는 트랜잭션에 의해 변경된 내역을 유지하면서, 이전에 Commit 된 상태를 임시 영역에 따로 저장함으로써 보장한다.
- 이전 Commit 된 데이터들이 저장되는 영역을 롤백 세그먼트라고 하며, 현재 수행하고 있는 트랜잭션에 의해 새롭게 변경되는 내역을 데이터베이스 테이블이라고 한다.
- 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나 모두 실패해야 한다.
- DB에 모두 반영되거나 전혀 반영되지 않거나(All Or Nothing)를 의미함.
2.Consistency(일관성) 보장
- 일관성은 트랜잭션 수행 전, 후에 데이터 모델의 모든 제약 조건(기본키, 외래 키, 도메인 제약 조건 등)을 만족하는 것을 통해 보장한다.(A, B 테이블이 있고 B테이블에 A테이블의 PK를 FK로 가지고 있다고 가정할 때 , A 테이블의 특정 row의 PK가 변경되면 B테이블에서 참고하고 있는 외래 키도 변경되어야 한다)
- 트랜잭션은 어떤 이벤트와 조건이 발생했을 때, 트리거를 통해 일관성을 보장한다
- 모든 트랜잭션은 일관성 있는 DB 상태를 유지해야 한다.
- 즉 트랜잭션 수행 전과 트랜잭션 완료 후의 DB상태는 같아야 한다.(무결성 제약 조건을 항상 만족해야 함)
3.Isolation(격리성) 보장
- 트랜잭션은 OS의 세마포어와 비슷한 개념으로 lock & excute unlock을 통해 고립성을 보장한다
- 데이터를 읽거나 쓸 때 문을 잠궈서(lock) 다른 트랜잭션이 접근하지 못하도록 고립성을 보장하고, 수행을 마치면 unlock을 통해 데이터를 다른 트랜잭션이 접근할 수 있도록 허용하는 방식
- 트랜잭션에서는 데이터를 읽을 때, 여러 트랜잭션이 읽을 수 있도록 허용하는 shared_lock을 한다. shared_lock은 오직 데이터 읽기만 허용한다
- 다른 트랜잭션이 데이터를 읽기/쓰기를 할 수 없도록 하는 exclusive_lock을 사용한다. 그리고 쓰기 작업이 끝나면 unlock을 통해 다른 트랜잭션이 lock을 할 수 있도록 데이터에 대한 lock을 풀어준다.(하지만 lock과 unlcok을 잘못쓰면 데드락, 교착상태에 빠질 수 있다.)
- 둘 이상의 트랜잭션들이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없다. 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준(Isolation Level)을 선택할 수 있다.
4.Durability(지속성) 보장
- 성공적으로 완료된 트랜잭션 결과는 시스템에 문제가 발생해도 DB 로그 등을 사용해서 영구적으로 반영되어야 한다
트랜잭션의 연산 및 상태
Commit
:하나의 트랜잭션이 성공적으로 끝났고, 데이터 베이스가 일관성 있는 상태에서 이 트랜잭션이 행한 갱신 연산이 완료된 것을 의미한다.
Rollback
: 트랜잭션 처리가 비정상적으로 종료된 상태를 의미한다. 트랜잭션 원자성을 위배하는 행위이므로 해당 트랜잭션에 행한 모든 연산(SQL)을 취소(Undo)하는 연산이다. Rollback시 해당 트랜잭션을 다시 실행하거나 변경된 결과를 취소할 수 있다
다음 2편에서는 트랜잭션의 격리수준에 대해서 알아보도록 하겠다.
참고자료
반응형
'DataBase > DB 이론' 카테고리의 다른 글
Connection/Read Timeout (0) | 2022.08.22 |
---|---|
트랜잭션 2편 (0) | 2022.08.05 |
Connection Pool (0) | 2022.07.24 |