트랜잭션이란 "쪼갤 수 없는 업무 처리의 최소 단위"를 말합니다.
거래내역이라고도 합니다. 영어로는 간략하게 Tx라고도 표기합니다.
초당 처리 가능한 트랜잭션의 개수를 TPS라고도 합니다.
트랜잭션은 은행ATM이나 데이터베이스 등의 시스템에서 사용되는 더 이상 쪼갤 수 없는 업무 처리의 최소 단위입니다.
트랜잭션 처리가 정상적으로 완려된 경우 커밋(commit)을 하고, 오류가 발생할 경우 원래 상태대로 롤백(rollback)을 합니다.
트랜잭션은 데이터베이스 서버에 여러 개의 클라이언트가 동시에 액세스 하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 등 데이터 부정합을 방지하고자 할 때 사용합니다.
데이터베이스 기능 중, 트랜잭션을 조작하는 기능은 데이터베이스 완전성(intergrity) 유지를 확신하게 합니다.
단일 트랜잭션은 데이터베이스 내에 읽거나 쓰는 여러 개 쿼리를 요구합니다. 이떄 중요한 것은 데이터베이스가 수행된 일부 쿼리가 남지 않는 것입니다.
트랜잭션은 서로 간섭하지 않아야 합니다. 만약 쿼리 하나가 실패하면 데이터베이스 시스템은 전체 트랜잭션 또는 실패한 쿼리를 롤백 합니다. 이것은 DBMS가 어떻게 사용되고 셋업 되었느냐에 따라 다릅니다.
트랜잭션은 커밋전에 언제든지 수동으로 롤백 될 수 있습니다. 간단한 트랜잭션의 경우 SQL언어로 데이터베이스 내에서 실행됩니다.
- SELECT
- INSERT
- DELETE
- UPDATE
트랜잭션 조건
트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적인 단위로 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위입니다.
하나의 트랜잭션은 커밋되거나 롤백이 됩니다.
데이터베이스의 트랜잭션이 안전하게 수행되기 위해서는 ACID 조건을 충족해야 합니다. ACID란 Atomicity(일관성), Isolation(고립성), Durability(지속성)의 약자로서, 데이터베이스의 트랜잭션이 안전하게 수행되기 위한 4가지 필수적인 성질을 말합니다.
트랜잭션의 원자성
원자성은 하나의 트랜잭션이 더 이상 작게 쪼갤 수 없는 최소한의 업무 단위입니다. 트랜잭션이 데이터베이스에 모두 반영되던지, 아니면 전혀 반영되지 않아야 하며 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것으로 작업 단위를 일부분만 실행하지 않는다는 것을 의미합니다.
트랜잭션 실행 도중 문제가 발생했을 경우 중단된 상태가 아닌 모두 실패하거나, 모두 완성되거나 둘 중 하나의 상태가 되어야 합니다. 즉, 100개의 명령어로 구성된 트랜잭션 중 99개 완료 1실패이면 이는 무조건 실패로 간주하여 트랜잭션 시작 전 상태로 돌려야 합니다. 또한 100개가 모두 성공했을 시 트랜잭션은 성공이기 때문에 중간 상태가 없습니다. 트랜잭션은 사람이 설계한 논리적인 작업 단위이기 때문에 일처리가 작업 단위 별로 이루어져야 사람이 다루는데 무리가 없습니다.
트랙잭션 단위로 데이터가 처리되지 않으면 오작동시 원인을 찾기가 매우 힘들어 진다고 합니다.
트랜잭션 내의 모든 명령은 반드시 완벽하게 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 합니다.
트랜잭션의 일관성
일관성은 트랜잭션이 완료된 결괏값이 일관적인 DB상태를 유지하는 것을 말합니다.
시스탬이 가지고 있는 고정요소는 수행 전과 후의 상태가 같아야 하며 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것으로 트랜잭션이 진행되는 동안 데이터베이스가 변경되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는 것이 아니라, 처음 트랜잭션을 진행하기 위해 참조한 데이터베이스로 진행됩니다.
이렇게 함으로써 각 사용자가 일관성 있는 데이터를 볼 수 있는 것입니다. 트랜잭션 수행 전후의 데이터베이스 상태는 각각 일관성이 보장되는 서로 다른 상태가 됩니다. 트랜잭션 수행이 보존해야 할 일관성은 기본 키, 외래 키 제약과 같은 명시적인 무결성 제약조건들 뿐만 아니라
A에서 B로 돈을 이체할 대 A와 B 계좌의 돈의 총합이 같아야 한다는 사항과 같은 비명시적인 일관성 조건들도 있습니다.
트랜잭션의 고립성
고립성 이란 하나의 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것입니다. 즉 트랜잭션 끼리는 서로를 간섭할 수 없습니다. 트랜잭션이 실행하는 도중에 변경한 데이터는 이 트랜잭션이 완료될 때까지 다른 트랜잭션이 참조하지 못하게 하는 특성이 있습니다. 데이터베이스는 클라이언트들이 같은 데이터를 공유하는 것이 목적이므로
여러 트랜잭션이 동시에 수행되어야 합니다.
이때 트랜잭션은 상호 간의 존재를 모르고 독립적으로 수행되어야 합니다. 고립성은 격리성이라고도 하는데 이를 유지하기 위해서는 여러 트랜잭션이 동시에 접근하는 데이트에 대한 제어가 필요합니다.
동시에 수행되더라도 각각의 트랜잭션은 다른 트랜잭션의 수행에 영향을 받지 않고 독립적으로 수행되어야 합니다. 한 트랜잭션에서 데이터베이스를 변경한 내용은 트랜잭션이 커밋되기 전까지는 다른 어떤 질의나 트랜잭션과도 고립 되어야 합니다.
트랜잭션의 지속성
트랜잭션이 정상적으로 종료된 다음에는 영구적으로 데이터베이스에 작업의 결과가 저장되어야 합니다. 지속성은 트랜잭션의 성공 결과 값은 장애 발생 후에도 변함없이 보관되어야 한다는 것으로 트랜잭션이 정상적으로 완료된 경우에는 버퍼의 내용을 하드디스크(데이터베이스)에 확실히 기록해야 하며, 부분 완료된 경우에는 작업을 취소 하여야 합니다.
정상적으로 완료 혹은 부분 완료된 데이터는 DBMS가 책입지고 데이터베이스에 기록하는 성질이 지속성이며 영속성이라고 표한합니다.
'개인공부' 카테고리의 다른 글
Maven (0) | 2022.08.26 |
---|---|
jdbc docker 연동오류.docker ip확인하기 (0) | 2022.08.08 |
Docker Tomcat mysql 환경 구성 (0) | 2022.08.08 |
STS 예제 진행 (0) | 2022.08.04 |
getBean() 메서드 사용하기 (0) | 2022.07.29 |