목차
📁 트랜잭션(Transaction)이란?
📌 트랜잭션(Transaction)이란 한번에 모두 수행되거나 수행되지 않아야 하는 작업 수행의 논리적인 단위를 말한다.
원자 트랜잭션(Atomic Transaction)이라고도 한다.
예시는 다음과 같다.
은행 데이터베이스를 기반으로 A 계좌에서 B 계좌로 $50를 이체하는 경우 다음과 같은 SQL코드를 사용할 수 있다.
🔎 선언의 단위
응용 설계자가 여러 데이터베이스 연산들을 한데 모아 한 트랜잭션으로 선언할 수 있다.
하나의 응용프로그램은 여러개의 트랜잭션을 포함할 수 있다.
📁 트랜잭션의 특성
📌 원자성(Atomicity)이란 트랜잭션 변경 연산은 모두 성공적으로 수행되거나 전혀 수행되지 않아야한다는 특성이다.
📌 일관성(Consistency)이란 각 트랜잭션은 트랜잭션 실행 후 데이터베이스를 하나의 일관된 상태로 남겨두어야한다는 특성이다.
📌 격리성(Isolation)이란 각각의 트랜잭션은 단독으로 실행된 것 같은 효과를 가지는 특성이다.
📌 영속성(Durability)이란 트랜잭션이 성공적으로 완료되면 데이터베이스에 대한 변경은 영구적이어야한다는 특성이다.
위 네개의 특성의 앞글자를 따서 트랜잭션의 ACID 특성이라고 부른다.
📁 트랜잭션의 동작
한 트랜잭션의 수행은 데이터베이스 내의 객체를 접근하기 위해 일련의 요청들을 필요로 한다.
읽기(Read) 연산
쓰기(Write) 연산
완료(Commit) 연산
복귀(Rollback) 연산
이때 완료(Commit) 연산이란, 트랜잭션에 의해 수행된 갱신들을 데이터베이스에 영구적으로 반영하는 것을 말한다.
복귀(Rollback) 연산이란, 트랜잭션에서 SQL문들에 의해 수행된 모든 갱신을 취소하는 것을 말한다.
복귀 연산을 수행하면, 데이터베이스 상태는 트랜잭션의 첫 구문이 실행되기 전의 상태로 돌아가게 된다.
📝 트랜잭션 동작 예제
위 SQL 문장은 다음과 같이 동작한다.
📁 트랜잭션 관리자
트랜잭션의 행동을 감시하고 각 동작의 실행이 가능한지를 결정하는 소프트웨어를 말한다.
다양한 트랜잭션 프로토콜을 수행할 책임을 가진다.
📁 단일 트랜잭션 시스템
📌 단일 트랜잭션 시스템이란 한번에 오직 하나의 트랜잭션만 실행하는 시스템을 말한다.
단일 트랜잭션 시스템에서는 이전 트랜잭션이 종료될 때까지 새로운 트랜잭션을 시작할 수 없다.
이러한 시스템의 원자성을 지원하기 위해 완료(Commit), 복귀(Rollback) 연산이 요구된다.
📁 SQL 데이터베이스에 대한 트랜잭션 모드
📌 자동 완료 모드(Autocommit Mode)
하나의 SQL문장은 하나의 트랜잭션으로 수행한다.
트랜잭션을 오픈하기 위한 묵시적인 요청으로 시작한다.
자동적으로 완료 요청을 보낸다.
SQL 문장의 실행이 실패했을 경우 Rollback한다.
📌 명시적 완료 모드(Explicit Commit Mode)
여러 SQL 문장을 단일 트랜잭션으로 실행한다.
트랜잭션을 시작할 수 있도록 Begin Transaction문을 실행한다.
트랜잭션을 완료할 수 있도록 Commit문을 실행한다.
트랜잭션의 취소를 요청하면 Rollback문을 실행한다.
📌 암시적 완료 모드(Implicit Commit Mode)
여러 SQL 문장들을 단일 트랜잭션으로 실행한다.
SQL문을 처음 만나면 트랜잭션이 시작하는 것으로 간주한다.
Oracle에서 사용하며, VS, MS, SQL Server에서는 별도의 모드 설정이 필요하다.
📝 명시적 완료 모드의 트랜잭션 예시 (Pseudo 코드)
📁 트랜잭션 복귀
트랜잭션 복귀를 위해서는 시스템이 트랜잭션에 의해 변경된 내역을 유지해야한다.
이를 위해서는 변경 내역이나 이전 상태를 임시 영역에 저장할 필요가 있다.
위를 돕는 연산이 Savepoint 연산이다.
SQL에서 지원한다.
트랜잭션 내에 중간 복귀 시점을 만든다.
Savepoint가 실행되었을 당시의 상태로 복구하기 위해 사용한다.
Savepoint가 실행된 이후에 발생된 모든 갱신들만이 취소된다.
예시는 다음과 같다.
📁 데이터베이스의 일관성 보장
데이터 모델의 모든 제약 조건을 만족한다면 데이터베이스는 일관성 상태가 된다.
이때 제약 조건은 기본 키와 외래 키 제약 조건, 도메인 제약 조건, 비즈니스 규칙 등을 말한다.
아래 포스팅에서 자세히 설명한다.
<링크>
트랜잭션 모델 하에서 각 트랜잭션은 데이터베이스가 트랜잭션 실행 전에 일관된 상태였다면 적절한 완료 작업 이후에도 일관된 상태로 유지할 수 있도록 설계되어야 한다.