트랜잭션이란?
트랜잭션은 ACID(원자성, 일관성, 격리 및 지속성) 속성이 있는 작업 그룹입니다. 트랜잭션을 지원하면 개발 프로세스를 간소화하고 애플리케이션을 더욱 강력하게 만들면서 새로운 유형의 애플리케이션을 개발할 수 있습니다. 이 항목의 나머지 부분에서는 이러한 속성의 필요성을 보여 주는 시나리오와 각 속성을 정의하는 테이블을 제공합니다.
원자성 작업 그룹에서는 그룹의 모든 작업이 성공해야 하거나 모든 작업의 효과를 취소해야 합니다(롤백이라고도 함). 예를 들어 은행 송금은 한 계좌의 이체와 다른 계좌에 대한 크레딧이라는 두 가지 작업의 원자성 집합이어야 합니다. 직불 및 크레딧은 원자성 그룹으로 구현되어야 합니다. 이 두 작업이 모두 성공하지 못하면 이체는 은행이나 계좌 보유자에게 부당하게 유리합니다.
일관성 요구 사항은 트랜잭션 이후에 데이터가 일관됨을 의미합니다(트랜잭션 전에 일관된 시스템으로 시작했다고 가정). 은행 이체 예제의 경우 일관성은 두 계좌의 결합된 계좌 잔액이 일정한 것으로 정의될 수 있습니다. 은행 이체 예제에서 일관성을 구현하려면 직불 및 신용 운영이 동일한 금액에 대한 것이어야 합니다.
트랜잭션의 또 다른 예는 웹 사이트에 대한 업데이트입니다. 전자 상거래 사이트에서는 새 제품을 설명하는 제품 세부 정보 페이지와 정확히 동시에 새 제품 범주 탐색 페이지가 표시되어야 합니다. 이 경우 트랜잭션의 제어 하에 여러 디렉터리 항목을 업데이트하고 추가해야 합니다. 업데이트가 원자성일 뿐만 아니라 현재 쇼핑 중인 고객이 진행 중인 업데이트를 볼 수 없어야 합니다. 트랜잭션의 격리 속성의 예입니다.
내구성의 속성은 업데이트가 완료된 후 시스템이 응답을 중지하더라도 해당 효과가 유지되어야 합니다. 이전 예제에서는 시스템이 응답을 중지한 후 사이트에 새 제품을 추가하는 것을 나타내는 모든 새 파일 시스템 항목이 표시되도록 적절한 데이터 복구를 통해 내구성을 제공할 수 있습니다. 이를 위해서는 데이터 백업, 복구 및 고가용성 메커니즘이 있는 시스템이 필요합니다.
트랜잭션의 원자성 및 다른 속성의 보장은 이전 실패의 복구 단계에서 발생하는 오류를 포함하여 많은 오류에 직면합니다. 결국 시스템은 두 가지 상태 중 하나에 도달합니다. 모든 작업이 적용되었거나 작업이 적용되지 않았습니다.
트랜잭션의 속성은 다음 표에 요약되어 있습니다.
용어 | 설명 |
---|---|
원자 |
트랜잭션의 모든 작업이 성공하거나 어떤 작업도 유지되지 않습니다. |
일관 된 |
트랜잭션이 시작되기 전에 데이터가 일관되면 트랜잭션이 완료된 후에 일관성이 유지됩니다. |
격리 |
진행 중인 트랜잭션의 효과는 다른 모든 트랜잭션에서 숨겨집니다. |
튼튼한 |
트랜잭션이 완료되면 결과는 지속되며 시스템 충돌에서 유지됩니다. |
이러한 속성을 사용하면 예기치 않은 상황이 성공적으로 완료되지 않는 경우 단순히 트랜잭션을 중단할 수 있으므로 소프트웨어에서 예기치 않은 오류를 처리할 수 있습니다. 트랜잭션 인프라를 통해 중단된 트랜잭션의 모든 효과가 롤백되어 데이터가 일관된 상태로 반환됩니다. 따라서 트랜잭션 시스템을 사용하면 시스템 오류로부터 정상적으로 복구할 수 있습니다.
ACID 속성을 보장하려면 트랜잭션을 지원하는 시스템에는 필요에 따라 트랜잭션을 커밋하거나 롤백하는 데 사용할 수 있는 강력한 로깅 기능이 있어야 합니다. 자세한 내용은 일반 로그 파일 시스템을 참조하세요.