Inor

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

Computer Engineering/Database

[DB] 트랜잭션(Transaction)

Inor 2017. 8. 11. 17:26

트랜잭션


 트랜잭션이란 데이터베이스의 상태를 변경 시키기 위한 작업의 단위를 의미 합니다. 하나의 작업을 수행하는 과정에서 중간에 발생한 에러로 정상적인 수행이 완료되지 않았을 경우에 되돌리는 단위가 되기도 합니다. 데이터베이스에 접근해서 데이터를 변경하는 쿼리문을 사용하다보면 하나의 쿼리문으로는 해결하지 못하는 작업이 있습니다. 예를 들어, A 계좌에서 B 계좌로 돈을 입금하는 과정이 있을 수 있습니다. 위의 과정을 수행하는 도중에 시스템에 문제가 생겨서 중간에 작업이 중단 될 수 있습니다. A에서는 돈이 인출된 것으로 나오는데 B에서는 입금이 안된 상황이 발생할 수 있습니다. 이런 과정에서 트랜잭션을 사용하면 좋은데 은행이나 금융권 개발쪽 말을 들어보면 트랜잭션이라는 단어를 많이 들을 수 있고 실제로 많이 사용 하는 것으로 알고 있습니다. 트랜잭션은 ACID 성질이라는 네 가지 성질을 갖고 있습니다.


  • Atomicity(원자성) : 트랜잭션을 수행하는 중간에 나온 상태들을 데이터베이스에 반영하면 안되는 성질 입니다. 즉, 트랜잭션은 완전히 수행 된 상태이거나 아무것도 수행되지 않은 상태를 보장 해줘야 합니다. 완전히 수행된 상태일 경우에는 데이터베이스에 반영하고 중간에 수행이 중지된 경우에는 지금까지 수행된 결과를 데이터베이스에 반영하지 않습니다.
  • Consistency(일관성) : 트랜잭션이 실행을 성공적으로 완려되면 언제나 일관성 있는 데이터베이스 상태로 변환해야 합니다. 위의 예제에서 트랜잭션이 수행되기 전과 후에  A계좌와 B계좌의 총금액 합이 같아야 합니다. 그래야지 일관성이 유지된 것 이라고 볼 수 있습니다.
  • Isolation(독립성) : 트랜잭션이 한번에 여러개가 처리되는 과정에서 트랜잭션의 중간 결과가 다른 트랜잭션에게 숨겨져야 한다는 의미 입니다. 즉, 트랜잭션은 수행 중간에 다른 트랜잭션에게 간섭 받으면 안되고 간섭 해도 안된다는 뜻 입니다. 이런 성질을 만족하기 위해서는 트랜잭션을 순차적으로 실행해야 하지만 DBMS는 병렬 수행 하면서도 순차 수행의 결과를 보장해줍니다.
  • Durability(지속성) : 트랜잭션이 성공적으로 수행되서 Commit 된다면 소프트웨어나 하드웨어에 장애가 생기더라도 그 결과는 보존되야 합니다.

 트랜잭션은 2개 이상의 쿼리문을 묶어서 하나의 커넥션을 구성하고 이것을 DB에 전송하고 이 과정에서 에러가 발생하면 트랜잭션을 수행하기 전의 상태로 돌려 놓습니다. 그렇기 때문에 All Or Nothing 전략이라고 불리기도 합니다.



Commit과 Rollback


 트랜잭션은 Commit과 Rollback을 통해서 하나의 트랜잭션이 정상적으로 수행되거나 비정상적으로 수행 됐을 경우에 데이터베이스에 변경 사항을 적용할지 적용하지 않을지를 결정 합니다.




Commit


  • 모든 작업을 정상적으로 처리 하겠다고 확정하는 명령어 입니다.
  • 트랜잭션이 정상적으로 작업을 수행했을 경우에 작업의 결과를 데이터베이스에 적용 합니다. 
  • Commit 명령어를 수행할 경우에 하나의 트랜잭션 과정을 종료하게 됩니다.



Rollback


  • 트랜잭션 작업을 수행하는 중간에 문제가 발생해서 트랜잭션 작업 중간에 변경된 내용을 데이터베이스에 적용하지 않고 종료하는 명렁어 입니다.
  • 트랜잭션을 수행하기 이전의 상태로 되돌립니다.(이전 Commit 명령어 전까지 복구 합니다.)


'Computer Engineering > Database' 카테고리의 다른 글

[DB] 정규화  (0) 2017.08.14
[DB] 트랜잭션 : Recovery(회복)  (0) 2017.08.14
[DB] 트랜잭션 : Log  (0) 2017.08.14
[DB] 트랜잭션 : undo, redo  (0) 2017.08.13
Comments