ACID: 두 판 사이의 차이
기술노트
(Gemini 벌크 업로더로 자동 업로드) |
(Gemini 벌크 업로더로 자동 업로드) |
||
(같은 사용자의 중간 판 하나는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
== | <div style="font-family: 'Malgun Gothic';"> | ||
= ACID = | |||
[[기술면접 CS 지식|← 목록으로 돌아가기]] | |||
''' | '''ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(Transaction)의 안전성을 보장하기 위해 필요한 4가지 성질(원자성, 일관성, 고립성, 지속성)을 의미합니다.''' | ||
데이터베이스 트랜잭션이 가져야 할 이 4가지 특성은 데이터의 무결성을 지키고, 시스템 오류 상황에서도 데이터의 신뢰도를 유지하는 데 핵심적인 역할을 합니다. 특히 여러 사용자가 동시에 데이터에 접근하는 금융 시스템, 예약 시스템 등에서 ACID 원칙은 반드시 지켜져야 합니다. | |||
---- | ---- | ||
== | == ACID의 4가지 성질 == | ||
가장 흔히 사용되는 예시인 **'A 계좌에서 B 계좌로 1만 원을 송금'** 하는 상황을 통해 ACID의 각 성질을 이해해 보겠습니다. | |||
* | |||
; 1. 원자성 (Atomicity) | |||
: '''하나의 트랜잭션에 포함된 모든 작업이 전부 성공하거나, 또는 전부 실패하여 결과를 되돌리는(Rollback) 것을 보장합니다. (All or Nothing)''' | |||
* **예시:** A 계좌에서 1만 원을 인출하는 작업과 B 계좌에 1만 원을 입금하는 작업은 하나의 트랜잭션으로 묶입니다. 만약 인출에는 성공했지만, 시스템 장애로 입금에 실패했다면, 인출했던 1만 원을 다시 A 계좌로 되돌려 트랜잭션 시작 전의 상태로 완벽하게 복구해야 합니다. 돈이 중간에 사라지는 일은 절대 발생하지 않습니다. | |||
; 2. 일관성 (Consistency) | |||
: '''트랜잭션이 성공적으로 완료된 후에도 데이터베이스가 항상 일관된 상태를 유지해야 함을 의미합니다.''' | |||
* | * **예시:** A와 B의 계좌 잔액 합이 10만 원이었다면, 송금 트랜잭션이 완료된 후에도 그 합은 여전히 10만 원이어야 합니다. 트랜잭션의 실행이 데이터베이스의 규칙(무결성 제약조건, 예: 잔액은 음수가 될 수 없다)을 깨뜨리지 않음을 보장합니다. | ||
; 3. 고립성 (Isolation) | |||
: '''여러 트랜잭션이 동시에 실행될 때, 각 트랜잭션은 서로에게 영향을 주지 않고 독립적으로 실행되는 것처럼 보여야 합니다.''' | |||
* **예시:** A가 B에게 송금하는 트랜잭션이 아직 완료되지 않은 중간 상태에서, 다른 사용자가 두 계좌의 잔액을 조회한다고 가정해 봅시다. 이때, 고립성이 보장된다면 다른 사용자는 송금이 완전히 끝나기 전의 잔액 또는 완전히 끝난 후의 잔액만 볼 수 있습니다. A의 돈은 빠져나갔지만 B에게는 아직 입금되지 않은 어중간한 상태의 데이터를 읽을 수 없습니다. | |||
성공적으로 완료된 트랜잭션의 결과는 시스템에 장애가 발생하더라도 | ; 4. 지속성 (Durability) | ||
: '''성공적으로 완료된 트랜잭션의 결과는 시스템에 장애가 발생하더라도 영구적으로 저장되어야 함을 의미합니다.''' | |||
* | * **예시:** 송금이 성공적으로 완료되었다는 메시지를 받았다면, 그 직후에 데이터베이스 서버에 전원 공급이 끊기는 등의 문제가 발생해도 송금 결과는 디스크 등에 영구적으로 기록되어 사라지지 않아야 합니다. 시스템이 재시작되었을 때, 송금 내역은 그대로 남아있어야 합니다. | ||
---- | ---- | ||
'''결론적으로 ACID는 "작업이 분리될 수 없고(원자성), 실행 후에도 데이터 상태에 문제가 없으며(일관성), 다른 작업에 방해받지 않고(고립성), 그 결과가 영원히 보장되는(지속성)" 성질을 통해 데이터베이스 트랜잭션의 신뢰성을 보장하는 핵심 원칙입니다.''' | |||
</div> | |||
2025년 9월 11일 (목) 17:01 기준 최신판
ACID
ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(Transaction)의 안전성을 보장하기 위해 필요한 4가지 성질(원자성, 일관성, 고립성, 지속성)을 의미합니다.
데이터베이스 트랜잭션이 가져야 할 이 4가지 특성은 데이터의 무결성을 지키고, 시스템 오류 상황에서도 데이터의 신뢰도를 유지하는 데 핵심적인 역할을 합니다. 특히 여러 사용자가 동시에 데이터에 접근하는 금융 시스템, 예약 시스템 등에서 ACID 원칙은 반드시 지켜져야 합니다.
ACID의 4가지 성질
가장 흔히 사용되는 예시인 **'A 계좌에서 B 계좌로 1만 원을 송금'** 하는 상황을 통해 ACID의 각 성질을 이해해 보겠습니다.
- 1. 원자성 (Atomicity)
- 하나의 트랜잭션에 포함된 모든 작업이 전부 성공하거나, 또는 전부 실패하여 결과를 되돌리는(Rollback) 것을 보장합니다. (All or Nothing)
- **예시:** A 계좌에서 1만 원을 인출하는 작업과 B 계좌에 1만 원을 입금하는 작업은 하나의 트랜잭션으로 묶입니다. 만약 인출에는 성공했지만, 시스템 장애로 입금에 실패했다면, 인출했던 1만 원을 다시 A 계좌로 되돌려 트랜잭션 시작 전의 상태로 완벽하게 복구해야 합니다. 돈이 중간에 사라지는 일은 절대 발생하지 않습니다.
- 2. 일관성 (Consistency)
- 트랜잭션이 성공적으로 완료된 후에도 데이터베이스가 항상 일관된 상태를 유지해야 함을 의미합니다.
- **예시:** A와 B의 계좌 잔액 합이 10만 원이었다면, 송금 트랜잭션이 완료된 후에도 그 합은 여전히 10만 원이어야 합니다. 트랜잭션의 실행이 데이터베이스의 규칙(무결성 제약조건, 예: 잔액은 음수가 될 수 없다)을 깨뜨리지 않음을 보장합니다.
- 3. 고립성 (Isolation)
- 여러 트랜잭션이 동시에 실행될 때, 각 트랜잭션은 서로에게 영향을 주지 않고 독립적으로 실행되는 것처럼 보여야 합니다.
- **예시:** A가 B에게 송금하는 트랜잭션이 아직 완료되지 않은 중간 상태에서, 다른 사용자가 두 계좌의 잔액을 조회한다고 가정해 봅시다. 이때, 고립성이 보장된다면 다른 사용자는 송금이 완전히 끝나기 전의 잔액 또는 완전히 끝난 후의 잔액만 볼 수 있습니다. A의 돈은 빠져나갔지만 B에게는 아직 입금되지 않은 어중간한 상태의 데이터를 읽을 수 없습니다.
- 4. 지속성 (Durability)
- 성공적으로 완료된 트랜잭션의 결과는 시스템에 장애가 발생하더라도 영구적으로 저장되어야 함을 의미합니다.
- **예시:** 송금이 성공적으로 완료되었다는 메시지를 받았다면, 그 직후에 데이터베이스 서버에 전원 공급이 끊기는 등의 문제가 발생해도 송금 결과는 디스크 등에 영구적으로 기록되어 사라지지 않아야 합니다. 시스템이 재시작되었을 때, 송금 내역은 그대로 남아있어야 합니다.
결론적으로 ACID는 "작업이 분리될 수 없고(원자성), 실행 후에도 데이터 상태에 문제가 없으며(일관성), 다른 작업에 방해받지 않고(고립성), 그 결과가 영원히 보장되는(지속성)" 성질을 통해 데이터베이스 트랜잭션의 신뢰성을 보장하는 핵심 원칙입니다.