트랜잭션

2022. 6. 29. 18:26카테고리 없음

트랜잭션은 데이터베이스를 변화시킬 수 있는 하나의 논리적 단위이며 여러개의 연산이 수행 될 수 있다.

 

그렇다면 이 논리적 단위란 무엇일까?

메리가 제로에게 돈을 보낸다고 과정해보자.

이 과정을 하나의 트랜잭션이라고 할때 몇개의 연산이 수행되었을까?

 

이 과정을 하나하나 쪼개 보면 우선

1. 메리의 계좌에서 돈이 빠져나간다.

2. 제로의 계좌에 돈이 더해진다.

 

이렇게 총 2개의 연산이 수행되었다. 이 두 연산이 하나의 논리적 단위(돈을 보내는 행위)라고 볼 수 있다.

 

 

트랜잭션에는 아주 중요한 특징이 있다. 

하나의 트랜잭션은 커밋되거나 롤백된다는 특징이다. 

 

커밋 

하나의 트랜잭션이 성공적으로 끝나고 일관된 상태에 있을 때 트랜잭션이 잘 끝난것을 알려주기 위해 사용되는 연산이다.

롤백

트랜잭션 처리가 비정상적으로 끝났을때 이 트랜잭션이 행한 모든 연산을 취소하는 연산이다.

 

 

Atomicity

한 트랜잭션이 전부 반영되거나 전혀 반영되지 않는 특징이다.

 

그렇다면 메리와 제로의 입장에 대입해서 생각해보자.

메리의 계좌에서 돈이 빠져나간 후에 문제가 생겼다고 가정해보자. 그러면 메리의 계좌에 돈이 빠진 후에 제로의 계좌에 아무런 변화가 없으면 아주 큰일이 발생한것이다. 돈이 날라간것이다. 

 

하지만 Atomicity의 성질로 해당 트랜잭션은 중간에 문제가 생기면 메리의 돈도 빠져나가지 않는다.

 

Consistency

트랜잭션의 처리 결과가 일관성이 있어야 한다는 특징이다.

메리와 제로의 경우의 입출금에서 어떤점이 consistency가 지켜졌다 말할 수 있을까?

 

우선 consistency가 지켜지지 않았다면 어떻게 될까?

메리의 출금한 돈과 제로가 입금받은 돈이 일정하지 않고 다를것이다. 즉 메리의 계좌에서 6000원이 빠져나갔는데 제로의 계좌에 1000원만 들어간것이다. 그래서 출금 가격과 입금가격이 다른데 얼마나 억울할까

 

Isolation

둘 이상의 transaction이 실행되는 경우, 어느 하나의 트랜잭션이 다른 트랜잭션에 끼어둘 수 없다.

 

메리의 통장에서 출금된 후 제로의 통장에 입금되기전에 에디가 메리의 통장에서 출금하려한다면 

제로의 통장에서 입금이 된 후 해당 트랜잭션이 끝난후 에디가 메리의 통장

 

Duration

성공적으로 완료된 트랜잭션은 결과가 영구적으로 반영되어야 한다.

이미 적용된 메리의 출금과 제로의 입금은 그대로 유지되어야한다.