Django - 트랜잭션

런던행·2020년 11월 27일
1

Django 업그레이드

목록 보기
6/17

트랜잭션

  • 장고 1.8이 되면서부터 기본적으로 ORM이 모든 쿼리를 호출 할 때마다 자동으로 커밋을 하게 되었다. 이 말은 데이터를 수정할 때, 즉 매번 .create()나 update()가 호출될 때마다 SQL 데이터베이스 안의 값들이 실제로 변하게 된다.
    데이터베이스 트랜잭션이란 둘 또는 그 이상의 데이터베이스 업데이트를 단일화된 작업으로 처리하는 기법을 말한다.

각각의 http 요청을 트랜잭션으로 처리하라

# settings/base.py
DATABASES = {
	'default': {
    	'ATOMIC_REQUEST': True,
    }
}

장고에서는 ATOMIC_REQUEST 설정을 통해 모든 웰 요청을 트랜잭션으로 쉽게 처리 할수 있다. 위의 코드처럼 설정하면 읽기 데이터를 포함한 모든 요청이 트랜잭션으로 처리되게 할 수 있다. 이러한 구조의 장점은 모든 데이터베이스 쿼리가 보호되는 안정성을 얻을 수 있다는 것이다. 반면에 성능 저하를 가져 올수 있다. 얼마만큼의 성능 저하인지에 대해서는 데이터베이스의 개별적인 디자인이 어떤지 각 데이터베이스가 얼마나 락을 잘 처리하는지에 떄라 다양한 경우가 나올 수 있다.
성능 문제가 정말심각하지 않는 한 ATOMIC_REQUEST 이용한다. 대부분의 사이트에서는 충분하다

명시적인 트랜잭션 선언

명시적인 트랜잭션 선언은 사이트 성능을 개선하는 방법중에 하나이다. 트랜잭션에 관련한 몇가지 가이드라인을 정리하면 다음과 같다.

  • 데이터베이스에 변경이 생기지 않는 작업은 트랜잭션으로 처리하지 않는다.
  • 데이터베이스에 변경이 생기면 반드시 트랜잭션으로 처리한다.
profile
unit test, tdd, bdd, laravel, django, android native, vuejs, react, embedded linux, typescript

0개의 댓글