내 잡다한 노트
트랜잭션 (Transaction) 본문
**트랜잭션(Transaction)**은 데이터베이스 관리 시스템(DBMS)에서 하나의 논리적인 작업 단위를 말합니다. 트랜잭션은 데이터의 일관성과 무결성을 보장하기 위해 여러 작업(쿼리)을 하나로 묶어서 처리하며, 모든 작업이 성공적으로 수행되거나, 실패 시 모두 취소(롤백)되도록 보장합니다.
1. 트랜잭션의 주요 특징 (ACID)
트랜잭션의 동작은 보통 ACID라는 네 가지 속성을 만족해야 합니다.
1.1 Atomicity (원자성)
- 트랜잭션은 모두 실행되거나, 전혀 실행되지 않아야 합니다.
- 작업 중 하나라도 실패하면, 이미 실행된 작업도 모두 되돌려(롤백) 초기 상태로 복구합니다.
- 예:
- 송금 시, A 계좌에서 돈을 빼고 B 계좌에 입금. 하나라도 실패하면 둘 다 취소.
1.2 Consistency (일관성)
- 트랜잭션이 완료되면 데이터는 항상 일관된 상태를 유지해야 합니다.
- 트랜잭션 전후의 데이터 상태가 데이터베이스의 무결성 제약 조건을 만족해야 합니다.
- 예:
- 은행 시스템에서 총 자산의 합이 트랜잭션 전후에 변하지 않아야 함.
1.3 Isolation (고립성)
- 동시에 실행되는 여러 트랜잭션이 서로의 작업에 영향을 미치지 않도록 보장합니다.
- 한 트랜잭션에서 실행 중인 작업이 완료되기 전까지 다른 트랜잭션이 이를 참조하거나 변경하지 못하게 합니다.
- 예:
- 동시에 여러 사용자가 같은 계좌를 업데이트하려고 해도 충돌이 발생하지 않도록 함.
1.4 Durability (지속성)
- 트랜잭션이 성공적으로 완료되면, 그 변경 사항은 영구적으로 저장됩니다.
- 시스템이 장애나 다운되더라도 완료된 트랜잭션의 결과는 손실되지 않습니다.
- 예:
- 데이터베이스가 전원이 꺼져도 이전에 완료된 송금 작업은 저장되어야 함.
2. 트랜잭션의 상태
트랜잭션은 다음과 같은 상태를 가집니다:
- Active (활성): 트랜잭션이 실행 중.
- Partially Committed (부분 완료): 트랜잭션의 마지막 명령어가 실행되었으나, 완전히 저장되지 않음.
- Committed (완료): 트랜잭션이 성공적으로 완료되고, 데이터베이스에 영구 저장.
- Failed (실패): 실행 중 오류가 발생하여 트랜잭션이 중단됨.
- Aborted (중단): 실패한 트랜잭션이 롤백되어 원래 상태로 복구됨.
3. 트랜잭션 격리 수준 (Isolation Levels)
트랜잭션 간 고립성을 보장하는 정도를 설정합니다. 격리 수준이 높을수록 동시성 성능은 낮아지지만, 데이터 일관성은 높아집니다.
격리 수준설명문제점
Read Uncommitted | 다른 트랜잭션의 미완료 데이터를 읽을 수 있음 (Dirty Read 가능). | Dirty Read, Non-Repeatable Read, Phantom Read 발생 가능. |
Read Committed | 다른 트랜잭션이 커밋한 데이터만 읽을 수 있음. | Non-Repeatable Read, Phantom Read 발생 가능. |
Repeatable Read | 트랜잭션이 시작되면 같은 쿼리를 여러 번 실행해도 항상 같은 데이터를 반환. | Phantom Read 발생 가능. |
Serializable (최고 수준) | 트랜잭션이 직렬화된 것처럼 동작하여 동시성 문제 완벽히 방지. | 동시성이 낮아지고 성능 저하 가능. |
'DB' 카테고리의 다른 글
JDBC와 ODBC (0) | 2025.01.23 |
---|---|
DB에서 Lock 이란? (0) | 2025.01.21 |
Shard 란? (0) | 2025.01.21 |
Grouping 이란? (0) | 2025.01.21 |
SQL 쿼리 기본적인 것들 정리 (SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ) (0) | 2025.01.21 |