Home 트랜젝션(Transaction)의 이해
Post
Cancel

트랜젝션(Transaction)의 이해

개요

아키텍처 일을 배우면서 여러가지 구성에 대해 배우게 된다. DB의 구성부터 보안, 그 외 어플리케이션에 대한 내용까지 확인해야 하지만, 아직 그만한 지식이 부족하다고 생각하여, 이에 대해 정리하는 것이 필요하다고 판단하여 블로그에 글을 적어보게 되었다. 우선 일을 배우게 되면서 DB의 기초 지식들을 파악하는 과정이 필요하여 간단하게 트랜젝션(Transaction)을 알아보도록 하겠다.

트랜젝션 (Transaction)

우리는 DB에 데이터를 등록하거나 갱신을 할 때 SQL을 작성하게 된다. 예를 들어, 내가 타 계좌에 돈을 입금하는 경우, 타 계좌에 돈을 입금했다는 내역과, 내 잔고에서 입금한 금액에서 차감할 수 있도록 데이터를 갱신해야 하는 상황이 발생한다.

그림1

만약에 입금하는 과정에서 입금하는 내역이 추가되었지만, 잔고의 갱신에서 실패하면서 처리가 종료되었을 경우, 입금하는 내역이 추가된 상태에서 DB가 남게 되면서, 입금 내역은 남아있지만, 잔고가 줄어들지 않는 문제가 생길 수 있다.

그림2

이런 경우를 방지하기 위해, 작성하는 처리 방식이 트랜젝션(Transaction)이라고 한다.

정의

트랜젝션은 데이터베이스의 논리적인 작업 단위로 정의를 짓는다. 위의 예시에서의 입금 내역 추가와 잔고의 갱신을 담당하는 INSERT, UPDATE의 쿼리들을 하나로 묶어서, 전체가 성공하거나 혹은 전부 실패해야하는 단위를 나타낸다. 위의 예시를 든다면 이렇게 설명이 가능하다.

그림3

이렇게 전체적인 작업으로 설정하여 전체적으로 쿼리가 성공했을 경우, 작업이 성공했다는 의미로 DB에 정식적으로 쿼리로 인한 반영이 진행된다. 이렇게 정식적으로 DB에 반영이 되는 것을 커밋(Commit)이라고 부른다.

반대로 한 작업이 실패하여 이전에 작업에 영향이 있을 경우, 트랜젝션은 작업이 실패했다는 의미로 판단하여, DB에 처리한 작업들을 모두 되돌려 놓는 작업을 실행한다. 이것을 롤백(Rollback)이라고 부른다.

그림4

트랜젝션의 4대 성질

트랜젝션을 구성하기 위해서는 4가지 성질을 갖추는 것이 중요하며, 이 성질이 없다면, 트랜젝션으로서의 정의를 내릴 수 없다.

원자성 (Atomicity)

  • 트랜젝션은 무조건 성공 혹은 실패의 결과가 일관되어야 함.
  • 전부 성공하거나 혹은 전부 실패해야 함

일관성 (Consistency)

  • 트랜젝션 실행 전/후 의 데이터는 일관되어야 함.
  • 트랜젝션의 실패 이후에 데이터의 변동이 없어야 함

격리성 (Isolation)

  • 각 트랜젝션마다의 간섭없이, 독립적으로 실행되어야 함.
  • 트랜젝션안에서 다른 트랜젝션의 간섭으로 갱신된 데이터는 존재할 수 없어야 함

지속성 (Durability)

  • 트랜젝션의 결과는 보존되어야 함
  • 커밋으로 갱신된 데이터는 DB에 보존되어야 하며, 반대로 롤백된 데이터 역시 그대로 보존되어야 함

어플리케이션 아키텍쳐에 대한 생각

-