본문 바로가기

Legacy(~18.10)/컴퓨터공학

[DB이론] Transaction

반응형

Transaction


Transcation ?

: 데이터베이스 내에서 한꺼번에 수행되어야할 일련의 연산

: 전부 실행되거나, 혹은 전부 실행이 안되거나

  • 여러개의 프로세스를 마치 하나처럼 동작하는 방식==단일화된 작업 -> 성공 or 실패 만 존재 한다.

  • Transaction의 모든 연산은 반드시 한꺼번에 완료가 되어야 하며, 그렇지 않은 경우에는 한꺼번에 취소되어야 하는 원자성을 가지고 있다.

  • 정상적으로 완료가 되어서, 성공적으로 종료 -> COMMIT

    • 작업결과가 데이터베이스에 반영

  • 취소 혹은 비정상 적인 종료 -> ROLLBACK

    • 작업결과가 모두 취소되고 데이터베이스에 영향 없음


Django 에서 Transaction 처리 (출처)


  • settings.py 에서 ATOMIC_REQUESTS = True 설정을 해준다.



데코레이터를 이용한 Transaction

from django.db import transaction

@transaction.atomic
def transaction_test1(arg1, arg2):
   # start transaction
   a.save()

   b.save()
   # end transaction


with 명령어를 이용한 트랜잭션 예시

from django.db import transaction
def transaction_test2(arg1, arg2):

   a.save()    # 항상 save 처리됨, 예외가 발생할 경우 에러 발생

   with transaction.atomic():
       # start transaction
       b.save()
       c.save()
       # end transaction


savepoint를 직접 지정해 주는 트랜잭션

from django.db import transaction

def transaction_test3(arg1, arg2):

   a.save()

   sid = transaction.savepoint()
   # start transaction
   try:

       b.save()
       
       c.save()

       transaction.savepoint_commit(sid)
       # end transaction
   except Exception
       # 트랜잭션 내에서 에러 발생시 롤백처리
       transaction.savepoint_rollback(sid)


반응형