CS 지식

트랜잭션이란?

Nowon9159 2022. 7. 3. 22:43
반응형

Transaction (https://fauna.com/blog/database-transaction)

Transaction 이란? 데이터베이스의 상태를 변화하기 위해서 수행하는 작업의 논리적 단위 또는 한꺼번에 모두 수행되어야 하는 일련의 연산들을 의미한다.

 

DB로 SQL 쿼리를 보냄으로써 DB의 상태를 변화시킨다.

작업 단위란 사용자가 특정 기능의 수행을 위해 SQL 작업을 묶은 단위를 의미한다.

 

SELECT

INSERT

DELETE

UPDATE

가 있다.

 

트랜잭션은 ACID라는 4가지의 특성을 만족해야한다.

 

Automicity 원자성

트랜잭션 내부에서 실행된 작업들은 모두 성공해서 commit 되거나, 문제가 발생한다면 rollback을 통해 모두 취소 돼야한다. 작업 중 일부분만 성공할수 없다는 소리.

 

DB를 수정할 때 지금까지의 성공적인 상태가 롤백 이미지로 롤백 세그먼트라는 임시 영역에 저장된다. 만약 문제가 생겨서 롤백이 일어난다면 롤백 세그먼트 내의 상태가 복구된다. 트랜잭션을 commit 한 후에는 DB에 수정사항이 영구적으로 반영되기 때문에 롤백 세그먼트의 롤백 이미지도 날라간다.

 

만약 긴 트랜잭션 때문에 문제가 생겨서 롤백이 되면 문제 발생 지점의 바로 직전 단계까지는 savepoint를 설정 할 수 있게끔 되어있다.

 

savepoint 는 트랜잭션 내부에서 사용자가 지정할 수 있는 세부 작업 단위이다.

 

Consistency 일관성

모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야한다.

트랜잭션 전 후의 DB 상태가 Correct State여야 한다고 하는데, Correct State는 도메인의 유효범위, 무결성 제약조건 등의 제약조건을 위배하지 않는 정상적인 상태를 의미한다.

 

예를들어 데이터 타입이 정수형이라면 트랜잭션 이후에도 정수형으로 유지 돼야 하며, null 값을 제한 해놓은 컬럼에 null 값이 들어가 있으면 안된다. 또한 연관관계에서 변경이 일어났으면 외래키 값도 정상적으로 변경되어야 한다.

 

Isolation 격리성

각각의 트랜잭션은 서로 간섭 없이 독립적으로 수행되어야 한다.

트랜잭션은 기본적으로 원자성, 일관성 그리고 지속성을 보장해준다. 하지만 격리성의 경우 완전히 보장하려면 각각의 트랜잭션을 순서대로 처리해야한다. 하여 격리성의 수준을 여러 단계로 나눠놓았다.

 

READ UNCOMMITED

 

READ COMMITED

 

REPEATABLE READ

 

SERIALABLE

 

Durability 지속성

성공적으로 수행된 트랜잭션은 영원히 기록된다. 중간에 시스템 문제가 발생 했을 때 데이터베이스 로그를 참고해서 성공했던 트랜잭션을 복구할 수 있다.

 

출처: https://devjem.tistory.com/27

 

반응형