내 잡다한 노트

트랜잭션 (Transaction) 본문

DB

트랜잭션 (Transaction)

peanutwalnut 2025. 1. 21. 21:38

**트랜잭션(Transaction)**은 데이터베이스 관리 시스템(DBMS)에서 하나의 논리적인 작업 단위를 말합니다. 트랜잭션은 데이터의 일관성무결성을 보장하기 위해 여러 작업(쿼리)을 하나로 묶어서 처리하며, 모든 작업이 성공적으로 수행되거나, 실패 시 모두 취소(롤백)되도록 보장합니다.

 

 

1. 트랜잭션의 주요 특징 (ACID)

트랜잭션의 동작은 보통 ACID라는 네 가지 속성을 만족해야 합니다.

1.1 Atomicity (원자성)

  • 트랜잭션은 모두 실행되거나, 전혀 실행되지 않아야 합니다.
  • 작업 중 하나라도 실패하면, 이미 실행된 작업도 모두 되돌려(롤백) 초기 상태로 복구합니다.
  • 예:
    • 송금 시, A 계좌에서 돈을 빼고 B 계좌에 입금. 하나라도 실패하면 둘 다 취소.

1.2 Consistency (일관성)

  • 트랜잭션이 완료되면 데이터는 항상 일관된 상태를 유지해야 합니다.
  • 트랜잭션 전후의 데이터 상태가 데이터베이스의 무결성 제약 조건을 만족해야 합니다.
  • 예:
    • 은행 시스템에서 총 자산의 합이 트랜잭션 전후에 변하지 않아야 함.

1.3 Isolation (고립성)

  • 동시에 실행되는 여러 트랜잭션이 서로의 작업에 영향을 미치지 않도록 보장합니다.
  • 한 트랜잭션에서 실행 중인 작업이 완료되기 전까지 다른 트랜잭션이 이를 참조하거나 변경하지 못하게 합니다.
  • 예:
    • 동시에 여러 사용자가 같은 계좌를 업데이트하려고 해도 충돌이 발생하지 않도록 함.

1.4 Durability (지속성)

  • 트랜잭션이 성공적으로 완료되면, 그 변경 사항은 영구적으로 저장됩니다.
  • 시스템이 장애나 다운되더라도 완료된 트랜잭션의 결과는 손실되지 않습니다.
  • 예:
    • 데이터베이스가 전원이 꺼져도 이전에 완료된 송금 작업은 저장되어야 함.

2. 트랜잭션의 상태

트랜잭션은 다음과 같은 상태를 가집니다:

  1. Active (활성): 트랜잭션이 실행 중.
  2. Partially Committed (부분 완료): 트랜잭션의 마지막 명령어가 실행되었으나, 완전히 저장되지 않음.
  3. Committed (완료): 트랜잭션이 성공적으로 완료되고, 데이터베이스에 영구 저장.
  4. Failed (실패): 실행 중 오류가 발생하여 트랜잭션이 중단됨.
  5. 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