트랜잭션(Transaction)이란?
정의
- 트랜잭션이란, 데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위입니다.
* 데이터베이스의 상태를 변경시킨다는 의미는 SELECT, UPDATE, INSERT, DELETE와 같은 행동을 뜻합니다. - 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위입니다.
- 이런 트랜잭션은 상황에 따라서 여러 개가 만들어질 수 있습니다.
- 그 하나의 트랜잭션은 Commit(저장)되거나 Rollback(철회)될 수 있습니다.
트랜잭션의 특징
- 트랜잭션은 4가지의 특성이 존재합니다.
- 원자성 (Atomicity)
- All or Nothing
- 원자성은 트랜잭션이 DB에 모두 반영되거나, 전혀 반영되지 않거나를 뜻합니다.
- 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 합니다.
- 일관성 (Consistency)
- 일관성은 트랜잭션 작업 처리의 결과가 항상 일관되어야 한다를 뜻합니다.
즉, 데이터 타입이 반환 후와 전이 항상 동일해야 합니다. - 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 합니다.
(기본 키, 외래 키 제약과 같은 명시적인 무결성 제약 조건뿐만 아니라, 비명시적인 일관성 조건도 있습니다.)
- 일관성은 트랜잭션 작업 처리의 결과가 항상 일관되어야 한다를 뜻합니다.
- 독립성 (Isolation)
- 독립성은 하나의 트랜잭션은 다른 트랜잭션에 끼어들 수 없고 마찬가지로 독립적임을 의미합니다. 즉, 각각의 트랜잭션은 독립적이라 서로 간섭이 불가능합니다.
- 수행 중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없습니다.
- 독립성 성질을 보장할 수 있는 가장 쉬운 방법은 모든 트랜잭션을 순차적으로 수행하는 것이지만, 병렬적 수행의 장점을 얻기 위해 DBMS는 병렬적으로 수행하면서도 일렬 수행과 같은 결과를 보장할 수 있는 방식을 제공합니다.
- 지속성 (Durability)
- 지속성은 트랜잭션이 성공적으로 완료되면 영구적으로 결과에 반영되어야 함을 뜻합니다.
보통 Commit이 된다면 지속성은 만족할 수 있습니다.
- 지속성은 트랜잭션이 성공적으로 완료되면 영구적으로 결과에 반영되어야 함을 뜻합니다.
- 원자성 (Atomicity)
트랜잭션의 Commit과 Rollback
- Commit
- 하나의 트랜잭션이 성공적으로 끝나서 데이터베이스가 일관성 있는 상태에 있을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산입니다.
- Rollback
- 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산입니다.
- Rollback 시에는 해당 트랜잭션을 재시작하거나 폐기해야 합니다.
트랜잭션의 상태
- 트랜잭션은 논리적으로 5가지의 상태에 있을 수 있습니다.
- Active
- 트랜잭션이 현재 실행 중인 상태 - Failed
- 트랜잭션이 실행 중에 오류가 발생해서 중단된 상태 - Aborted
- 트랜잭션이 비정상 종료되어 Rollback이 수행된 상태 - Partially Committed
- 트랜잭션의 연산이 마지막까지 실행되고 Commit이 되기 직전 상태 - Committed
- 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
- Active
트랜잭션을 사용할 때 주의할 점
- 트랜잭션은 꼭 필요한 최소의 코드에만 적용하는 것이 좋습니다. 여러 개의 트랜잭션으로 쪼개서 트랜잭션의 범위를 최소화하라는 의미입니다.
- 일반적으로 데이터베이스 커넥션의 개수가 제한적입니다. 그런데 각 단위 프로그램이 커넥션을 소유하는 시간이 길어지면 사용 가능한 여유 커넥션의 개수는 줄어둘게 됩니다. 이러면 각 단위 프로그램에서 커넥션을 가져가기 위해 기다려야 하는 상황이 발생할 수 있기 때문입니다.
- 데이터베이스 커넥션이란 애플리케이션과 데이터베이스의 연결을 뜻하는 것으로, 애플리케이션에서 데이터베이스에 접속하고 접속을 종료하는 일련의 과정을 의미합니다.
'Database' 카테고리의 다른 글
[Database] - ORM(Object Relational Mapping)이란 (0) | 2024.03.11 |
---|---|
[DataBase / SQL] 클러스터드 인덱스 (Clustered Index), 넌 클러스터드 인덱스 (Non Clustered Index)란 (0) | 2024.02.14 |
[Database] - 레디스(Redis)란? (1) | 2024.02.05 |
[Database / SQL] - WHERE절 / LIKE절 / 집계함수 (0) | 2023.12.13 |
[DataBase / SQL] - SQL이란 (1) | 2023.12.12 |