기술면접대비

[Database] 트랜잭션(transaction)에 대해 쉽게 알아보자

코드사냥꾼 2020. 2. 18. 23:24

💡 트랜잭션

트랜잭션이란, 간단히 말해 데이터베이스의 상태를 바꾸기 위해 수행하는 작업의 단위를 말한다. 만약 작업이 중단됐을 경우 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 Commit을 수행하는 논리적인 단위이다. 

** ☝🏻 여기서 잠깐, 데이터베이스의 상태를 바꾼다는 것이 무엇을 의미할까요?

Ⅰ. SELECT : 선택
Ⅱ. INSERT : 삽입
Ⅲ. UPDATE : 수정
Ⅳ. DELETE : 삭제

총 4개의 SQL 질의어를 사용하여 데이터베이스에 접근하는 것

 

** ☝🏻 그렇다면 작업의 단위 무엇을 의미할까요?

작업단위는 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것을 의미한다.
게시판을 예로 들어보자
게시판 사용자는 게시글을 작성하고, 올리기 버튼을 누른다.
그 후에 다시 게시판에 돌아왔을때,
게시판은 자신의 글이 포함된 업데이트된 게시판을 보게 된다.
이러한 상황을 데이터베이스 작업으로 옮기면, 사용자가 올리기 버튼을 눌렀을 시,
Insert 문을 사용하여
사용자가 입력한 게시글의 데이터를 옮긴다.
그 후에, 게시판을 구성할 데이터를 다시 SELECT 하여 최신 정보로 유지한다.
여기서 작업의 단위는 INSERT문과 SELECT문 둘다 를 합친것이다. 이러한 작업 단위를 하나의 트랜잭션이라 한다.

 

💡 트랜잭션의 예

위의 트랜잭션에 대해 간략히 설명한 것으로는 이해하기 어려울 수 있으니 예를 보며 이해하도록 하자

▲ 트랜잭션의 예 - 송금과정

A가 B에게 2,000원을 입금하려고 한다. 이때, A는 B에게 돈을 보냈기 때문에 A의 잔고는 8,000원으로 줄었지만 시스템의 오류로 인해 B의 잔액은 변함이 없다. 이러한 경우 A의 2,000원은 사라지게 되어버리는데 이를 방지하고자 트랜잭션의 기능인 Rollback을 사용해서 송금의 첫 단계로 다시 돌아간다. Rollback 수행 후 송금이 정상적으로 완료되었다면 Commit을 통해 하나의 트랜잭션을 종료한다. 이때, 'A의 잔액 감소'와 'B의 잔액 증가'는 위에서 설명한 작업의 단위를 통해 하나의 업무로 동작한다. 즉, 트랜잭션(작업의 단위)은 쪼갤 수 없기 때문에 일부만 동작해선 안된다는 것이 트랜잭션의 핵심이다.

 

💡 Rollback & Commit

  • Rollback : 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스 일관성을 깨뜨렸을 때 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소하는 연산이다. Rollback시에는 해당 트랜잭션을 재시작하거나 폐기한다.
  • Commit : 하나의 트랜잭션 처리가성공적으로 끝났고 데이터베이스가 다시 일관된 상태에 있을 때 이 트랜잭션이 행한 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.

 

💡트랜잭션의 특성(ACID) ⭐⭐⭐⭐⭐

트랜잭션에는 총 4가지의 특성이 존재한다. 4가지 특성의 앞 글자만 따서 ACID 특성이라고 한다.

  • 원자성(Atomicity) : 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것을 말한다. 즉, All or Noting의 개념으로서 작업 단위를 일부분만 실행하지 않는다는 것을 의미한다.
  • 일관성(Consistency) : 트랜잭션이 성공적으로 완료되면 일관적인 DB상태를 유지하는 것이다. 여기서 말하는 일관성이란, 위의 송금 예제에서 금액의 데이터 타입이 정수형(integer)인데, 갑자기 문자열(string)이 되지 않는 것을 말한다. 즉, 송금 전후 모두 금액의 데이터 타입은 정수형이여야 한다는 것이 일관성이다.
  • 격리성(Isolation) : 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것을 말한다. 즉, 트랜잭션끼리는 서로를 간섭할 수 없다.
  • 지속성(Durability) : 성공적으로 수행된 트랜잭션은 영원히 반영이 되는 것을 말한다. commit을 하면 현재 상태는 영원히 보장된다.

 

 

 

[참고자료]

https://victorydntmd.tistory.com/129

 

[DB이론] 트랜잭션(transaction)과 ACID 특성을 보장하는 방법

1. 트랜잭션( transaction ) 트랜잭션이란 질의(query)를 하나의 묶음 처리해서 만약 중간에 실행이 중단됐을 경우, 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 commit을 하는 실행 단..

victorydntmd.tistory.com