트랜잭션
#
Find similar titles
- 최초 작성자
- 최근 업데이트
Structured data
- Category
- Computer science
컴퓨터 과학분야에서 자주 사용되는 용어 트랜잭션(Transaction)에는 원래 다음과 같은 의미가 있다.
- [불] [업무·교섭·활동 등의] 처리, 집행, 취급[of ‥].
- (처리가 끝난 또는 처리 중인) 업무; (종종 transactions) (상)거래, 매매
- (transactions) (학술 협회·회의 등의) 회보, 보고서, 의사록(proceedings).
- [불][가] [대륙법] 화해, 시담(示談)(compromise).
보통 "처리", "집행", "거래"를 의미하는데, 컴퓨터 과학분야에서는 살짝 다른 의미로 사용된다. 의외로 많은 사람들이 이 단어의 의미를 잘 모른채 사용하고 있다. 본 문서를 통해 그 쉬운 의미와 함께 웹어플리케이션에서의 구현에 대해 알아보려 한다.
Table of Contents
개요 #
컴퓨터 과학분야에 트랜잭션은 "쪼개질 수 없는 업무처리의 단위"를 의미한다. ATM(Automated Teller Machine, 현금자동입출기)로 계좌이체를 한다고 생각해보자. 내 계좌의 잔액에서 이체한 금액만큼 빼는 일과, 상대 계좌의 잔액에서 해당 금액만큼 더하는 일은 쪼개어져서는 안된다. 즉 하나의 업무로 함께 진행되어야 하는 일이다. "더이상 쪼갤 수 없다는" 표현 때문에 이를 원자성(Atomicity)을 보장해야 한다라고 얘기한다. 쪼갤 수 없기 때문에 일부만 동작해선 안된다. 즉, 내 계좌 잔액에서 돈을 빼고, 상대 계좌 잔액을 더하려는 순간 정전이 일어났다면, 내 계좌에서 돈을 뺀 작업은 되돌려져야 한다. 각각의 부분 작업들이 동시에 동작하여 성공하던가, 하나라도 안되면 다 원래로 돌아가던가.
부분 작업들 여러개가 모여진 이러한 트랜잭션을 처리하기 위해 데이터베이스는 다음과 같은 기술을 제공한다.
생물정보분석 관련 시스템을 만든다면, 뭔가 일괄로 동작해야 하는 다수의 부분작업을 하나의 트랜잭션으로 처리하게 할 필요가 있는 경우가 많다. 중간에 예상치 못한 오류가 발생하면, 작업 시작 전으로 되돌려져야 한다.
속성 #
ACID(Atomicity, Consistency, Isolation, Durability)는 데이터베이스 트랜젝션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다. 이를 각각 살펴보면,
- 원자성(Atomicity): 트랜잭션에 속한 작업들이 모두 수행되었는지 아니면 모두 실행이 안되었는지를 보장하는 능력이다. 즉, 중간 단계까지 실행되고 실패하는 일은 없도록 하는 것이다.
- 일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다.
- 고립성(Isolation)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다.
- 지속성(Durability)은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다.
트랜잭션을 지원해야 하는 소프트웨어는 위 4가지 성질을 모두 보장하도록 구현해야 한다.
웹 어플리케이션에서 #
오늘날 대다수의 소프트웨어가 웹(Web) 환경에서 동작한다. 웹 페이지에서 특정 링크를 클릭하는 순간 "요청(Request)"이 발생하고, 서버는 이 요청에 적당한 "응답(Response)"을 만들어 사용자의 웹 브라우저로 보낸다. 만일 인터넷 뱅킹에서 계좌이체를 한다고 하면, 계좌이체 버튼을 누른 순간부터, 결과화면이 보여지는 순간까지는 하나의 트랜잭션이라고 봐도 무방하다. 물론 세밀히 구분해 보면 그 내부에 더 다양한 트랜잭션이 있겠지만, 웹 환경의 특성상 요청부터 응답까지를 통상 하나의 트랜잭션으로 볼 수 도 있다. 이 얘기는 계좌 이체 부분업무가 다 완료됐는데, 마지막에 결과 화면을 보여주는 부분에서 서버에 이상이 생겨 화면에 출력되지 않는 일이 생긴다면 이 트랜잭션은 반드시 롤백되어야 하는 것임을 의미한다. 결과화면이 사용자에게 제대로 전송되지 않았다면 거래 자체가 안돼야 하는 것이기 때문이다.
인기있는 웹 프레임워크 Django는 최근 1.6버전에 ATOMIC_REQUEST 라는 설정 기능을 추가했다. 설정 파일(settings.py)에
#!python
ATOMIC_REQUEST = True
라고 설정하면, 요청부터 응답까지 모든 부분 작업을 하나의 트랜잭션으로 처리한다. 즉, 사이트 개발자가 별도의 트랜잭션 처리를 하지 않아도 웹 프레임워크가 모든 요청을 트랜잭션으로 관리한다. 이는 매우 중요한 기능인데, 뭔가 복잡한 작업이 내부에 있고 그 중간에 오류가 났을 때, 이를 원래로 돌아가게(롤백)해 주기 때문이다. 시스템의 일관성을 유지시켜 준다.
만일 특정 루틴은 저 설정을 벗어나고 싶으면, 뷰 함수에 다음과 같은 데코레이터를 쓴다.
#!python
from django.db import transaction
@transaction.non_atomic_requests
def my_view(request):
do_stuff()
그럼 my_view 함수는 트랜잭션으로 구동되지 않는다.
반대로 개발할 수 도 있다. 사이트 기본 설정을 ATOMIC_REQUEST False로 설정하여 디폴트 트랜잭션을 막아두고, 특정 뷰만 트랜잭션으로 구동하게 할 수 도 있다.
#!python
from django.db import transaction
@transaction.atomic
def viewfunc(request):
# This code executes inside a transaction.
do_stuff()
Django 뿐 아니라, 최근의 웹 어플리케이션은 ATOMIC_REQUEST를 기본으로 제공하고 있는 추세이기 때문에, 필요에 따라 적절하게 활용하면 된다.
Incoming Links #
Related People (Person 0) #
Related Data Sciences (DataScience 1) #
Related Articles (Article 2) #
Suggested Pages #
- 0.537 Substitution matrix
- 0.081 phage display technology
- 0.058 Seongsu
- 0.052 bacteriophage
- 0.049 pcr
- 0.021 프로그래밍 언어
- 0.019 Database
- 0.017 Jupyter
- 0.016 MVT
- 0.015 생물정보학
- More suggestions...