본문 바로가기
Library&Framework

[Backend] 데이터베이스 트랜잭션(Transaction)이란? (1)

by 우지uz 2024. 5. 13.

트랜잭션은 개발자라고 하면 제대로 알고 있어야 하는 개념이다. 

하지만 트랜잭션은, 다양한 영역에서 흔히 사용되는 개념이다. 
HTTP (request와 response로 이루어진 단위) 단위에서의 트랜잭션도 존재하며, DB의 상태를 기준으로하는 트랜잭션도 존재한다. 

이 트랜잭션이라는 것은, 어떤 특정한 기준에서의 작업의 단위를 말한다. 
이 글에서는 데이터베이스 트랜잭션은 무엇이고 어떤 특징을 가지고 있으며, 트랜잭션의 상태와 연산에 대해 다룰 것이다.

트랜 잭션에 대해서, 기본과 원리를 이해하고 추후 서비스 영역에서 트랜잭션 처리를 어떻게 해야할지 고민하게 될때
올바른 이해와 정확성을 위해 트랜잭션에 대한 시리즈를 포스팅할 계획이다.
이번 포스팅에서는, 흔히 말하는 Database 에서 Transaction 은 무엇인가?에 대해서 알아보고자 한다.

 

 

1. 데이터 베이스 트랜잭션이란?

 

데이터 베이스에서 트랜잭션이란, 데이터 베이스의 상태(Select, insert, update, delete)를 변화시키기 위한 작업의 단위를 말한다.
작업의 단위는, 서비스의 목적이나 기준에 따라 정해진다. 

예를 들어, 회원 가입 서비스로직을 진행할때에 

1) 회원 테이블의 생성
만을 목적으로 할 것 인지,
2) 회원 테이블과 회원 프로필 테이블의 생성
을 목적으로 할 것인지를 든다면

한 트랜잭션으로 묶어서 처리할지, "회원 테이블" 저장 트랜잭션과 "프로필 테이블" 저장 트랜잭션을 각각으로 처리할지는
설계한 목적이나 기준에 따라 다를 수 있다.

사용자 혹은 개발자 입장에서는 작업의 논리적 단위이고
시스템의 입장에서는 데이터들을 접근 또는 변경하는 프로그램의 단위가 된다.

 

2. 트랜잭션의 4가지 특징 : ACID

 

Atomicity (원자성)
트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않았거나를 보장하는 특징이다. (All or Nothing).
트랜잭션이 원자처럼 더 이상 쪼개지지 않는 하나의 프로그램 단위로 동작해야 한다는 의미이다.
COMMIT, ROLLBACK 같은 트랜잭션 제어 명령어 (Transaction Control Language)를 이용한다.



Consistenty (일관성)
- 트랜잭션의 작업 처리 결과는 항상 일관성 있어야 한다.

- 시스템이 가지고 있는 고정 요소는 트랜잭션 수행 전과 수행 후의 상태가 같아야 한다는 말로,
DB의 제약조건을 위배하는 작업을 트랜잭션 과정에서 수행할 수 없음을 나타낸다.
- 일관성은 데이블이 생성 시 CREATE문과 ALTER문의 무결성 제약조건을 통해 명시된다.

ex) 송금 시 금액의 데이터 타입을 정수형(integer)에서 문자열(string)로 변경할 수 없음.



Isolation (독립성)
- 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
- 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
- 동시에 수행되는 트랜잭션은 상호 존재를 모르고 독립적으로 수행된다.
- 독립성을 유지하기 위해서는 트랜잭션이 변경 중인 임시 데이터를 다른 트랜잭션이 읽고 쓸 때 제어가 필요하다. -> 동시성 제어



Durability (지속성)
- 트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 한다.
- 트랜잭션이 정상적으로 완로(commit) 혹은 부분완료(partial commit)한 데이터는 DBMS가 책임지고 데이터베이스에 기록하는 성질이다.
- 버퍼내용 기록 전에 시스템 다운 등으로 실패하면 트랜잭션이 수행한 작업을 모두 원상복구한다.

 

3. 트랜잭션의 상태

 

Active
트랜잭션 활동 상태
트랜잭션이 실행 중이며 동작 중인 상태를 말한다.

Partially Committed
트랜잭션의 COMMIT 명령이 도착한 상태

트랜잭션의 COMMIT 이전 SQL문이 수행되고, COMMIT 만 남은 상태를 말한다.
(트랜잭션의 마지막 연산까지 실행하고 COMMIT 연산을 실행하기 직전의 상태)

Failed
트랜잭션 실패 상태
더이상 트랜잭션이 정상적으로 진행될 수 없는 상태를 말한다.

Committed
트랜잭션 완료 상태
트랜잭션이 정상적으로 완료된 상태를 말한다.

Aborted
트랜잭션 취소 상태

트랜잭션이 취소되고, 트랜잭션 실행 이전 데이터로 돌아간 상태를 말한다.
(트랜잭션 수행을 실패하고 ROLLBACK 연산을 실행한 상태)

 

 

4. 트랜잭션의 연산

(1) COMMIT 연산

Commit 연산은 하나의 논리적 단위(트랜잭션)에 대해서 작업이 성공적으로 끝났고, 데이터베이스가 다시 일관된 상태에 있을때
이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다. 

(2) ROLLBACK 연산

하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨드렸을 때, 
이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 
취소(Undo)하는 연산이다. 

Rollback 시에는 해당 트랜잭션을 재시작 하거나, 폐기한다. 

 

Reference 

https://velog.io/@shasha/Database-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%A0%95%EB%A6%AC

 

[Database] 트랜잭션 정리

트랜잭션 총 정리

velog.io

https://developsd.tistory.com/128

 

알아도 어려운 트랜잭션 개념정리

트랜잭션은 백엔드 개발자라면 제대로 알고 있어야 하는 개념이다. 간단한 서비스만 개발한다면 덜 중요하게 느껴지기도 하겠지만 복잡한 서비스를 개발하고 운영을 하다보면 중요성을 느끼게

developsd.tistory.com

https://hy-ung.tistory.com/113

 

[Backend 개발자 면접 준비] 데이터베이스 - 트랜잭션(Transaction)

트랜잭션이란? 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 트랜

hy-ung.tistory.com

https://zeromin-code.tistory.com/57

 

[Database] 트랜잭션과 무결성

1. 트랜잭션 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다. 즉, 여러 개의 쿼리들을 하나로 묶는 단위를 말한다. 특징으로는 원자성, 일관성, 독립성, 지속성이

zeromin-code.tistory.com