본문 바로가기
Database Study

데이터베이스 트랜잭션에서 ACID

by xogns93 2024. 8. 14.

데이터베이스 트랜잭션에서 ACID는 네 가지 중요한 속성을 나타내며, 이 속성들은 데이터베이스의 무결성과 안정성을 보장하는 데 핵심적인 역할을 합니다. 각각의 속성에 대한 설명과 함께 예시를 통해 설명하겠습니다.

1. Atomicity (원자성)

정의: 트랜잭션 내의 모든 작업이 전부 실행되거나, 전혀 실행되지 않은 것처럼 보장되어야 한다는 속성입니다. 트랜잭션이 수행되는 도중에 일부 작업만 실행되고 나머지가 실패하면, 트랜잭션 전체가 취소(롤백)되어야 합니다.

예시: 은행에서 고객이 A 계좌에서 B 계좌로 100달러를 이체하는 경우를 생각해봅시다. 이 트랜잭션은 두 가지 작업으로 구성됩니다:

  1. A 계좌에서 100달러 인출.
  2. B 계좌에 100달러 입금.

만약 첫 번째 작업(A 계좌에서 100달러 인출)은 성공했지만 두 번째 작업(B 계좌에 100달러 입금)이 실패했다면, 전체 트랜잭션은 롤백되어 A 계좌에서 인출된 100달러도 원상복구되어야 합니다. 이는 "원자성"에 의해 보장됩니다.

2. Consistency (일관성)

정의: 트랜잭션이 성공적으로 완료되면, 데이터베이스는 일관된 상태를 유지해야 한다는 속성입니다. 데이터베이스의 무결성 제약 조건(예: 유니크 키, 외래 키, 제약 조건 등)이 항상 만족되어야 합니다.

예시: 동일한 은행 이체 예시에서, 만약 계좌 잔액이 음수가 될 수 없다는 제약 조건이 있다면, 트랜잭션이 완료된 후에도 이 제약 조건이 반드시 유지되어야 합니다. 예를 들어, A 계좌에서 100달러를 인출하려 했는데 잔액이 50달러밖에 없을 경우, 트랜잭션이 일관성을 유지하기 위해 트랜잭션은 실패하고 롤백되어야 합니다.

3. Isolation (고립성)

정의: 동시에 여러 트랜잭션이 실행될 때, 각각의 트랜잭션은 다른 트랜잭션의 중간 상태를 볼 수 없도록 고립되어야 한다는 속성입니다. 트랜잭션들은 마치 독립적으로 실행된 것처럼 처리됩니다.

예시: 두 사용자가 동시에 동일한 A 계좌에서 돈을 인출하려고 하는 경우를 생각해봅시다. 만약 트랜잭션 A가 먼저 시작되어 100달러를 인출하고, 그 과정에서 트랜잭션 B도 동시에 100달러를 인출하려고 시도한다면, 고립성(Isolation)에 의해 B는 A가 완료될 때까지 기다려야 합니다. 이를 통해 두 트랜잭션이 간섭하지 않도록 보장합니다.

4. Durability (지속성)

정의: 트랜잭션이 성공적으로 커밋된 후에는 시스템 장애나 오류가 발생해도 그 결과가 영구적으로 유지되어야 한다는 속성입니다.

예시: 은행 시스템에서 A 계좌에서 100달러를 B 계좌로 이체하는 트랜잭션이 성공적으로 커밋된 후, 시스템에 전력 장애가 발생했다고 가정해 봅시다. 이 경우에도 이미 커밋된 트랜잭션의 결과인 A 계좌의 인출과 B 계좌의 입금은 영구적으로 유지되어야 합니다. 시스템이 다시 시작되더라도 트랜잭션의 결과는 손실되지 않습니다.

요약

  • Atomicity (원자성): 트랜잭션의 모든 작업이 전부 실행되거나 전혀 실행되지 않아야 합니다. 예: 은행 이체 트랜잭션에서 인출만 성공하고 입금이 실패하면 트랜잭션 전체가 취소됩니다.
  • Consistency (일관성): 트랜잭션이 완료된 후에도 데이터베이스의 모든 규칙과 제약 조건이 유지되어야 합니다. 예: 계좌 잔액이 음수로 내려가는 것을 방지합니다.
  • Isolation (고립성): 동시에 여러 트랜잭션이 실행되더라도, 서로의 중간 상태를 볼 수 없게 독립적으로 실행됩니다. 예: 두 사용자가 동시에 동일한 계좌에서 돈을 인출하려고 할 때, 트랜잭션 간의 간섭을 방지합니다.
  • Durability (지속성): 트랜잭션이 성공적으로 완료된 후에는 그 결과가 영구적으로 반영되어야 합니다. 예: 트랜잭션이 커밋된 후 시스템 장애가 발생해도 결과는 유지됩니다.

이러한 ACID 속성은 데이터베이스가 트랜잭션을 신뢰성 있게 처리하고 데이터의 무결성을 유지하는 데 필수적입니다.

'Database Study' 카테고리의 다른 글

fsync() 와 O_SYNC()  (0) 2024.09.11
뮤텍스(Mutex)와 세마포어(Semaphore)  (0) 2024.08.16
FileReader와 BufferedReader  (0) 2024.08.12
UML(Unified Modeling Language)  (0) 2024.08.05
Artifact  (0) 2024.08.05