1. 트랜잭션
트랜잭션(transaction)이란 "쪼갤 수 없는 업무 처리의 최소 단위"를 말한다.
1초당 처리할 수 있는 트랜잭션의 개수는 TPS로 표기한다.
트랜잭션 처리가 정상적으로 완료된 경우 커밋(commit),
오류가 발생할 경우 원래 상태대로 롤백(rollback)한다.
2. 목적
데이터를 처리하는 과정에서 데이터 부정합을 방지하고자 할 때 사용
3. 트랜잭션의 조건
트랜잭션이 안전하게 수행되기 위한 4가지 필수적인 성질을 ACID라고 한다.
ACID는 Atomicity(원자성), Consistency(일관성), Isolation(고립성), Durability(지속성)을 의미
3-1. Atomicity(원자성)
- 더 이상 작게 쪼갤 수 없는 최소한의 업무 단위라는 의미
- 트랜잭션이 데이터베이스에 모두 반영되던지, 아니면 전혀 반영되지 않아야 하며 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것
- 즉, All or Nothing의 개념으로서 작업 단위를 일부분만 실행하지 않는다는 것을 의미
- 트랜잭션에서 원자성은 수행하고 있는 트랜잭션에 의해 변경된 내역을 유지하면서, 이전에 커밋된 상태를 임시 영역에 따로 저장함으로써 보장한다. 즉, 현재 수행하고 있는 트랜잭션에서 오류가 발생하면 현재 내역을 날려버리고 임시 영역에 저장했던 상태로 롤백 한다.
3-2. Consistency(일관성)
- 일관성(consistency)은 트랜잭션이 완료된 결괏값이 일관적인 DB 상태를 유지하는 것
- 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다라는 것
- 트랜잭션에서 일관성은 트랜잭션 수행 전/후에 데이터 모델의 모든 제약 조건(기본 키, 외래 키, 도메인, 도메인 제약조건 등)을 만족하는 것을 통해 보장한다.
3-3. Isolation(고립성)
- 고립성(isolation)이란 하나의 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것
- 트랜잭션 끼리는 서로를 간섭할 수 없다.
- 변경한 데이터는 이 트랜잭션이 완료될 때까지 다른 트랜잭션이 참조하지 못하게 하는 특성이다.
- 한 트랜잭션에서 데이터베이스를 변경한 내용은 트랜잭션이 커밋되기 전까지는 다른 어떤 질의나 트랜잭션과도 고립되어야만 한다.
- 병행처리 과정에서 트랜잭션의 고립성이 왜 보장되어야 하는지 알 수 있다. OS의 세마포어(semaphore)와 비슷한 개념으로 lock&excute unlock을 통해 고립성을 보장할 수 있었다.
- 트랜잭션에서는 데이터를 읽을 때, 여러 트랜잭션이 읽을 수는 있도록 허용하는 공유 록(shared_lock)을 한다. 즉, 공유 록은 데이터 쓰기를 허용하지 않고 오직 읽기만 허용하는 것이다.
3-4. Durability(지속성)
- 트랜잭션이 정상적으로 종료된 다음에는 영구적으로 데이터베이스에 작업의 결과가 저장
- 트랜잭션이 정상적으로 완료된 경우에는 버퍼의 내용을 하드디스크(데이터베이스)에 확실히 기록해야 하며, 부분 완료(Partial Commit)된 경우에는 작업을 취소(Aborted)하여야 한다
- 정상적으로 완료 혹은 부분 완료된 데이터는 DBMS가 책임지고 데이터베이스에 기록하는 성질이 지속성이며 영속성이라고 표현하기도 한다.
4. commit, rollback
5. 참고
http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98