스터디원들과 매주 1개 CS 주제에 대해 공부하고 정리하는 활동을 진행하고 있다. 첫번째 활동으로는 트랜젝션이란 무엇인가에 대해 진행하여 정리한다.
🗄️트랜잭션이란?
DB의 상태를 변경시키는 작업의 단위
한꺼번에 수행되어야 할 연산들을 모아둔 것
한번에 처리하거나, 한번에 원 상태로 복구하거나
🗃️ 트랜잭션의 특징(ACID)
1. Atomicity(원자성)
트랜잭션 내에서 진행되는 모든 연산들은 DB에 반영되거나, 전혀 반영되지 않아야한다.
All or Nothing
2. Consistency(일관성)
트랜잭션의 작업 처리 결과는 항상 일관성 있는 DB 상태로 변환되야 한다.
트랜잭션 수행 전, 후의 시스템 상태가 같아야한다는 것
3. Isolation(독립성)
하나의 트랜잭션이 실행될 때, 다른 트랜잭션이 끼어들 수 없다.
수행 중인 트랜잭션이 완전히 완료될때까지, 해당 수행 결과를 참조할 수 없다.
4. Durability(영속성)
완료된 트랜잭션 결과는 시스템이 고장나도 영구적으로 반영되어야 한다.
🧮 트랜잭션 연산
1. Commit 연산
트랜잭션 성공적으로 수행됐다는 연산
COMMIT 실행 ⇒ DB 반영
2. Rollback 연산
트랜잭션 수행이 실패 ⇒ 작업 취소하는 연산
일부 연산 처리 실패 ⇒ Rollback 연산 실행 ⇒ DB를 트랜잭션 수행 전으로 되돌리기
⛳ 트랜잭션의 상태
1. Active
활성 상태
트랜잭션 실행 중, 동작 중
2. Partially Committed
COMMIT 연산 명령이 도착한 상태
COMMIT 이전 SQL문 실행
트랜잭션내의 연산들은 다 실행 완료된 상태
Commit 연산을 실행하기 직전의 상태
Partially Committed 과 Committed의 차이
- COMMIT 요청이 들어오면, Partially Committed 상태가 된다. if (COMMIT 을 문제 없이 수행할 수 있으면) Committed 상태로 전이 else 오류가 발생한다면 Failed 상태가 된다. 즉, Partially Committed 는 COMMIT 요청이 들어왔을 때를 말하며, Committed 는 COMMIT 을 정상적으로 완료한 상태를 말한다.