티스토리 뷰

트랜잭션과 ACID 특성에 대해 알아보겠습니다.

 

 

 

 

1. 트랜잭션(transaciton)


트랜잭션이란 DBMS에서 데이터를 다루는 논리적 단위를 말한다. 트랜잭션은 완전히 완료되기도 하고 전혀 완료되지 않을 수도 있으며, 데이터베이스 상태를 한결같은 상태로 둔다. 트랜잭션의 전형적인 예는 은행 계좌에서 현금을 인출할 때 일어나는 과정이다. 현금이 계좌에서 인출되거나, 인출되지 않거나 둘 중의 하나일 뿐 외의 결과는 존재하지 않는다.

 

만약 중간에 실행이 중단되었을 경우, 처음부터 다시 실행하는 rollback을 수행하고, 오류 없이 실행을 마치면 commit을 하는 실행 단위를 의미한다. 즉, 한 번 질의가 실행되면 질의가 모두 수행되거나 모두 수행되지 않는 작업 수행의 논리적 단위이다.

 

예를 들어, 친구에게 인터넷 뱅킹으로 10,000원을 송금하는 상황을 가정해보자.

내가 친구에게 송금을 한다면, 나의 계좌에서 10,000원을 차감하고 친구의 계좌에 10,000원을 증가시켜야 한다.

그런데 알 수 없는 오류로 인해 나의 계좌에서는 10,000원이 줄었지만 친구 계좌에는 10,000원이 증가되지 않는다면 어떻게 될까?

나의 10,000원은 공중으로 증발해버리는 문제가 발생한다.

이러한 경우가 생기지 않도록 중간에 오류가 발생하면 다시 처음부터 송금을 하도록 하는 것이 rollback이다.

오류 없이 정상적으로 송금이 됐다면 정상적으로 실행이 끝났으므로 commit을 한다.

즉, 송금 과정을 하나의 트랜잭션이라 볼 수 있다.

 

1. 각 트랜잭션은 하나의 특정 작업으로 시작을 해서 묶여 있는 모든 작업들을 다 완료해야 정상적으로 종료한다.

2. 만약 하나의 트랜잭션에 속해있는 여러 작업 중에서 단 하나의 작업이라도 실패하면, 이 트랜잭션에 속한 모든 작업을 실패한 것으로 판단한다.

3. 작업이 하나라도 실패를 하게 되면 트랜잭션도 실패이고, 모든 작업이 성공적이면 트랜잭션 또한 성공이다.

4. 성공 또는 실패 라는 두 개의 결과만 존재하는 트랜잭션은, 미완료된 작업 없이 모든 작업을 성공해야 한다.

 

⭐️ DBMS의 성능 측정

트랜잭션을 작업수행의 논리적 단위라고 한다.
그렇기 때문에 DBMS의 성능은 초당 트랜잭션의 실행 수( TPS : Transaction per second )로 측정한다.

 

[ 트랜잭션 사용 이유 ] 

트랜잭션은 DB 서버에 여러 개의 클라이언트가 동시에 액세스 하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 등 데이터 부정합을 방지하고자 할 때 사용한다.

프로세스를 병렬로 처리하지 않도록 하여 한 번에 하나의 프로세스만 처리하도록 하면 부정합이 발생하지 않는데, 이는 효율이 너무 떨어진다. 즉, 병렬로 처리할 수밖에 없는 현실적인 상황으로 인해 부정합을 방지하고자 트랜잭션을 사용한다.

 

 

2. ACID의 특성


트랜잭션에는 4가지의 특성이 있고, 4가지의 앞글자만 따서 ACID라 한다.

ACID 트랜잭션은 가능한 최대한의 데이터 안정성과 무결성을 보장해준다. 작업 하나가 일부분만 완료되는 바람에 데이터가 일관적이지 않은 상태가 되는 불상사가 절대로 일어나지 않게 해 준다는 뜻이다. 예를 들어 ACID 트랜잭션이 없다고 가정하면, 데이터베이스 테이블에 몇몇 데이터를 쓰던 중에 예기치 못하게 정전이 되면 데이터 중 일부는 저장이 되고 일부는 저장되지 않는 사태가 발생할 수 있다. 

 

[ 원자성 ]

  • 트랜잭션에 포함 된 작업은 전부 수행되거나 전부 수행되지 않아야 한다.
  • 즉, All or Nothing의 개념으로서 작업이 일부분만 실행되지 않는다는 것을 말한다.

[ 일관성 ] 

트랜잭션을 수행하기 전이나 후나 데이터베이스는 항상 일관된 상태를 유지해야한다.

트랜잭션이 성공적으로 완료되면 일관적인 DB상태, 트랜잭션 이전과 이후 DB의 상태는 이전과 같이 유지되는 것을 말한다.

예를 들어 어떤 테이블의 기본키와 같은 속성은 유지되어야 한다는 것 또는 A에서 B로 돈 이체를 할 때 A와 B계좌의 돈의 총합은 같아야한다

[ 격리성 ]

데이터베이스는 클라이언트들이 같은 데이터를 공유하는 것이 목적이므로 여러 트랜잭션이 동시에 수행되어야 한다.

격리성은 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것을 말한다.(서로 독립적)

실제로 동시에 여래 개의 트랜잭션이 수행될 때, 각 트랜잭션은 고립(격리) 되어 있어 연속으로 실행해도 동일한 결과를 나타낸다.

[ 지속성 ]

완료(commit) 된 트랜잭션은 데이터베이스에 영구적으로 보존되는 것을 말하며, 런타임오류나 시스템 오류가 발생해도 유효하다.

만약 완료 후에 컴퓨터가 꺼진다면 데이터는 이미 저장되었으므로 보존되고, 완료 전에 컴퓨터가 꺼진다면 데이터는 Atomicity 원칙을 따라 트랜잭션 수행하기 전으로 돌아간다.

 

 

[ 트랜잭션과 DBMS ]

 

 

  • DBMS는 원자성을 유지하기 위해 회복(복구)관리자 프로그램을 작동시킴.
  • DBMS는 일관성을 유지하기 위해 동시성 제어 알고리즘과 무결성 제약조건을 활용함.
  • DBMS는 격리성/고립성을 유지하기 위해 동시성 제어 알고리즘을 작동시킴.
  • DBMS는 지속성을 유지하기 위해 회복 관리자 프로그램을 이용함.

어떤 트랜잭션이 실행되다가 장애에 의해 부분 완료되는 상황은 원자성과 지속성이라는 속성에 위배된다. 그래서 DBMS는 이를 유지하기 위해 회복 관리자 프로그램을 이용하는데, 일부만 진행된 트랜잭션을 취소시켜 원자성을 유지할 뿐 아니라 값을 트랜잭션 이전의 상태로 복원시켜 지속성을 유지시켜준다. 또한 일관성과 고립성을 유지하기 위해서 값에 동시에 접근하지 않도록 하므로 동시성 제어(Locking)를 활용하여 이를 해결한다. 파일 시스템과 같은 경우처럼 값이 덮어 씌워지는(Overwrite) 경우 일관성이 무너질 수 있고 그러한 경우는 고립성에 위배되는 경우이므로 Locking을 하여 이를 만족시킨다. 여기에 더해 DBMS는 잘못된 값에 대한 입력이 오면 일관성이 무너질 수 있으므로 이를 유지시키기 위해 무결성 제약조건도 활용한다.

 

[ 기타 개념들 ]

  • 롤백(Rollback): 트랜잭션이 행한 모든 연산을 취소시키거나 트랜잭션을 재시작함.

Rollback 연산은 트랜잭션의 실행 중에 장애가 발생한 경우에 수행된다. 장애가 발생한 경우는 데이터베이스에 일부만 반영되어 일관되지 못한 상태를 가질 수 있으므로 모두 취소하거나 트랜잭션을 재시작해야 한다.

트랜잭션은 아래와 같이 5가지 상태를 가진다.

 

 

  • 활동(Active)
  • 부분완료(Partially Committed)
  • 완료(Committed)
  • 실패(Failed)
  • 철회(Aborted)

활동

트랜잭션이 Begin_transaction으로 부터 실행을 시작하였거나 실행 중인 상태를 의미한다.

 

부분 완료

마지막 명령문을 실행시킨 직후의 상태를 의미하며 실패 또는 완료의 상태로 전이하게 된다.

 

실패

트랜잭션의 실행 중에 장애나 오류가 발생하여 정상적인 실행을 더 이상 할 수 없는 상태이며 Rollback 연산을 수행한 상태인 철회 상태로 전이하게 된다.

 

철회

Rollback에 의해 트랜잭션이 재시작 되거나 강제종료 되는 경우, 철회의 원인이 트랜잭션 자체의 논리적인 오류가 아닌 경우에는 재시작되며, 트랜잭션 철회의 원인이 트랜잭션 내부의 논리적인 오류에 의해 오류를 수정해야 하는 상황이거나 얻고자 하는 데이터가 데이터베이스에 존재하지 않는 경우에 강제 종료 된다.  

 

 

 

 

참고

 

[DB이론] 트랜잭션(transaction)과 ACID 특성을 보장하는 방법

1. 트랜잭션( transaction ) 트랜잭션이란 질의(query)를 하나의 묶음 처리해서 만약 중간에 실행이 중단됐을 경우, 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 commit을 하는

victorydntmd.tistory.com

 

[데이터베이스] 트랜잭션의 ACID 성질 - 하나몬

트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안

hanamon.kr

 

[Database] 8. 트랜잭션, 동시성 제어, 회복

[ 본 사진은 쉽게 배우는 오라클로 배우는 데이터베이스 개론과 실습 ppt에서 캡처했습니다. ] 이번 장에서는 트랜잭션(Transaction), 동시성 제어(Locking or Currency Control), 회복(Recovery)에 대해 알아보

mangkyu.tistory.com

 

트랜잭션 4가지 특징 (ACID)

Transaction_4_Principle 트랜잭션 4가지 특징 ACID ? ㅇㅇ 이번 설날에 대학교 동아리 졸업하신 형들이랑 학교근처에서 술자리를 가졌다. 형들중 한명이 나에게 트랜잭션 4가지 특징을 물었다. 아토믹...

bactoria.tistory.com

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함