Azure Face API를 사용하는 중에 가격을 측정할 때 트랜잭션으로 하는 것을 알 수 있다. 그래서 트랜잭션에 대하여 공부를 시작하였다.
트랜잭션이란, 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위로서, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻합니다.
데이터베이스의 상태를 변화시킨다는 것은 질의어(SQL)를 이용하여 데이터베이스를 접근하는 것을 의미한다.
질의어(SQL) 중에서 UPDATE, INSERT, DELETE 등 데이터를 수정하는 DML 문이 트랜잭션 대상이 되고, SELECT 문장은 직접적인 트랜잭션 대상은 아니지만, SELECT FOR UPDATE 등 배타적 LOCK을 요구하는 문장은 트랜잭션 대상이 될 수 있습니다.
트랜잭션의 목적
데이터베이스 기능 중, 트랜잭션을 조작하는 기능은 사용자가 데이터베이스 완전성(integrity) 유지를 확신하게 한다.
단일 트랜잭션은 데이터베이스 내에 읽거나 쓰는 여러 개 쿼리를 요구한다 이때 중요한 것은 데이터베이스가 수행된 일부 쿼리가 남지 않는 것이다. 예를 들면, 송금을 할 때 한 계좌에서 인출되면 다른 계좌에서 입금이 확인되는 것이 중요하다. 또한 트랜잭션은 서로 간섭하지 않아야 한다. 트랜잭션의 특성에 대해 더 많은 정보를 보려면, ACID를 참조.
간단한 트랜잭션은 아래 양식의 SQL 언어로 데이터베이스 내에서 실행된다.
- Begin the transaction
- Execute several queries (DB내 갱신이 아직 적용되지 않는다)
- Commit the transaction (트랜잭션이 성공적이며, 갱신이 실제 적용됨)
만약 쿼리 하나가 실패하면, 데이터베이스 시스템은 전체 트랜잭션 또는 실패한 쿼리를 롤백한다. 이것은 DBMS가 어떻게 사용되고 셋업 되었느냐에 따라 다르다. 트랜잭션은 커밋 전에 언제든지 수동으로 롤백될 수 있다.
트랜잭션의 특징(ACID)
ACID란, 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다.
특성 | 설명 |
Atomicity (원자성) |
트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 에러가 발생하면 트랜잭션 전부가 취소되어야 한다. |
Consistency (일관성) |
트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다. 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다. |
Isolation (독립성, 격리성) |
둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없으며, 수행 중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행결과를 참조할 수 없다. |
Durability (영속성, 지속성) |
성공적으로 완료된 트랜잭션의 결과는 영구적으로 반영되어야 한다. |
그러나, 실제로는 성능향상을 위해 이런 특성들이 종종 완화되곤 한다.
어떤 시스템들에서는 트랜잭션들은 논리적 작업 단위(LUW, Logical Units of Work)로 불린다.
트랜잭션 연산 및 상태
- Commit연산
Commit 연산은 한 작업의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났고 데이터베이스가 다시 일관된 상태에 있을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.
- Rollback연산
Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(UNDO)시키는 연산으로 해당 트랜잭션을 재시작하거나 폐기한다.
https://terms.naver.com/entry.naver?docId=3483740&cid=58439&categoryId=58439