728x90
반응형
트랜잭션(Transaction)이란 데이터베이스의 상태를 변환시키려는 작업의 단위를 의미한다. 트랜잭션의 목적은 데이터베이스 완전성(integrity)의 유지에 있다. 데이터베이스를 저장하고 수정하는 여러작업을 하나의 쿼리로 처리할 수 없기 때문에 여러개의 쿼리로 나누어 실행하는데, 그 결과의 원자성을 보장하기 위해 동일한 DB connection 객체를 이용하는 기술이라 볼 수 있다.
즉 하나의 실행단위로, 존재하는 중간 과정들에 대해서 모두 성공하면 데이터베이스의 상태가 변하게 되고, 중간에 실패하면 기존에 작업들 모두 RollBack된다.
Transaction의 4가지 특성 (ACID)
원자성 (Atomicity) | 모두 실패하거나, 모두 완성되거나 둘 중 하나의 상태만 존재한다. 100개 명령어로 구성된 트랜잭션 중 1개라도 실패한다면 이는 무조건 실패로 간주, 트랜잭션 시작 전 상태로 돌아간다. 중간상태란 존재하지 않는다. |
일관성 (Consistency) | 기존 데이터베이스가 correct state라면 트랜잭션 수행 이후에도 correct state여야한다. * correct state ( 제약조건을 위배하지 않는 정상상태 ) 예시) 게시판에 글을 쓰는데 제목 글자제한이 45자면 트랜잭션이 일어나도 이런 조건을 만족해야한다. 이를 위반하는 트랜잭션이 있다면 거부해야한다. |
고립성 (Isolation) | 한 트랜잭션이 실행하는 동안 중간결과를 다른 트랜잭션이 참조할 수 없다. (트랜잭션 작업수행중에는 다른 트랜잭션에 영향을 줄수도 간섭을 받아서도 안된다) 예시) 게시판에 두사람이 글을 동시에 올리는 상황. 두 트랜잭션에 충돌이 생겨서 A의 제목이 저장되고 내용은 B가 저장되는게 아니라 A 트랜잭션이 종료되기 전까지 B 트랜잭션은 대기한다. |
지속성 (Durability) | 완료 (commit) 된 트랜잭션은 DB에 영구보존되어야한다. 완료후에 컴퓨터가 꺼진다면 데이터는 이미 저장되었으므로 보존되고, 완료전에 컴퓨터가 꺼진다면 Atomicity 의 원칙대로 트랜잭션 수행 이전으로 돌아간다. |
Django Transaction 활용
1. 데코레이터 사용: @transaction.atomic 을 이용. 하나의 모듈에 모두 적용할 때 사용
2. with transaction.atomic() : 중간 부분부터 적용하고 싶을 때 사용.
주의사항. transaction.atomic() 내부에서는 try-except 를 사용하지 말자. 필요하다면 try 블록이 transaction.atomic() 블록을 감싸게 하자.
728x90
반응형
'웹 프로그래밍' 카테고리의 다른 글
AWS 요금정리 (0) | 2021.07.29 |
---|---|
Django form에 대한 정리 (0) | 2021.07.25 |
GET과 POST 정리 (0) | 2021.07.19 |
Django Model - OneToOneField (0) | 2021.07.19 |
[AWS (5)] AWS HTTPS 설정 (0) | 2021.07.17 |