TIL-50. 트랜잭션(Transaction)

solarrrrr·2022년 1월 24일
0

Today I Learned

목록 보기
50/74
post-thumbnail

트랜잭션이란?

쪼갤 수 없는 업무 처리의 최소 단위를 말하며 거래내역이라고도 말한다.

A와 B가 금융 거래를 할 때 돈을 보내고 받는 전체 흐름을 하나의 트랜잭션으로 구성하게 된다.

A가 돈을 보냈으나 B가 받지 못했을 경우엔 거래가 성립되지 않으며
제대로 돈을 받았을 때 트랜잭션이 정상적으로 처리된 것으로 간주한다.

이 경우 커밋(commit)을 하고 문제가 발생했을 경우 송금 전 원래 상태로 롤백(rollback) 하게 된다.

개발자는 명시적으로 커밋과 롤백을 선언해 하나의 트랜잭션이 어디서부터 어디까지인가를 지정하게 된다.

트랜잭션의 조건 4가지

1. 원자성
All or Nothing.
트랜잭션이 데이터베이스에 모두 반영되든지 전혀 반영되지 않아야 한다.
작업 단위의 일부분만 실행하지 않는다는 것을 의미한다.
100개의 명령어로 이루어진 트랜잭션에서 99개는 성공했는데 1개를 실패한다면
이 트랜잭션은 무조건 실패로 간주되며, 이 경우 롤백하게 된다.
이런 트랜잭션 단위의 작업이 중요한 이유는 이렇게 처리되지 않으면 설계한 사람이 데이터 처리 시스템을 이해하기 힘들고 오작동 시 원인을 찾기가 어렵기 때문이다.

2. 일관성
트랜잭션이 완료된 결과가 항상 일관적인 DB 상태를 유지한다는 것을 말한다.
트랜잭션이 진행되는 동안 데이터베이스가 변경돼 업데이트가 일어나더라도
업데이트된 데이터베이스와는 별개로 처음 트랜잭션 진행 시 참조했던 데이터베이스로 트랜잭션이 진행됨을 의미한다.

3. 고립성
하나의 트랜잭션 수행 시 다른 트랜잭션이 작업에 끼어들지 못하도록 보장한다.
한 트랜잭션이 실행될 때 변경한 데이터는 이 트랜잭션이 끝날 때까지
다른 트랜잭션에서 참조하지 못하게 한다.
데이터베이스는 클라이언트들이 같은 데이터를 공유하는 것이 목적이므로
여러 트랜잭션이 동시에 수행되어야 하며 각 트랜잭션은 서로의 존재를 모르고 독립적인 수행이 이루어져야 한다.
DBMS의 병행제어 모듈이 트랜잭션의 고립성을 보장한다.

4. 지속성
트랜잭션의 정상적 종료, 즉 성공 이후에는 영구적으로 작업의 결과가 데이터베이스에 저장되어야 한다.
장애가 발생하더라도 성공했던 트랜잭션의 결과값은 데이터베이스에 확실히 기록되어야 하며 이 성질을 지속성 혹은 영속성이라 표현하기도 한다.

트랜잭션의 목적 및 정리

트랜잭션은 데이터베이스 서버에 여러 클라이언트가 동시에 엑세스하거나
응용 프로그램이 갱신을 처리하는 과정에서 중단되는 경우 등
데이터의 부정합을 방지하고자 할 때 사용한다.

트랜잭션의 행위는 커밋과 롤백을 이룬다고 볼 수 있다.
데이터베이스에 장애가 발생했을 때 복구 작업을 수행하거나 다수의 사용자가 동시 사용이 가능하도록 제어하는 중요한 단위로 사용된다.

일반적으로 데이터베이스를 변경하는 INSERT, DELETE, UPDATE문의 실행을 트랜잭션으로 관리한다.

profile
몰입

0개의 댓글