[DB] 트랜잭션이란?

박희중·2022년 4월 11일
0
post-thumbnail

트랜잭션

트랜잭션(Transaction)은 데이터베이스 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위를 뜻한다.

작업의 단위는 명령문 하나가 아니다.

하나의 논리적 기능을 수행하기 위한 많은 질의어 명령문들을 하나의 트랜잭션이라 한다.



트랜잭션의 성질

트랜잭션은 ACID라는 4가지 성질을 만족한다.

ACID

Atomicity
Consistency
Isolation
Durability 를 뜻한다.


원자성 (Atomicity)

트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.

트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며,
한 트랜잭션의 명령들 중에 어느 하나라도 오류가 발생하면 해당 트랜잭션은 전부 취소되어야 한다.

트랜잭션은 사람이 설계한 논리적인 작업 단위로, 작업 단위별로 작업해야 사람이 다루는데에 무리가 없다.

만약 트랜잭션 단위로 데이터가 처리되지 않으면,
데이터 처리 시스템을 이해하기 힘들 뿐만 아니라 오류가 발생하였을 때 원인을 찾기가 매우 힘들어진다.


일관성 (Consistency)

트랜잭션이 성공적으로 완료되면 일관성을 유지해야한다.

트랜잭션 완료 후에도 도메인의 유효범위, 무결성 제약조건 등의 제약조건을 위배하지 않아야한다.

예를 들어, 계좌 잔액은 0보다 커야한다는 제약조건을 위반하는 트랜잭션은 중단한다.


고립성 (Isolation)

트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장한다.

트랜잭션끼리는 서로를 간섭할 수 없다.

따라서 고립성은 하나의 트랜잭션 실행내역이 연속적이어야 함을 의미한다.


지속성 (Durability)

성공적으로 수행된 트랜잭션은 데이터베이스에 영구적으로 반영되어야 한다.



트랜잭션 연산 및 상태

Commit 연산

Commit 연산은 한개의 논리적 단위인 트랜잭션에 대한 작업이 성공적으로 끝났고
데이터베이스가 일관된 상태에 있을 때,
이 트랜잭션이 행한 명령이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.

트랜잭션이 성공적으로 완료되었을 때 수행했던 트랜잭션이 로그에 저장되며,
후에 수행했었던 트랜잭션 단위로 Rollback 연산을 할 수 있도록 도와준다.


Rollback 연산

Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸거나 트랜잭션의 일부가 정상적으로 처리되더라도 원자성을 보장하기 위해 이 트랜잭션이 행한 모든 연산을 취소하는 연산이다.

사용자가 트랜잭션 처리된 단위대로 Rollback을 진행할 수도 있다.




참고 : https://ko.wikipedia.org/wiki/ACID

profile
백엔드 엔지니어 박희중입니다.

0개의 댓글