용's

[DB] 트랜잭션(Transaction) 본문

Computer Science/예상면접

[DB] 트랜잭션(Transaction)

TaeYOng's 2015. 11. 20. 18:14



DB에 대해 한번 정리한 적이 있으나(http://gomoveyongs.tistory.com/58) 트랜잭션(Transaction)에 대해 다시 한번 정리해본다. 최근 N사 면접에서 질문이 있었듯이...




이전 포스팅에 트랜잭션을 '데이터베이스의 상태를 변화시키는 논리적 연산의 집합' 이라 하였다. 이것이 필요한 이유를 예로 찾아보면 다음의 예를 쉽게 찾아 볼 수 있다.


"은행 데이터베이스에서 A가 B에게 송금을 하고자 할 때, 송금 버튼은 눌렀지만 B에게 돈이 들어오기 전에 예상치 못한 장애가 발생하여 B가 돈을 받지 못하는 문제가 발생할 수 있다"


이러한 문제를 막기 위해 하나의 작업군(돈이 송금되기 위한 여러개의 작업들)이 하나로 묶어 전부 처리가 되든지, 전부 취소가 되는 작업이 필요하게 된다. 이러한 작업을 위해 트랜잭션이 필요하게 되는 것이다. 그리고 이전의 커밋(Commit)이 일어난 뒤부터 다음의 커밋전까지의 작업이 하나의 트랜잭션이라 볼 수 있는데, 이렇게 트랜잭션 내에서 일군의 작업이 하나의 작업으로 처리되어야 하기 때문에 원자성(Atomicity)이 트랜잭션의 특징이 되는 것이다. 




그럼 나머지 CID(일관성, 독립성, 지속성)은 무엇인지 예로 설명하면, 

일관성(Consistency): B가 돈을 성공적으로 받게 된 후 정당한 자료만이 데이터베이스에 반영되어야 함. 즉, 트랜잭션 수행 전후의 데이터베이스 상태는 각각의 일관성이 보장되는 서로 다른 상태가 된다. 트랜잭션이 보장해야 할 일관성은 기본 키, 외래 키 제약과 같은 명시적 무결성 제약 조건들뿐만 아니라, 예에서의 두 계좌 잔고의 합은 이체 전후가 같아야 한다는 사항과 같은 비명시적인 일관성 조건들도 있다.


독립성(Isolation): B가 현재 잔액을 확인하는 트랜잭션 중에 A의 송금 트랜잭션이 현재 계좌의 잔액을 바꾸는 간섭을 발생시키지 않음. 즉, 동시에 여러개의 트랜잭션이 발생했을 경우 각각의 트랜잭션은 다른 트랜잭션에서 변경되고 있는 자료들에 대해서는 참조하거나 간섭할 수 없어야 한다(쉽게는 한 트랜잭션의 중간 결과가 다른 트랜잭션에게는 숨겨져야 한다는 의미). 이 독립성이 보장되지 않으면 트랜잭션이 Rollback가 같은 원래 상태로 되돌아갈 수 없게 된다. 


지속성(Durability): A의 현금이 인출되는 과정에 변경되는 잔액은 어떠한 간섭없이 저장되어야 하고, 저장된 자료는 손상되지 않아야 함. 커밋이 완료되면(트랜잭션이 성공하면) 로그로 남고 이 로그를 통해 손상되기 전의 자료로 되돌릴 수있다.







참조- http://d2.naver.com/helloworld/407507(시간 날 때 한번 훑어보면 DBMS에 대해 어느정도 이해할 수 있을 듯 하다)









'Computer Science > 예상면접' 카테고리의 다른 글

[DB] DB가 중복을 허락하는 경우  (2) 2015.11.18
[OS#1] 프로세스 통신  (0) 2015.11.15
[JAVA] BigDecimal  (0) 2015.10.12
[Network #4] TCP 제어 알고리즘  (0) 2015.10.12
[DB] 예상 문제  (0) 2015.09.28
Comments