2019.07.31 장고 트랜젝션 사용하기
장고 트렌젝션 활용
트랜젝션
정의 : 트랜잭션(Transaction 이하 트랜잭션)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다.
즉 하나의 실행 단위로, 존재하는 중간 과정들에 대해서 모두 성공하면 데이터베이스의 상태가 변하게 되고, 중간에 실패하면 기존에 작업들 모두 Rollback 된다.
가장 중요한 부분은 특히 금융 부분이라고 생각한다. 단순한 계좌 이체 과정 중에도 굉장히 많은 과정들이 필요로 한다. 예를 들면 A가 B에게 입금 처리를 하게 되면 간단한 로직은 “A의 통장에서 돈을 인출한다. 그리고 그 돈을 B의 통장에 넣는다.”일 것이다. 하지만 만약에 A의 통장에서 돈을 인출한다까지 실행 된 이후에 오류로 인해 B의 통장에 돈 입금이 안되는 상황이 발생될 수 있다. 그런 경우 A에서는 돈이 빠져나갔으나 B는 돈을 받지 못하는 상황이 발생하게 된다. 이런 경우를 대비하여 이 과정을 하나의 단위로 묶고 중간 과정에서 실패할 경우 롤백을 통해 A에도 돈이 빠지지 않도록 처리한다.
트랜젝션의 4가지 특성
[DataBase] 트랜잭션이란? (Transaction)
Save Point
- 트랜잭션의 길이가 길면 트랜잭션의 중간 지점에 수정내용을 반영하는 포인트를 만드는데, 이를 SAVEPOINT(저장점)라고 한다. 트랜잭션이 잘못되어 처음부터 다시 실행해야 할 경우 트랜잭션의 처음이 아니라 SAVEPOINT까지 되돌아가면 트랜잭션 전체가 ROLLBACK되는 것을 막을 수 있다. SAVEPOINT는 트랜잭션 안에 여러 개 만들 수 있다.
장고에서 트랜젝션 활용
- “@transaction.atomic” : 하나의 모듈에 모두 적용할 때
- with transaction.atomic() : 중간 부분부터 적용해주고 싶을 때
[[django] 장고 트랜잭션 활용 bono’s blog](https://blueshw.github.io/2016/01/16/django-migration/)