트랜잭션(Transaction)이란??
by AMAD
트랜잭션이란??
데이터베이스 내에서 수행되는 작업의 최소 단위로, 데이터베이스의 무결성을 유지하며 DB의 상태를 변화시키는 기능을 수행한다. 트랜잭션은 하나 이상의 query를 포함해야 하고, ACID라고 하는 4가지 특성(원자성, 일관성, 고립성, 지속성)을 만족해야 한다.
예시를 들어 설명하자면 이렇다.
A가 은행시스템을 이요하여 B에게 입급하는 상황을 가정한다.
A의 잔고에서 100만원을 출금하였는데, 이 때 전산오류가 생겨서 B의 계좌에는 100만원이 입급 되지 않는다면?
이런 상황은 전산시스템의 치명적인 오류이다.
이렇게 예상치 못한 오류가 발생하여 데이터의 부정합이 발생하는 경우 다시 원상복귀 해야 한다. 따라서 입, 출금은 개별 작업이 아닌 하나의 묶음 형태로 작동해야 한다.
출금을 했으면 입금을 마치던지, 아니면 출금도 없고 입금도 없는 아예 없던 일이 되어야 한다.
이런 식으로 두 행위는 분리 될 수 없는 하나의 거래로 처리돼야 하는 단일 업무로 이러한 업무 처리의 최소 단위를 데이터베이스에서는 트랜잭션 이라고 한다.
트랜잭션이 필요한 이유는??
데이터를 다룰 때 장애가 일어나는 경우 트랜잭션은 장애 발생시 데이터를 복구하는 작업의 단위가 되기 때문이다.
또한 데이터베이스에서 여러 작업이 동시에 같은 데이터를 다룰 때가 있는데 이때에도 트랜잭션을 통해 작업을 서로 분리하고, 이를 통해 오류가 발생하지 않게 하기 위해서이다.
트랜잭션의 특성(ACID)
Atomicity(원자성): 트랜잭션에 포함된 작업은 전부 수행되거나 아니면 전부 수행되지 말아야 한다. (all or nothing)
Consistency(일관성): 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지 되어야 한다.
(ex.송금 전후 모두 잔액의 data type은 integer이여야 한다.)
Isolation(고립성): 여러 트랜잭션은 동시에 수행된다. 이때 각 트랜잭션은 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하여 독립적으로 작업을 수행하는 것을 말한다. 따라서 동시에 수행되는 트랜잭션이 동일한 data를 가지고 충돌하지 않도록 제어를 해줘야 하는데 이를 동시성 제어(concurrency control)이라고 한다.
Durability(지속성): 성공적으로 수행된 트랜잭션은 데이터베이스에 영원히 반영되어야 한다. 트랜잭션이 완료되어 저장이 된 데이터베이스는 저장 후에 생기는 정전, 장애, 오류등에 영향을 받지 않아야 한다.
동시성 제어(concurrency control)란??
여러 개의 트랜잭션이 한 개의 데이터를 동시에 갱신(update)할 때 어느 한 트랜잭션의 갱신이 무효화 될 수 있는데 이를 갱신손실 이라고 한다. 동시성 제어를 통해 갱신손실을 미리 막을 수 있다.
어떻게??
트랜잭션이 동시에 수행될 때 일관성을 해치지 않도록 트랜잭션의 데이터 접근을 제어한다. 한마디로 데이터를 수정중에 있는 트랜잭션은 해당 데이터를 lock으로 잠금장치를 하여 다른 트랜잭션이 접근하지 못하게 막는다. lock이 걸린 데이터는 unlock이 될 때까지 다른 트랜잭션들은 접근하지 못하고 기다려야 한다.
트랜잭션의 COMMIT 과 ROLLBACK
데이터베이스는 COMMIT과 ROLLBACK 명령어를 통해 데이터 무결성을 보장한다.
COMMIT: 트랜잭션 작업을 완료했다고 확정하는 명령어이다. 트랜잭션 작업내용을 실제 DB에 저장하고, DB가 변경된다.
ROLLBACK: 작업 중 문제가 발생했을때, 트랜잭션 처리 과정에서 발생한 변경사항을 취소하고, 이전 COMMIT의 상태로 되돌리는것을 말한다.
데이터베이스 교착상태(Deadlock) 이란?
두 트랜잭션이 각각 lock을 설정하고, unlock을 하지 않은 상태에서 서로의 lock이 걸린 데이터에 접근하려고 할 때, 서로 대기를 계속하여 영원히 처리 되지 않는 상태를 말한다.
Deadlock 해결 방법
예방 기법: 각 트랜잭션이 실행되기 전에 필요한 데이터를 모두 locking해주는 것. 하지만 lock해줘야 하는 데이터가 많다면 사실상 모든 데이터를 전부 locking한 것과 동일하여 트랜잭션의 병행성을 보장하지 못할 수 있다.
회피 기법: 자원을 할당할 때 time stamp를 사용하여 deadlock이 일어나지 않도록 회피하는 방법.
탐지/회복 기법: 트랜잭션이 실행되기 전에는 아무런 검사를 하지 않고 deadlock이 발생하면 이를 감지하고 회복시키는 방법.
'CS' 카테고리의 다른 글
페이징과 세그먼테이션 (0) | 2023.04.29 |
---|---|
프로세스(process)란?? (0) | 2023.02.19 |
Cache란?? (0) | 2023.02.05 |
쿠키와 세션 (0) | 2023.02.05 |
HTTP란? (0) | 2023.02.05 |
블로그의 정보
성장 하고 싶은 개발자
AMAD