[Django] Transaction 처리

golony·2021년 10월 7일
0

개발

목록 보기
1/23

TL;DR

회사에서 개발하다보니 트랜잭션 처리가 정말 중요함을 새삼스래 느꼈다.

그렇다... 그냥 학교에서 끄적끄적할 때는 느끼지 못했다

이게 BP인지 아닌지는 모르겠지만, ORM을 쓰면서 여러 테이블을 동시에 다루는 경우가 많아졌다.

A.save()
B.save()

대학생 3년동안, 위 코드처럼 각각의 객체의 save()를 호출했는데, 출근하면서 문득
이거 B 저장하다가 예외 발행하면 A만 저장되는거 아닌가? 하는 생각이 들었다.

그리고, 이렇게 테스트 해보았을 때, A 테이블에만 저장되는 것을 확인할 수 있었다.
(B 테이블의 content는 필수값이어서 save 중 오류 발생)

아래의 방법을 적용시 A 테이블에 신규 데이터가 저장되지 않는 것을 확인할 수 있었다.

@transaction.atomic

  • 함수(Method) 전체를 한 트랙잭션으로 묶음

with

  • 특정 블럭을 한 트랙잭션으로 묶음

savepoint

  • 특정 지점으로 되돌리는 느낌
  • 이유는 모르겠지만 잘 동작하지 않는다.
  • 확인필요
profile
더 나은 세상으로 나아가는 서비스를 만들고 싶습니다.

0개의 댓글