일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- database
- CI
- EC2
- apitestcase
- racecondition
- Coroutine
- 코루틴
- 도커
- 백준
- dry-yasg
- DjangoRestFramework
- DRF
- to_attr
- annotate
- Continuous Deployment
- django
- testcase
- Prefetch_related
- Continuous Delivery
- CD
- docker
- Transaction
- F객체
- DjangoCache
- Git
- Python
- QuerySet
- aggregate
- nestedfunction
- aws
- Today
- Total
BackEnd King KY
TIL8 - Transaction(1/2) 본문
✔️ Transaction
데이터를 다루는 데 있어 꼭 알아야 할 트랜잭션입니다.
트랜잭션이란 일련의 작업들을 하나의 단위로 실행하는 것을 뜻합니다.
일련의 작업들이 마치 하나의 작업처럼 취급되어서 모두 다 성공하거나 아니면 실패하게 됩니다.
오늘은 Commit과 Rollback에 대해 알아본 뒤, 내일 트랜잭션의 가장 큰 4가지 특징인 ACID에 대해 포스팅 하겠습니다.
✔️ Commit & Rollback
트랜잭션 상의 모든 작업이 문제없이 성공하면 Commit이 됩니다.
즉, 데이터베이스에 실제로 반영이 된다는 뜻입니다.
우리가 GitHub에 Commit을 하는 건 작업이 완료되었고 Repository에 반영하겠다는 의미입니다.
데이터베이스에 대입해보면, GitHub라는 DB에 작업을 반영하겠다는 의미가 되는 것입니다.
만일, 트랜잭션 진행 중 문제가 생긴다면 Rollback을 합니다.
즉, 트랜잭션 과정 중 진행된 작업은 데이터베이스에 반영되지 않고, 트랜잭션 하기 전의 상태로 돌아간다는 뜻입니다.
정말 간단한 트랜잭션의 예시를 들어보겠습니다.
users라는 테이블에 email이라는 컬럼을 만들고 유저정보를 관리할 예정입니다.
현재 10개의 데이터가 있고, 데이터 추가하는 걸 트랜잭션을 통해 해보겠습니다.
우선, 트랜잭션의 시작은 항상 begin으로 해야 합니다.
MSSQL을 썼던 이전 회사에서는, begin tran이라고 썼는데 DB마다 조금씩 다른 것 같습니다.
트랜잭션 시작 후, users에 데이터 하나를 insesrt하면 추가되었다는 의미를 가진 insert 0 1 이라는 문구가 뜹니다.
그리고 되돌리기 위해 rollback을 한 후 조회를 하면, 트랜잭션을 취소했기 때문에 데이터의 변화가 없습니다.
더 추가적으로 수정/삭제를 해봤습니다.
수정의 경우, 수정된 개수가 리턴되고 삭제는 삭제된 개수가 리턴되는 걸 확인하실 수 있습니다.
그러면 이제 커밋을 시켜보겠습니다.
트랜잭션을 시작하고, 데이터 하나를 추가한 뒤 커밋을 했습니다. 그 후 데이터를 조회하면 유저 테이블의 개수가 10개에서 11개가 된 것을 확인할 수 있습니다.
To Be Continued..
'Database' 카테고리의 다른 글
TIL43 - alembic에서 metadata를 왜 설정해야 할까 (0) | 2023.02.04 |
---|---|
TIL14 - DB Indexing (0) | 2022.03.05 |
TIL8 - Transaction(2/2) (0) | 2022.02.24 |