데이터베이스/데이터베이스

데이터베이스((데이터베이스(DB) - 트랜잭션(Transaction))

benjykim 2017. 9. 5. 20:01
반응형

* 트랜잭션(Transaction)


* 트랜잭션이란?

: 복수 쿼리를 한 단위로 묶은 것.


갱신은 단일 쿼리만으로 구성된 것이 아니고 복수 쿼리를 연속적으로 수행하는 경우가 대부분이다. 

또한, 갱신 전의 데이터로 SELECT를 사용할 때 이를 포함해 복수 쿼리를 일관된 형태의 한 덩어리로 

다뤄야 한다.



* ACID 특성


1) Atomicity(원자성)

:  원자성이란 데이터의 변경(INSERT/DELETE/UPDATE)을 수반하는 일련의 데이터 조작이 

전부 성공할지 전부 실패할지를 보증하는 구조이다. 


예를 들어, 서울에서 부산으로 가는 기차를 예매하는 과정이 다음과 같다고 하자.

(1) 서울 -> 부산행 좌석을 선택한다.

(2) 해당 좌석을 예매한다.

(3) 대금을 지급한다.


-> 위의 절차가 모두 잘 진행되면 트랜잭션에서는 (1)~(3)를 처리한 후에 COMMIT을 실행해 처리를 확정한다. 

이 경우 각 데이터의 조작은 영구적으로 저장되어 결과가 손실되지 않는다.


Q. 처리 도중에 오류가 발생한다면?

-> 만약, 좌석을 선택했지만 누군가가 먼저 그 좌석을 예매한 경우 혹은 돈이 부족해서 결제하지 못한 경우도 있을 수 있다. 이런 경우에는 'ROLLBACK'을 실행하여 (1)의 직전 상태까지 되돌아갈 수 있다. 또한 통신이 끊기거나 서버가 다운된 경우에도 COMMIT된 것 이외의 것들은 ROLLBACK을 해야 한다.




2) Consistency(일관성)

:  데이터베이스에는 데이터베이스 오브젝트(테이블을 비롯해 DB내에 정의할 수 있는 오브젝트)에 대해 각종 

정합성 제약을 추가할 수 있다. 이는 일련의 데이터 조작 전후에 그 상태를 유지하는 것을 보증하는, 

즉 '일관성'을 유지하기 위한 구조이다.


예를 들면, 시스템에 사용자를 등록할 때 사용자를 임의로 식별하기 위해 일련번호를 사용자에게 발급한다.

이때 이 번호에 유니크 제약(유일성 제약)을 설정하면 중복된 사용자 번호를 저장할 수 없다.




3) Isolation(고립성 또는 격리성)

:  '고립성(격리성)'이란 일련의 데이터 조작을 복수 사용자가 동시에 실행해도 

'각각의 처리가 모순없이 실행되는 것을 보증한다'는 것이다. 


예를 들면, 서울의 지정 호텔에 남은 싱글룸 수가 10개였을 때 

실제로 숙박한 흐름을 프로그래밍하듯이 표현하면 다음과 같다.


(1) 현재 빈 싱글룸의 수를 확인한다(SELECT)

(2) 빈 싱글룸 수에서 1을 빼고 결과를 빈 싱글룸 수로 되돌려 쓴다(UPDATE)


Q. 이것을 사용자 A와 사용자 B가 동시에 수행하면 어떻게 될까?

-> 2명이 방을 확보한다면 원래 빈 싱글룸 수는 2개가 줄어야 하지만, 같은 방을 동시에 확보하게 되면 

빈 싱글름 수는 1개만 줄어들게 된다.



-> 이런 사태가 발생하는 것을 막기 위해 DB에는 데이터베이스 오브젝트인 테이블에 대해 

'잠금(Lock)'을 걸어서 후속 처리를 블록하는 방법이 있다. 

(잠금 단위에는 테이블 전체, 블록, 행 등이 있는데., MySQL에서는 트랜잭션 처리를 할 때 

주로 행 단위의 잠금 기능을 이용한다.) 


앞의 두 가지( (1),(2) )중 (1)번을 처리할 때 'SELECT ~ FOR UPDATE'를 실행하면 SELECT한 행에 잠금이 걸린다. 

이렇게 되면 후속 처리는 해당 잠금이 해제될 때(COMMIT 또는 ROLLBACK)까지 대기하게 되며 올바른 처리를 계속 할 수 있다.




4) Durability(지속성)

:  '지속성'은 일련의 데이터 조작을 완요(COMMIT)하고 완료 통지를 사용자가 받는 시점에서 그 조작이 영구적이 되어 

그 결과를 잃지 않는 것을 나타낸다. 이것은 시스템이 정상일 때만이 아니라 DB나 OS의 이상 종료에도 

견딜 수 있다는 뜻이다.


많은 데이터베이스의 구현에서는 트랜잭션 조작을 하드 디스크에 '로그'로 기록하고 시스템에 이상이 

발생하면 그 로그를 사용해 이상 발생 전의 상태까지 복원하는 것으로 지속성을 실현하고 있다.










*이 포스트는 '데이터베이스 첫걸음'책을 참고하여 작성했습니다.

반응형