1. 트랜잭션
•
데이터베이스에서 하나의 논리적인 기능을 수행하기 위한 작업의 단위
•
여러 개의 쿼리들을 하나로 묶는 단위를 말한다.
•
ACID 특징
◦
원자성
◦
일관성
◦
독립성
◦
지속성
2. 원자성, Automicity
•
all or nothing
•
트랜잭션과 관련된 일이 모두 수행이 되었거나 되지 않았거나를 보장하는 특징이다.
•
트랜잭션을 커밋했는데, 문제가 발생하여 롤백하는 경우, 그 이후에 모두 수행되지 않음을 보장하는 것을 말한다.
•
1000만원을 가진 짱구가 0원을 가진 철수에게 500만원을 준다고 가정해보면 아래와 같은 순서로 operation 들이 수행될 것이다.
◦
먼저 짱구의 잔액을 조회한다.
◦
500만원을 짱구의 계좌에서 뺀다.
◦
500만원을 철수의 계좌로 전달한다.
•
하지만 일반 사용자의 입장에서는 이 과정을 알 수 없고 알 필요도 없이, 그냥 500만원의 숫자가 바뀐 것만 볼 수 있다.
•
만약 위의 operations 들이 롤백된다고 가정해보자. 그렇다면, 최종 결과는 다시 짱구가 1000만원, 철수가 500만원을 가지고 있어야 하겠지만, 일부만 수행될 경우, 짱구가 500만원, 철수가 0원인 경우가 발생할 수 있다.
◦
이 경우가 원자성이 보장되지 않은 경우일 것이다.
3. 일관성, Consistency
•
트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것
•
데이터베이스에 기록된 모든 데이터는 여러가지 조건, 규칙에 따라서 유효함을 가져야 한다.
◦
허용된 방식으로만 데이터를 변경해야한다.
•
예시
◦
모든 계좌에는 잔고가 1원이라고 있어야 한다면, 이를 위반하는 트랜잭션은 중단된다.
◦
0월을 가진 철수는 1000만원을 가진 짱구에게 입금할 수 없다.
◦
모든 고객은 반드시 이름을 가지고 있어야 한다는 제약사항이 있다면 (name = PK)
▪
이름이 없는 고객을 추가할 수 없다.
▪
기존 고객의 이름을 삭제할 수 없다.
4. 격리성 / 독립성 isolation
•
트랜잭션 수행시에 서로 끼어들지 못하는 것을 말한다.
•
복수의 병렬 트랜잭션은 서로 격리되어서 마치 순차적으로 실행되는 것처럼 작동되어야 한다.
◦
트랜잭션이 동시에 실행될 때와, 연속으로 실행될 때, 데이터베이스 상태가 동일해야한다.
◦
그냥 순차적으로 하면 쉽게 되겠지만, 성능이 나빠질 것이다.
•
데이터베이스는 여러 사용자가 같은 데이터에 접근할 수 있어야 한다.
•
격리성을 지키는 각 트랜잭션은 철저히 독립적이다. 따라서 다른 트랜잭션의 작업내용을 알 수가 없다.
•
격리수준을 나누어서 이를 기준으로 격리성을 보장한다.
5. 지속성, durability
•
성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것을 의미한다.
•
데이터베이스에 시스템 장애가 발생해도 원래 상태로 복구하는 회복 기능이 있어야 한다는 것을 의미한다.
◦
모든 트랜잭션은 로그로 남고, 시스템 장애 발생 전 상태로 되돌릴 수 있다.
◦
로그에 모든 것이 저장된 후에만 commit 상태로 간주할 수 있다.
•
이를 위해 데이터베이스에서는 체크섬, 저널링, 롤백 등의 기능이 제공된다.
6. 무결성
•
데이터의 정확성, 일관성, 유효성을 유지하는 것을 말하며, 무결성이 유지되어야 데이터베이스에 저장된 데이터 값과 그 값에 해당하는 현실 세계의 실제 값이 일치하는 지에 대한 신뢰가 생긴다.
◦
개체 무결성 : 기본키로 선택된 필드는 빈 값을 허용하지 않는다.
◦
참조 무결성 : 서로 참조 관계에 있는 두 테이블의 데이터는 항상 일관된 값을 유지해야한다.
◦
고유 무결성 : 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 그 속성값은 모두 고유한 값을 가진다.
◦
NULL 무결성