개발스토리
회복과 병행 제어 본문
자자자자!!!
회복과 병행 제어를 이해하려면 기본 단위인 트랜잭션의 개념을 알아야 한다.
그러고나서, 데이터베이스를 장애로부터 복구하는 다양한 회복 기법을 익히고, 여러 사용자가 동시에 접근할 수 있도록 트랜잭션 수행을 통제하는 병행 제어 기법을 익혀보자잉
트랜잭션(transaction)
■ 트랜잭션의 개념
- 하나의 작업을 수행하는데 필요한 데이터베이스 연산들을 모아놓은 것
- 작업 수행에 필요한 SQL문 들의 모임. 특히, 데이터베이스를 변경하는 추가, 삭제, 수정문의 실행을 관리
- 논리적인 작업의 단위
- 장애 발생 시 복구 작업이나 병행 제어 작업을 위한 중요한 단위로 사용된다.
- 데이터베이스의 무결성과 일관성을 보장하기 위해 작업 수행에 필요한 연산들을 하나의 트랜잭션으로 제대로 정의하고 관리해야 한다.
■ 트랜잭션의 특성(ACID)
ACID는 중요한 개념이다. 이해하세용~~
ACID는 Atomicity, Consistency, Isolation, Durability의 모임이다! 하나하나 봐보쟈~~
● Atomicity(원자성)
- 트랜잭션의 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 하는 all-or-nothing 방식을 말한다.
- 만약 트랜잭션 수행 도중에 장애가 발생하다면, 지금까지 실행한 연산 처리를 모두 취소하고, 데이터베이스를 트랜잭션 작업 전 상태로 되돌려야 한다.
- 원자성의 보장을 위해 장애 발생 시 회복 기능이 필요하다.
생각해보자,
만약에 성호는 만원을 갖고 있는데 은경이 한테 오천원을 이체했다. 그런데! 오류가 나서 은경이는 오천원을 못 받았다. 근데! 성호 통장에서는 오천원이 빠져나가있네!? 얼마나 억울하겠나... 여기서 이체가 하나의 트랜잭션이고 장애가 발생했다면 작업이 취소되고 성호의 통장에 만원이 고대로 남아있어야 한다. 계좌이체전의 데이터베이스 상태로 돌아가야 한다는 것이다.
● Consistency(일관성)
- 트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관된 상태를 유지해야 한다.
그림으로 이해하자~~
● Isolation(격리성)
- 수행 중인 트랜잭션이 완료될 때까지 다른 트랜잭션들이 중간 연산 결과에 접근할 수 없다.
- 격리성의 보장을 위해서는 여러 트랜잭션이 동시에 수행되더라도 마치 순서대로 하나씩 수행되는 것처럼 정화하고 일관된 결과를 얻을 수 있도록 제어하는 기능이 필요하다.
예를 들어서, 아메리카노를 주문을 했는데 취소를 하고 싶다! 그러면 주문 트랜잭션이 완료되고 취소 트랜잭션이 이루어져야 하고 주문 트잰잭션이 진행중인데 취소 트랜잭션이 끼어들면 안된다는 것이다!
● Durability(지속성)
- 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 영구적이어야 한다.
- 지속성의 보장을 위해서는 장애 발생 시 회복 기능이 필요하다.
정리해볼까~~~~~~~~??
■ 트랜잭션의 주요 연산
● 커밋 연산
- 트랜잭션의 수행이 성공적으로 완료되었음을 선언하는 연산
- 커밋 연산이 실행되면 트랜잭션의 수행 결과가 데이터베이스에 반영되고 일관된 상태를 지속적으로 유지하게 된다.
● 롤백 연산
- 트랜잭션의 수행이 실패했음을 선언하는 연산
- 롤백 연산이 실행되면 트랜잭션이 지금까지 실행한 연산의 결과가 취소되고 데이터베이스가 트랜잭션 수행 전의 일관된 상태로 되돌아 간다.
■ 트랜잭션의 상태
● 활동 상태
- 트랜잭션이 수행되기 시작하여 현재 수행중인 상태
● 부분 완료 상태
- 트랜잭션의 마지막 연산이 실행을 끝낸 직후의 상태
● 완료 상태
- 트랜잭션이 성공적으로 완료되어 커밋 연산을 실행한 상태
- 트랜잭션이 수행한 최종 결과를 데이터베이스에 반영하고 데이터베이스가 새로운 일관된 상태가 되면서 트랜잭션이 종료된다.
● 실패 상태
- 장애가 발생하여 트랜잭션의 수행이 중단된 상태
● 철회 상태
- 트랜잭션의 수행 실패로 롤백 연산을 실행한 상태
- 지금까지 실행한 트랜잭션의 연산을 모두 취소하고 트랜잭션이 수행되기 전의 데이터베이스 상태로 되돌리면서 트랜잭션이 종료된다.
- 철회 상태로 종료된 트랜잭션은 상황에 따라 다시 수행되거나 폐기된다.