728x90

트랜잭션

데이터베이스 관리 시스템에서 데이터베이스의 상태를 변경하는 작업의 단위를 말합니다. 이 작업은 데이터의 삽입, 갱신, 삭제와 같은 데이터 조작 작업을 포함할 수 있습니다. 트랜잭션은 데이터베이스의 일관성, 무결성, 동시성, 지속성 등을 보장하기 위해 사용됩니다.

 

트랜잭션의 중요한 특성

  • 원자성 : 트랜잭션 하나의 원자적 작업 단위로 처리되어야 합니다. 즉 작업들은 모두 성공하거나 모두 실패해야 합니다. 어느 하나라도 실패할 경우 이전의 상태로 롤백됩니다.
  • 일관성 : 트랜잭션이 수행되기 전과 후에 데이터베이스는 일관된 상태를 유지해야 합니다.
  • 독립성 : 여러 트랜잭션이 동시에 실행될 때, 한 트랜잭션이 다른 트랜잭션의 중간 상태를 볼 수 없어야 합니다. 이를 통해 데이터의 격리성을 보장합니다.
  • 지속성 : 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 데이터베이스에 반영되어야 합니다. 시스템 장애나 중단이 발생하더라도 데이터 손실이 발생하지 않아야 합니다.

트랜잭션의 상태

여러 단계를 거쳐 실행되며, 각각의 단계마다 다양한 상태를 가집니다. 일반적으로 데이터베이스 관리 시스템에서 사용되는 트랜잭션의 상태는 다음과 같습니다.

 

  • 활동 : 트랜잭션이 시작되었지만 아직 실행이 완료되지 않은 상태를 말합니다. 이 상태에서는 트랜잭션이 수행 중인 작업을 처리하고 있습니다.
  • 부분 완료 : 모든 작업이 완료되었고, 트랜잭션의 결과를 데이터베이스에 반영하기 전의 단계입니다. 이 시점에서 트랜잭션은 성공적으로 완료될 것으로 예상됩니다.
  • 완료 : 트랜잭션이 성공적으로 종료되었으며, 데이터베이스에 변경 내용이 반영된 상태입니다. 이제 데이터베이스는 트랜잭션의 결과를 영구적으로 유지합니다.
  • 실패 : 트랜잭션 실행 중에 오류나 문제가 발생하여 트랜잭션이 중단되었을 때 상태를 말합니다. 이 경우 트랜잭션은 롤백되거나 재시작되어야 할 수 있습니다.
  • 취소 : 트랜잭션이 사용자나 시스템에 의해 강제로 중단되었을 때의 상태입니다. 이 경우 트랜잭션의 변경 내용은 롤백되어 이전 상태로 복구됩니다.
  • 보류 : 트랜잭션이 다른 트랜잭션을 기다리는 상태를 말합니다. 보류 상태의 트랜잭션은 다른  트랜잭션이 완료되기를 기다리며 실행을 계속하지 않습니다.

DBMS 구조

데이터베이스 관리 시스템은 데이터베이스를 관리하고 사용하기 위한 소프트웨어 시스템 입니다. DBMS는 복잡한 구조를 가지며 다양한 구성 요소를 구성됩니다.

1. 데이터베이스 엔진 : DBMS의 핵심 부분으로 데이터의 저장, 검색, 갱신, 삭제등을 처리합니다.

2. 메타데이터 관리 : 데이터베이스의 메타데이터를 관리합니다. 테이블, 컬럼, 제약 조건, 인덱스 등의 구조 및 정의 정보가 포함됩니다.

3. 보안 및 권한 관리 : 데이터베이스의 보안을 관리하고 사용자에게 적절한 권한을 부여합니다. 사용자 인증, 권한 부여, 접근 제어 등을 처리합니다.

4. 복구 관리 : 시스템 장애나 오류 시 데이터의 복구 작업을 관리합니다. 로그 기록을 활용하여 데이터의 지속성과 일관성을 유지합니다.

5. 병행 제어 : 동시에 여러 트랜잭션이 실행될 때 데이터 일관성을 유지하기 위한 기능을 수행합니다. 동시성 제어는 락 기반의 접근 제어나 다른 병행 제어 매커니즘을 통해 구현될 수 있습니다.

6. 최적화기 : 사용자가 제출한 쿼리를 분석하여 실행 계획을 최적화합니다. 쿼리 실행 계획을 생성할 때 효율적인 인덱스 선택, 조인 순서 등을 결정합니다.

7. 트랜잭션 관리 : 트랜잭션의 원자성, 일관성, 독립성, 지속성을 보장하며, 트랜잭션 실행, 커밋, 롤백 등을 관리합니다.

8. 커넥션 관리 : 클라이언트 애플리케이션과 데이터베이스 간의 연결을 관리하며, 세션 관리 및 폴링과 같은 기능을 수행합니다.

 

 

트랜잭션 관리를 위한 DBMS

DBMS에서는 효율적이고 안정적인 트랜잭션 관리를 위해 다양한 저력과 기술을 사용합니다. 이러한 전략은 데이터베이스의 일관성, 독립성, 격리성,지속성을 보장하면서 동시에 효율적인 처리를 지원합니다.

 

  • 로그 : 대부분의 DBMS에서는 트랜잭션 실행 내역을 로그에 기록하는 방식을 사용합니다. 로그에는 트랜잭션의 시작, 작업수행, 커밋 또는 롤백과 같은 정보가 기록되어 있어 시스템 장애나 중단 시에 복구 작업을 수행할 수 있습니다.
  • 격리 수준 : 트랜잭션의 격리 수준은 여러 트랜잭션이 동시에 실행될 때 어떤 수준으로 격리되는지 결정합니다. 대표적인 격리 수준으로는 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE 등이 있습니다. 격리 수준은 동시성과 일관성 사이에서 트레이드 오프를 조정하는 역할을 합니다.
  • 동시성 제어 : 동시에 여러 트랜잭션이 실행되는 환경에서의 데이터 일관성을 보장하기 위한 기술입니다. 동시성 제어를 통해 트랜잭션들이 서로 간섭하지 않고 독립적으로 실행될 수 있도록 합니다. 대표적인 동시성 제어 기법으로는 락기반의 접근제어나 낙관적 동시성 제어 등이 있습니다.
  • 복구 관리 : 시스템 장애나 중단 시에 트랜잭션의 데이터 일관성과 지속성을 보장하기 위한 기술입니다. 트랜잭션의 로그를 활용하여 데이터베이스를 이전 상태로 복구하거나 커밋되지 않은 트랜잭션을 롤백하는 작업을 수행합니다.
  • 데이터 정합성 제약 : 데이터베이스 내의 데이터가 정해진 규칙에 따라 일관된 상태를 유지할 수 있도록 정의된 제약조건을 활용합니다. 이를 통해 트랜잭션 실행 시 무결성이 보장됩니다.
  • 병행 제어 : 동시에 여러 트랜잭션이 실행되는 환경에서의 데이터 일관성을 보장하기 위한 기술입니다. 동시성 제어를 통해 트랜잭션들이 서로 간섭하지 않고 독립적으로 실행될 수 있도록 합니다. 대표적인 병행 제어 기법으로는 락기반의 접근 제어나 낙관적 동시성 제어등이 있습니다.
728x90

'BackEnd > 더 깊은 데이터베이스 지식' 카테고리의 다른 글

데이터베이스 정규화  (0) 2023.08.22
ACID  (0) 2023.08.18
ORM  (0) 2023.08.17