Transaction 뜻
- Transaction은 데이터베이스 시스템에서 일어나는 하나의 작업 단위를 의미하며, 여러 잡업을 하나의 단위로 묶어 처리하는 방식
- 일관된 상태를 유지하면서 여러 작업이 성공하거나 실패할 때 일괄적으로 처리하는 것이 목적
- Transaction이 제대로 작동하려면 ACID 원칙을 충족해야 함
ACID 원칙
- Atomicity(원자성) : Transaction의 모든 작업이 완료되거나, 아무것도 완료되지 않은 상태를 보장. 즉, 하나의 작업이 실패하면 전체 트랜잭션이 실패하고, 그때까지의 모든 변경 사항이 롤백
- Consistency(일관성) : Transaction이 성공적으로 완료된 후에는 데이터베이스가 일관성 있는 상태를 유지해야함. Transaction 전후의 데이터베이스 상태가 규칙을 위반하지 않도록 보장
- Isolation(격리성) : 하나의 Transaction이 완료될 때까지는 다른 Transaction이 작업에 영향을 미치지 않도록 보장. 각 Transaction은 독립적으로 처리
- Durability(지속성) : Transaction이 완료된 후에는 그 결과가 영구적으로 저장되어야 함. 시스템 장애가 발생해도 커밋된 데이터는 손실되지 않음
위에서 말한 규칙은 데이터베이스의 일관성을 보장하기 위한 제약 조건이나 비즈니스 로직을 의미
Transaction 상태
- Active(활성화) : Transaction이 시작되고 작업이 수행중인 상태
- Partially Committed(부분 완료) : Transaction이 마지막 명령을 실행했지만, 아직 모든 변경 사항이 데이터베이스에 반영되지 않은 상태
- Committed(커밋됨) : Transaction이 성공적으로 완료되어 모든 변경 사항이 영구적으로 저장된 상태
- Failed(실패) : Transaction 수행 중 오류가 발생한 상태
- Aborted(중단됨) : Transaction이 실패하여 모든 변경 사항이 롤백된 상태
Transaction 제어
Transaction을 제어하는 기본 명령어는 다음과 같습니다.
- BEGIN: 트랜잭션의 시작을 알립니다.
- COMMIT: 트랜잭션이 성공적으로 완료되었음을 알리고, 변경된 데이터를 데이터베이스에 반영합니다.
- ROLLBACK: 트랜잭션 수행 중 오류가 발생했거나 사용자가 취소를 요청할 때, 트랜잭션 내에서 - 이루어진 모든 변경 사항을 원래 상태로 되돌립니다.
- SAVEPOINT: 트랜잭션 내에서 특정 지점을 저장하여, 그 지점으로 부분적인 롤백을 할 수 있습니다.
Transaction 격리 수준
Transaction의 격리 수준은 여러 트랜잭션이 동시에 실행될 때, 서로 영향을 주지 않도록 격리하는 정도를 의미
- Read Uncommitted : Transaction이 커밋되지 않은 데이터를 다른 트랜잭션이 읽을 수 있는 수준(일관성이 낮음)
- Read Committed : 커밋된 데이터만 다른 Transaction이 읽을 수 있는 수준
- Repeatable Read : Transaction이 시작한 후부터 종료될 때까지 다른 Transaction이 해당 데이터를 수정할 수 없도록 보장하는 수준
- Serializable : 가장 높은 수준의 격리로, Transaction이 완전히 직렬화되어 실행. 즉, 동시에 여러 Transaction이 실행될 때 발생할 수 있는 충돌을 완벽히 방지