Transaction은 다수의 DML을 묶어서 한 번에 처리하며 ACID 원칙을 따른다.
|
Transaction과 ACID
트랜잭션은 일련의 DML을 하나의 원자적인 단위로 처리하는 것을 의미한다. 트랜잭션으로 묶인 DML이 모두 성공하였을 때 COMMIT이 되지만, 중간에 실패한 경우 트랜잭션이 시작되기 직전의 상태로 ROLLBACK 한다. 트랜잭션은 ACID를 만족하며 이는 Atomicity, Consistency, Isolation, Durability를 의미한다.
(1) Atomicity: 트랜잭션은 원자적인 단위로서 묶인 DML을 한 번에 처리한다.
(2) Consistency: 트랜잭션을 처리하면서 테이블의 constraint는 여전히 만족한다. DML을 처리하면서 테이블 스키마로 정한 constraint를 위배하는 경우 ROLLBACK 한다.
(3) Isolation: 다수의 트랜잭션이 잘 조직되어서 서로 간섭하지 않도록 처리한다.
(4) Durability: 트랜잭션에 의해서 COMMIT 되면 변경사항이 데이터베이스에 안전하게 보관된다.
Business Rule을 강제하기 위한 Trigger
Trigger는 조건에 따라서 시작되는 명령을 의미한다. Trigger는 사용해서 Business Rule을 강제할 수 있다. 예를 들어 데이터가 INSERT 되기 전에 유효성을 확인해야 한다면, INSERT가 Trigger 조건이 되어서 유효성 관련 처리가 자동으로 이루어지도록 할 수 있다. 또한 특정 이벤트가 발생했을 때 필요한 DML을 Trigger를 통해 자동 실행되도록 할 수 있다. Summary Table을 관리하는 경우 레코드가 변경되면 그에 따른 Summary도 변경되어야 하는데 이를 Trigger를 통해 처리할 수 있다.
Operational Database와 Analytic Database 비교
Operational Database는 빈번한 CRUD 과정을 처리한다. 이 과정에서 Business Rule을 따르는지 확인해야 하므로 Trigger와 Transaction을 적극 활용하여서 데이터의 일관성을 유지한다. 이러한 시스템을 OLTP(Online Transaction Processing)라고 한다.
Analytic Database는 Operational Database가 수집한 데이터를 ETL과정을 통해 Bulk Load 한다. 따라서 Business Rule에 대한 유효성이 Operational Database에 수집되면서 검증되었기 때문에 Trigger나 Transaction의 필요성이 다소 떨어진다. 대신 복잡한 연산을 효과적으로 처리하기 위해서 Trigger나 Transaction을 지원하지 않는 경우가 많다.