본문 바로가기
자바 업스킬링 과정 정리/SQL

ACID원칙 정리(Atomicity, Consistency, Isolation, Durability)

by RES0612 2025. 8. 3.

ACID 원칙이란?

ACID는 데이터베이스 트랜잭션이 안정적으로 수행되기 위한 4가지 핵심 원칙

트랜잭션이 처리 중 실패하거나 시스템에 장애가 발생하더라도, 데이터의 신뢰성과 무결성을 보장하기 위한 기준

 

Atomicity (원자성)
Consistency (일관성)
Isolation (격리성)
Durability (지속성)

 

 


 

1. 원자성 (Atomicity)

 

트랜잭션 내의 작업은 모두 반영되거나, 모두 반영되지 않아야 함
> 하나라도 실패하면 전체 작업이 취소(rollback)되어야 함

 

✔️ 필요한이유
하나라도 작업이 실패한다면, 나머지 작업도 모두 취소되어야 데이터가 불완전하게 저장되는 것을 막을 수 있음

 

✔️ 예시

A가 B에게 1만 원을 송금하는 과정

 A 계좌에서 1만 원 출금 + B 계좌에 1만 원 입금

 

입금 중에 오류 발생했다면?
출금만 완료된 채 트랜잭션이 끝나면 돈이 사라지게 됨
→ 이걸 방지하는 것이 원자성의 역할

 

2. 일관성 (Consistency)

 

트랜잭션 실행 전과 후 데이터는 항상 정해진 규칙(제약조건)에 따라 일관된 상태를 유지해야 함

 

✔️ 필요한이유
데이터베이스는 무결성 제약 조건(예: 외래키, 고유값, 잔고 ≥ 0 등)이 항상 지켜져야 함
트랜잭션 수행으로 인해 제약이 깨지면 데이터가 신뢰를 잃게 됨

 

✔️ 예시

은행 계좌의 잔고는 0보다 작을 수 없다는 조건이 있다고 가정했을 때

어떤 트랜잭션이 이 조건을 어긴다면, 일관성이 깨진 것
→ 이런 트랜잭션은 시작조차 거부되거나 롤백되어야 함

 

 

3. 격리성 (Isolation)

동시에 여러 트랜잭션이 수행될 때, 서로 영향을 주지 않고 독립적으로 실행되어야 함

> 각각의 트랜잭션이 혼자 실행되는 것처럼 보여야 됨

 

✔️  필요한이유
동시성 제어를 통해 데이터 충돌, 비일관성 문제를 방지해야 합

예: 더티 리드(Dirty Read), 반복 불가능한 읽기, 팬텀 리드( Phantom Read)

 

✔️ 예시

두 명의 사용자가 동시에 같은 상품을 구매 :

둘 다 재고가 1개일 때 상품을 구매 요청

동시에 처리된다면 둘 다 결제 성공, 재고는 1인데 2명이 구매하게됨

→ 격리성이 없으면 이런 문제가 발생할 수 있음

 

 

🧱 격리 수준 (Isolation Level)

데이터베이스는 성능과 정확성 사이에서 격리 수준을 조정할 수 있음

 

격리수준 설명   특징
Read Uncommitted 커밋되지 않은 데이터도 읽음 Dirty Read 발생 가능
Read Committed 커밋된 데이터만 읽음 Dirty Read 방지
Repeatable Read 트랜잭션 중 같은 데이터를 반복 조회 가능 Non-repeatable Read 방지
Serializable 가장 엄격한 수준, 완전한 격리 성능 낮지만 오류 최소화

 

 

4. 지속성 (Durability)

성공적으로 완료(커밋)된 트랜잭션의 결과는 절대로 손실되지 않아야 함

> 시스템이 갑자기 정전되거나 장애가 나더라도, 커밋된 데이터는 보존

 

✔️  필요한이유
트랜잭션이 성공적으로 끝났다면 그 결과는 장애 상황에서도 복구 가능해야 함
로그 기록, 디스크 저장, 백업 등으로 보장

 

✔️ 예시
은행에서 입금이 완료되었는데, 정전이 발생해도 그 입금 내역은 보존되어 있어야 함

 

 

 

 

📋 ACID 요약

속성  설명  목적
원자성(Atomicity) 트랜잭션은 전부 실행되거나 전부 취소됨 중간 실패 방지
일관성(Consistency) 트랜잭션 전후로 규칙 유지 데이터 무결성 보장
격리성(Isolation) 다른 트랜잭션과 독립적으로 실행됨 동시성 문제 방지
지속성(Durability) 성공한 트랜잭션은 시스템 장애에도 보존됨 결과의 영속성 확보

 

 

728x90