트랜잭션(Transaction)이란?

  • 데이터베이스 트랜잭션(Database Transaction)은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다.
  • 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며 일관되고 믿을 수 있는 시스템을 의미한다.


트랜잭션(Transaction)이란?

  • 데이터베이스 기능 중, 트랜잭션을 조작하는 기능은 사용자가 데이터베이스 완전성 유지를 확신하게 한다.
  • 단일 트랜잭션은 데이터베이스 내에 읽거나 쓰는 여러 개 쿼리를 요구한다. 이 때 중요한 것은 데이터베이스가 수행된 일부 쿼리가 남지 않는 것이다. 예를 들면 송금을 할 때 한 계좌에서 인출되면 다른 계좌에서 입금이 확인되는 것이 중요하다. 또한 트랜잭션은 서로 간섭하지 않아야 한다.
  • 만약 쿼리 하나가 실패하면 데이터베이스 시스템은 전체 트랜잭션 또는 실패한 쿼리를 롤백 한다. 이것은 DBMS 내의 프로그램이 어떤 개발방식이냐에 따라 다르다. 트랜잭션은 Commit전에 언제든지 수동으로 Rollback될 수 있다.


트랜잭션의 4대 특징

  • 원자성(Atomicty)
    • 데이터 조작이 전부 성공 혹은 실패할지 보증하는 구조
    • COMMIT : 조작 과정에 문제 없으면 처리 확정
    • ROLLBACK : 조작 중간에 문제 발생 시 첫 과정 직전 상태로 복귀
  • 일관성(Consistency)
    • 데이터 조작 전후에 일관성 유지 필요
    • 데이터베이스 오브젝트에 정합성 제약 추가 가능
      • Ex) 시스템에 사용자 등록 시 등록번호에 유일성 제약 설정
  • 고립성(Isolation)
    • 복수 사용자가 동시에 데이터 조작 실행할 경우 각각의 처리가 모순 없이 실행되는 것을 보증
    • 복수의 트랜잭션이 순서대로 실행되는 경우와 같은 결과. 데이터베이스 오브젝트에 대해 잠금을 걸어 후속 처리 차단
    • 직렬화 가능 기능(직렬 상태로 복수 트랜잭션 순서대로 처리)DBMS내에서 트랜잭션 격리 수준 설정으로 구현
    • ANSI 표준 격리 수준(직렬화 가능 기능으로 부터 격리 수준 완화)
  • 지속성(Durability)
    • 데이터 조작 완료 후 완료 통지 받는 시점에서 결과 잃지 않는 것
    • 즉 트랜잭션이 Commit 되고 나면 데이터 변경 사항이 영구적으로 확정됨을 보장하는 것
    • 데이터베이스의 이상 종료 등 시스템 장애 경우에도 영구성을 가져야함
    • 트랜잭션 조작을 하드 디스크에 로그로 기록
    • 시스템 이상 발생시 로그를 이용해 이상 발생 전 상태로 복구


정리

  • 예를 들어 온라인 쇼핑을 한다고 가정.
    • 계좌 이체를 하려고 한다.
      1. 내 계좌에서 2만원을 인출 및 이체한다.
      2. 내 계좌에 잔액이 차감된다.
      3. 업체에 내 이름으로 2만원이 입금된다.
      4. 업체 계좌에 잔액이 더해진다.


  • 원자성
    • 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력.
    • 예시와 같이 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다.
    • 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.


  • 일관성
    • 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다.
    • 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.


  • 고립성
    • 트랜잭션을 수행 시 다른 트랜잭션의 연산작업이 끼어들지 못하도록 보장하는 것을 의미한다.
    • 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다.
    • 공식적으로 고립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다.
    • 성능 관련 이유로 인해 이 특성은 가장 유연성 있는 제약조건이다.


  • 지속성
    • 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다.
    • 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다.
    • 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다.
    • 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.


    트랜잭션 로그파일과 트랜잭션의 관계

Leave a comment