1. 들어가며
데이터베이스 영역에서 트랜잭션은 데이터의 일관성과 신뢰성을 보장하는 데 중요한 역할을 합니다. 트랜잭션은 단일 작업 단위로 수행되어야 하는 데이터베이스 작업 집합입니다. 트랜잭션을 통해 데이터베이스 시스템은 데이터 무결성 및 안정성에 필수적인 데이터의 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 보장할 수 있습니다.
먼저 데이터베이스 트랜잭션을 정의하고 데이터 일관성과 안정성을 보장하는 데 있어 트랜잭션의 중요성을 논의합니다. 그런 다음 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 포함한 트랜잭션의 속성과 ACID 준수에 기여하는 방식을 검토합니다.
2. 트랜잭션(Transactions) 이란? [1]
데이터베이스 트랜잭션(Database Transaction)은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위입니다. 여기서 유사한 시스템이란, 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미합니다.
이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability) 을 보장합니다. 이 성질을 첫 글자를 따 ACID 라 부릅니다. 그러나, 실제로는 성능 향상을 위해 이런 특성들이 종종 완화되곤 합니다.
어떤 시스템들에서는 트랜잭션들은 논리적 작업 단위(LUW, Logical Units of Work)로 불립니다.
3. 트랜잭션(Transactions)의 목적 [1]
데이터베이스 기능 중 트랜잭션을 조작하는 기능은 데이터베이스 완전성(integrity)을 유지할 수 있도록 사용자에게 확신을 줍니다.
단일 트랜잭션은 데이터베이스 내에서 여러 개의 쿼리를 읽거나 쓰기 위해 요구됩니다. 이때 중요한 점은 데이터베이스 내에서 수행된 일부 쿼리가 남지 않도록 하는 것입니다. 예를 들어, 송금을 할 때 한 계좌에서 인출이 일어나면 다른 계좌에서 입금이 확인되는 것이 중요합니다. 또한 트랜잭션은 서로 간섭하지 않아야 합니다.
트랜잭션의 특성에 대해서는 ACID를 참조하시기 바랍니다.
간단한 트랜잭션은 아래와 같은 SQL 언어로 데이터베이스 내에서 실행됩니다.
- Begin the transaction
- Execute several queries (DB내 갱신이 아직 적용되지 않는다)
- Commit the transaction (트랜잭션이 성공적이며, 갱신이 실제 적용됨)
만약 쿼리 중 하나가 실패하면, 데이터베이스 시스템은 전체 트랜잭션 또는 실패한 쿼리를 롤백합니다. 이것은 DBMS가 사용되고 설정된 방식에 따라 다를 수 있습니다. 또한, 트랜잭션은 커밋하기 전에 언제든지 수동으로 롤백될 수 있습니다.
트랜잭션을 지원하는 데이터베이스를 트랜잭셔널 데이터베이스(transactional database)라고 합니다. 현재 대부분의 관계형 데이터베이스 관리 시스템은 트랜잭션 데이터베이스입니다. 리눅스의 Namesys Reiser4 파일시스템과 마이크로소프트 NTFS의 새로운 버전도 모두 트랜잭션을 지원합니다.
5. 트랜잭션(Transactions) 의 특성
5-1. 원자성 (Atomicity)
이체 과정 중에 트랜잭션이 실패하게 되어 예금이 사라지는 경우가 발생해서는 안 되기 때문에 DBMS는 완료되지 않은 트랜잭션의 중간 상태를 데이터베이스에 반영해서는 안 된다. 즉, 트랜잭션의 모든 연산들이 정상적으로 수행 완료되거나 아니면 전혀 어떠한 연산도 수행되지 않은 상태를 보장해야 한다. atomicity는 쉽게 'all or nothing' 특성으로 설명된다
- 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다. 2. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
5-2. 일관성 (Consistency)
고립된 트랜잭션의 수행이 데이터베이스의 일관성을 보존해야 한다. 즉, 성공적으로 수행된 트랜잭션은 정당한 데이터들만을 데이터베이스에 반영해야 한다. 트랜잭션의 수행을 데이터베이스 상태 간의 전이(transition)로 봤을 때, 트랜잭션 수행 전후의 데이터베이스 상태는 각각 일관성이 보장되는 서로 다른 상태가 된다. 트랜잭션 수행이 보존해야 할 일관성은 기본 키, 외래 키 제약과 같은 명시적인 무결성 제약 조건들뿐만 아니라, 자금 이체 예에서 두 계좌 잔고의 합은 이체 전후가 같아야 한다는 사항과 같은 비명시적인 일관성 조건들도 있다.
- 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
- 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
5-3. 독립성 (Isolation)
여러 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 다른 트랜잭션의 수행에 영향을 받지 않고 독립적으로 수행되어야 한다. 즉, 한 트랜잭션의 중간 결과가 다른 트랜잭션에게는 숨겨져야 한다는 의미인데, 이러한 isolation 성질이 보장되지 않으면 트랜잭션이 원래 상태로 되돌아갈 수 없게 된다. Isolation 성질을 보장할 수 있는 가장 쉬운 방법은 모든 트랜잭션을 순차적으로 수행하는 것이다. 하지만 병렬적 수행의 장점을 얻기 위해서 DBMS는 병렬적으로 수행하면서도 일렬(serial) 수행과 같은 결과를 보장할 수 있는 방식을 제공하고 있다.
- 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다. 2. 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
5-4. 영구성(Durability)
성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.
- 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.
6. 마치며
결론적으로 데이터베이스 트랜잭션은 데이터의 원자성, 일관성, 격리 및 내구성을 가능하게 하는 데이터베이스 시스템의 중요한 구성 요소입니다. 트랜잭션은 특히 전자 상거래 및 금융 시스템과 같이 데이터 오류의 결과가 심각할 수 있는 애플리케이션에서 데이터의 신뢰성과 무결성을 보장하는 데 중요한 역할을 합니다. 이 문서에 설명된 통찰력과 기술을 통해 데이터베이스 설계자와 관리자는 데이터베이스가 ACID를 준수하고 동시 트랜잭션을 효과적으로 관리하여 데이터의 신뢰성과 일관성을 보장할 수 있습니다. 새로운 기술과 기술의 발전은 성능, 확장성 및 안정성 향상을 목표로 데이터베이스 트랜잭션의 환경을 지속적으로 형성할 것입니다.
REFERENCE
1. 들어가며
데이터베이스 영역에서 트랜잭션은 데이터의 일관성과 신뢰성을 보장하는 데 중요한 역할을 합니다. 트랜잭션은 단일 작업 단위로 수행되어야 하는 데이터베이스 작업 집합입니다. 트랜잭션을 통해 데이터베이스 시스템은 데이터 무결성 및 안정성에 필수적인 데이터의 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 보장할 수 있습니다.
먼저 데이터베이스 트랜잭션을 정의하고 데이터 일관성과 안정성을 보장하는 데 있어 트랜잭션의 중요성을 논의합니다. 그런 다음 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 포함한 트랜잭션의 속성과 ACID 준수에 기여하는 방식을 검토합니다.
2. 트랜잭션(Transactions) 이란? [1]
데이터베이스 트랜잭션(Database Transaction)은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위입니다. 여기서 유사한 시스템이란, 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미합니다.
이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability) 을 보장합니다. 이 성질을 첫 글자를 따 ACID 라 부릅니다. 그러나, 실제로는 성능 향상을 위해 이런 특성들이 종종 완화되곤 합니다.
어떤 시스템들에서는 트랜잭션들은 논리적 작업 단위(LUW, Logical Units of Work)로 불립니다.
3. 트랜잭션(Transactions)의 목적 [1]
데이터베이스 기능 중 트랜잭션을 조작하는 기능은 데이터베이스 완전성(integrity)을 유지할 수 있도록 사용자에게 확신을 줍니다.
단일 트랜잭션은 데이터베이스 내에서 여러 개의 쿼리를 읽거나 쓰기 위해 요구됩니다. 이때 중요한 점은 데이터베이스 내에서 수행된 일부 쿼리가 남지 않도록 하는 것입니다. 예를 들어, 송금을 할 때 한 계좌에서 인출이 일어나면 다른 계좌에서 입금이 확인되는 것이 중요합니다. 또한 트랜잭션은 서로 간섭하지 않아야 합니다.
트랜잭션의 특성에 대해서는 ACID를 참조하시기 바랍니다.
간단한 트랜잭션은 아래와 같은 SQL 언어로 데이터베이스 내에서 실행됩니다.
- Begin the transaction
- Execute several queries (DB내 갱신이 아직 적용되지 않는다)
- Commit the transaction (트랜잭션이 성공적이며, 갱신이 실제 적용됨)
만약 쿼리 중 하나가 실패하면, 데이터베이스 시스템은 전체 트랜잭션 또는 실패한 쿼리를 롤백합니다. 이것은 DBMS가 사용되고 설정된 방식에 따라 다를 수 있습니다. 또한, 트랜잭션은 커밋하기 전에 언제든지 수동으로 롤백될 수 있습니다.
트랜잭션을 지원하는 데이터베이스를 트랜잭셔널 데이터베이스(transactional database)라고 합니다. 현재 대부분의 관계형 데이터베이스 관리 시스템은 트랜잭션 데이터베이스입니다. 리눅스의 Namesys Reiser4 파일시스템과 마이크로소프트 NTFS의 새로운 버전도 모두 트랜잭션을 지원합니다.
5. 트랜잭션(Transactions) 의 특성
5-1. 원자성 (Atomicity)
이체 과정 중에 트랜잭션이 실패하게 되어 예금이 사라지는 경우가 발생해서는 안 되기 때문에 DBMS는 완료되지 않은 트랜잭션의 중간 상태를 데이터베이스에 반영해서는 안 된다. 즉, 트랜잭션의 모든 연산들이 정상적으로 수행 완료되거나 아니면 전혀 어떠한 연산도 수행되지 않은 상태를 보장해야 한다. atomicity는 쉽게 'all or nothing' 특성으로 설명된다
- 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다. 2. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
5-2. 일관성 (Consistency)
고립된 트랜잭션의 수행이 데이터베이스의 일관성을 보존해야 한다. 즉, 성공적으로 수행된 트랜잭션은 정당한 데이터들만을 데이터베이스에 반영해야 한다. 트랜잭션의 수행을 데이터베이스 상태 간의 전이(transition)로 봤을 때, 트랜잭션 수행 전후의 데이터베이스 상태는 각각 일관성이 보장되는 서로 다른 상태가 된다. 트랜잭션 수행이 보존해야 할 일관성은 기본 키, 외래 키 제약과 같은 명시적인 무결성 제약 조건들뿐만 아니라, 자금 이체 예에서 두 계좌 잔고의 합은 이체 전후가 같아야 한다는 사항과 같은 비명시적인 일관성 조건들도 있다.
- 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
- 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
5-3. 독립성 (Isolation)
여러 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 다른 트랜잭션의 수행에 영향을 받지 않고 독립적으로 수행되어야 한다. 즉, 한 트랜잭션의 중간 결과가 다른 트랜잭션에게는 숨겨져야 한다는 의미인데, 이러한 isolation 성질이 보장되지 않으면 트랜잭션이 원래 상태로 되돌아갈 수 없게 된다. Isolation 성질을 보장할 수 있는 가장 쉬운 방법은 모든 트랜잭션을 순차적으로 수행하는 것이다. 하지만 병렬적 수행의 장점을 얻기 위해서 DBMS는 병렬적으로 수행하면서도 일렬(serial) 수행과 같은 결과를 보장할 수 있는 방식을 제공하고 있다.
- 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다. 2. 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
5-4. 영구성(Durability)
성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.
- 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.
6. 마치며
결론적으로 데이터베이스 트랜잭션은 데이터의 원자성, 일관성, 격리 및 내구성을 가능하게 하는 데이터베이스 시스템의 중요한 구성 요소입니다. 트랜잭션은 특히 전자 상거래 및 금융 시스템과 같이 데이터 오류의 결과가 심각할 수 있는 애플리케이션에서 데이터의 신뢰성과 무결성을 보장하는 데 중요한 역할을 합니다. 이 문서에 설명된 통찰력과 기술을 통해 데이터베이스 설계자와 관리자는 데이터베이스가 ACID를 준수하고 동시 트랜잭션을 효과적으로 관리하여 데이터의 신뢰성과 일관성을 보장할 수 있습니다. 새로운 기술과 기술의 발전은 성능, 확장성 및 안정성 향상을 목표로 데이터베이스 트랜잭션의 환경을 지속적으로 형성할 것입니다.
REFERENCE