TIL29 트랜잭션

3352 단어 TILTIL

프로젝트를 진행하면서 새로알게된 것인데 트랜잭션은 예시로 설명하면 다음과 같다

은행에 A은행에서 홍길동이 있는 B은행으로 송금하려고 하는데 알수 없는 오류에 인해 A은행 돈은 빠졌지만 홍길동이 있는 B은행 계좌에 입금이 되지 않았는데 이것을 방지하기위해서 오류인해 일이 완벽하게 마쳐지지 않으면 거래를 처음부터 없었던 거래로 돌리는 것을 말한다.

장바구니 담기기능 구현에서 사용한 트랜잭션


     with transaction.atomic():
            order = Order.objects.create(
                user   = request.user,
                status = Status.objects.get(id=1)
                )
            order_item = OrderItem.objects.create(
                quantity    = quantity,
                total_price = total_price,
                product     = product,
                order       = order
                )
            DeliveryDate.objects.create(
                date       = date,
                order_item = order_item
                )

트랜잭션 사용법

  • 테코레이터를 이용한 트랜잭션
  • with 명령어를 이용한 트랜잭션
  • savepoint를 직접 지정해주는 트랜잭션

트랜잭션 성질

  1. 원자성
  • 트랜잭션 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않는다.
  • 트랜잭션 내의 모든 명령은 반드시 완벽하게 수행되어야한다. 완벽하게 수행되지 않으면 트랜잭션은 전부
    무효가 된다.
  1. 일관성
  • 트랜잭션 실행은 성공적으로 완료하면 언제나 일관성을있는 데이터베이스 상태로 변환한다.
  • 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야한다.
  1. 독립성,격리성
  • 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이참여하지 못한다.
  1. 영속성,지속성
  • 성족으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.

트랜잭션 명령어

  1. commit
  • 저장되지 않는 모든 데이터를 데이터베이스에 저장하고 현재 트랜잭션 종료.
  1. savepoint[이름]
  • 현재까지의 트랜잭션을 특정 이름으로 지정하라는 명령어
  1. rollback [TO SAVEPOINT 이름]
  • 저장되지 않은 모든 데이터 변경 상항을 취소하고 현재의 트랜잭션을 끝내라는 명령어

좋은 웹페이지 즐겨찾기