트랜잭션 특성

이민준·2021년 8월 18일
0

cs

목록 보기
4/4

트랜잭션 정의

트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.

홍길동이 아무개에게 송금하는 과정을 생각해보자.

  1. 홍길동의 계좌에서 돈이 출금된다.

  2. 아무개의 계좌에 돈이 입금된다.

그런데 여기서 1번과 2번 사이에서 오류가 생긴다고 가정해보자. 그러면 홍길동의 계좌에서는 돈이 빠져나갔는데 아무개의 계좌에는 돈이 입금이 안되는 큰 문제가 발생한다.

이러한 문제를 해결하기 위해서 정상 거래가 되었을 때 디비에 반영하고, 그게 아니라면 전부 롤백하는 과정이 필요하다.

이렇게 거래의 안전성을 확보하는 방법이 트랜잭션의 원자성이다.

부분 작업들 여러개가 모여진 이러한 트랜잭션을 처리하기 위해 데이터베이스는 다음의 두가지 명령어를 활용하는데,

바로 커밋과 롤백이다.

  • 커밋: 모든 부분작업이 정상적으로 완료하면 이 변경사항을 한꺼번에 DB에 반영한다.

  • 롤백: 부분 작업이 실패하면 트랜잭션 실행 전으로 되돌린다.

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

이때, 모든 연산을 취소하지 않고 정해진 부분까지만 되돌리고 싶을 때 사용하는 것이 savepoint이다.

트랜잭션의 특성

다음은 데이터의 무결성을 보장하기 위하여 DBMS의 트랜잭션이 가져야할 특성이다.

원자성 : 트랜잭션의 연산은 데이터베이스에 모두 반연되도록 커밋이 되던지 아니면 아예 반영되지 않도록 롤백되어야 한다. 즉 일부분만 반영되면 안된다.

일관성 : 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다. 시스템이 가지고 있는 고정 요소는 트랜잭션 수행전과 트랜잭션 수행 완료후의 상태가 같아야한다.

독립성 : 둘 이상의 트랜잭션이 동시에 발생하는경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다.
수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션이세 수행결과를 참조할 수 없다.

영속성 : 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.

이 4가지 Atomicity, Consistency, Isolation, Durability를 모아서 트랜잭션의 특성 ACID라고 부른다.

profile
러닝커브가 장점인 개발자입니다.

0개의 댓글