장고 Autocommit

폐쇄맨·2020년 11월 13일
1

장고는 왜 autocommit을 사용할까?

SQL 표준에서, 각 SQL 쿼리는 하나의 트랜잭션을 시작하게 되어있다. 이런 표준 트랜잭션은 반드시 명시적으로 커밋되거나 롤백 되어야 한다.

이는 애플리케이션 개발자들에게 항상 편리한 기능이 아니다. 이런 불편한 것을 줄이기 위해, 대부분의 데이터베이스는 autocommit 모드를 지원한다. autocommit 모드에서, 어떤 트랜잭션도 active 아닐 때, 각 쿼리는 트랜잭션을 시작하고, 쿼리의 성공 여부에 따라서 자동으로 커밋되거나 롤백된다.

PEP 249, 파이썬 데이터베이스 API 명세서 v2.0은 autocommit을 꺼둔 상태를 요구하지만, 장고는 이를 오버라이드하여 디폴트로 autocommit 모드를 켜둔다.

트랜잭션 관리를 비활성화하기

데이터베이스 옵션에서 AUTOCOMMIT 세팅을 False로 지정하면 장고의 트랜잭션 관리를 비활성화한다. 이렇게 하면, 장고는 어떠한 커밋도 실행하지 않는다.

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '5432',
        'AUTOCOMMIT': False
    }
}

장고나, 서드파티 라이브러리와 상관없이, 개발자는 모든 트랜잭션에 커밋을 명시적으로 해주어한다. 그래서 보통 커스텀 트랜잭션-제어 미들웨어를 할 때나 정말 이상한 짓을 하고 싶을 때 비활성화 하면 된다.

장고에서 직접 트랜잭션을 제어하고 싶다면 다음 블로그 내용을 참조하길 바란다.

profile
폐쇄맨

1개의 댓글

comment-user-thumbnail
2020년 11월 13일

^^7 감사합니다 ㅋ

답글 달기