트랜잭션이란? 트랜잭션 개념 트랜잭션 정의 Transaction이란? DB, SQL

 

이번 포스팅은 트랜잭션(Transaction)에 대해 알아보겠습니다!

 

트랜잭션이란 무엇일까요?

Transaction 단어의 본래 뜻은 거래 라는 의미가 있죠. 은행에서 돈을 입금하고 송금하고 출금할 때의 거래를 말하는데요, 그래서인지 데이터베이스에서 사용하는 트랜잭션 개념을 설명할 때는 은행 거래를 예를 드는 경우가 많습니다.

데이터통신 시스템에서 관리의 대상이 되는 기본적인 정보를 기록한 기본파일(master file)에 대해서 그 내용에 추가, 삭제 및 갱신을 가져오도록 하는 행위(거래)를 트랜잭션이라고 합니다. 예를 들면, 입하, 출하, 매상, 반품, 임금, 출금, 정정 등의 데이터를 말하며, 이동정보라고도 합니다.

쉽게 얘기해서 하나의 작업을 수행하기 위해 필요한 데이터베이스의 연산들을 모아놓은 것을 말하고, 논리적인 작업의 단위가 됩니다.

 

아직도 무슨말인지 모르시겠다면!!

 

예시를 보겠습니다.

부산의 고향을 떠나 서울에서 일하고 있는 A씨는 매달 고향에 계신 부모님께 생활비를 보내고 있습니다. 그래서 월급날이 되자 A씨는 월급 통장(B)에서 부모님의 통장(C)으로 돈을 송금합니다. 이 때 은행 측에서 볼 때는 출금과 입금이 각각 1번씩 발생하게 됩니다. 그런데 부모님 통장으로 돈을 입금하는 순간(매우 짧은 간격)에 네트워크 장애로 인해 C통장에 돈이 입금되지 않은 상황이 발행한거죠. B통장에는 돈이 출금되었지만 C통장에는 입금되지 않은 것입니다. A씨의 돈 일부가 공중으로 사라져 버리게 되는데요, 그렇다면 은행에서는 이런 경우를 어떻게 처리할까요?

 

 

출금과 입금이 1번씩 발생하지만 은행에서는 송금 자체를 하나의 트랜잭션(거래)으로 보고 B통장에서 출금한 돈이 C통장에 정확히 입금이 확인되면 그 때 거래를 성사시킵니다.(COMMIT을 발생시키는거죠)

따라서 위의 경우처럼 네트워크 장애로 인해 출금만 발생하고 입금이 되지 않았을 경우에는 이를 모두 취소(ROLLBACK)하게 됩니다. 이렇게 처리해야 A씨의 돈이 사라지지 않고 다시 송금을 할 수 있기 때문이죠. A씨는 아마도 첫번째 송금 시 "은행 전산장애로 인해 거래가 성립되지 않았습니다." 와 비슷한 경고문을 보게 될 것입니다.

 

즉, 데이터베이스에서도 트랜잭션의 의미는 위의 경우와 같습니다. 다른 점이 있다면 개발자는 명시적으로 COMMIT이나 ROLLBACK을 선언해 주어야 한다는 점이죠. 하나의 트랜잭션이 어디서부터 어디까지인지를 선언해 주어야 합니다.

 

 

일반적으로 단위업무 프로세스를 하나의 트랜잭션으로 잡게 되는데, 구현하는 시스템의 처리에 따라 다르게 됩니다. 위의 예에서는 출금과 입금을 한 번의 송금으로 보고 이를 하나의 트랜잭션으로 보는 것입니다.

 

트랜잭션 정리

 

트랜잭션의 행위는 COMMIT과 ROLLBACK을 이룬다고 볼 수 있겠습니다. 트랜잭션의 모든 명령문이 완벽하게 처리되거나 하나도 처리되지 않아야 데이터베이스가 모순이 없는 일관된 상태를 유지할 수 있습니다. 트랜잭션은 데이터베이스에 장애가 발생했을 때 복구 작업을 수행하거나, 다수의 사용자가 동시에 사용할 수 있도록 제어 작업을 하는 데 중요한 단위로 사용됩니다. 그러므로 데이터베이스의 무결성과 일관성을 보장하려면 작업을 수행하는 데 필요한 연산들을 하나의 트랜잭션으로 제대로 정의하고 관리해야 합니다. 일반적으로 데이터베이스를 변경는 INSERT문, DELETE문, UPDATE문 실행을 트랜잭션으로 관리합니다.

 

그럼 다음 포스팅에서 뵙겠습니다^^

 

반응형