|
|
1번째 줄: |
1번째 줄: |
| == 🔥 ACID ==
| |
|
| |
|
| '''ACID'''는 데이터베이스 '''트랜잭션(Transaction)'''이 안전하게 수행되기 위해 반드시 만족해야 하는 네 가지 핵심적인 성질을 의미합니다. 이 원칙을 통해 데이터베이스 시스템은 여러 트랜잭션이 동시에 실행되는 환경에서도 데이터의 무결성과 신뢰성을 보장할 수 있습니다.
| |
|
| |
| ----
| |
|
| |
| === ⚛️ A: 원자성 (Atomicity) ===
| |
|
| |
| 트랜잭션에 포함된 모든 작업이 '''모두 성공하거나, 하나라도 실패하면 모두 실패'''하는 것을 보장하는 성질입니다. 즉, 작업이 부분적으로만 실행되는 경우는 절대 없습니다. (All or Nothing)
| |
|
| |
| * '''예시''' : 계좌 이체 시, 출금 작업만 성공하고 입금 작업이 실패하는 경우는 없어야 합니다. 출금이 성공하면 반드시 입금도 성공해야 하고, 입금이 실패하면 출금 작업도 취소(롤백)되어야 합니다.
| |
|
| |
| ----
| |
|
| |
| === 🌐 C: 일관성 (Consistency) ===
| |
|
| |
| 트랜잭션이 성공적으로 완료된 후에도, 데이터베이스가 항상 '''일관된 상태'''를 유지해야 함을 의미합니다. 데이터베이스에 정의된 모든 규칙(제약 조건, 트리거 등)은 트랜잭션 전후에도 위반되지 않아야 합니다.
| |
|
| |
| * '''예시''' : 계좌 이체 후에도, 시스템 전체의 총 잔액은 이체 전과 동일하게 유지되어야 합니다.
| |
|
| |
| ----
| |
|
| |
| === 🚧 I: 고립성 (Isolation) ===
| |
|
| |
| 하나의 트랜잭션이 실행되는 동안에는, 다른 트랜잭션이 중간 결과를 볼 수 없도록 '''격리'''하는 것을 의미합니다. 각 트랜잭션은 마치 데이터베이스에 혼자 접근하는 것처럼 보여야 합니다.
| |
|
| |
| * '''예시''' : A가 B에게 송금하는 트랜잭션이 아직 완료되지 않았다면, 다른 트랜잭션은 A의 잔액이 줄어들었거나 B의 잔액이 늘어난 중간 상태를 봐서는 안 됩니다.
| |
|
| |
| ----
| |
|
| |
| === 💾 D: 지속성 (Durability) ===
| |
|
| |
| 성공적으로 완료된 트랜잭션의 결과는 시스템에 장애가 발생하더라도 '''영구적으로 저장'''되어야 함을 의미합니다. 데이터베이스는 로그(Log) 등을 사용하여, 시스템 다운이나 정전이 발생해도 완료된 트랜잭션의 결과를 복구할 수 있어야 합니다.
| |
|
| |
| * '''예시''' : 계좌 이체가 성공적으로 완료되었다는 메시지를 받았다면, 그 직후에 은행 시스템에 장애가 발생하더라도 이체 결과는 사라지지 않아야 합니다.
| |
|
| |
| ----
| |
|
| |
| === 💡 정보처리기사 핵심 Point ===
| |
|
| |
| * ACID는 '''관계형 데이터베이스(RDBMS)'''가 데이터의 신뢰성을 보장하는 핵심 원리입니다.
| |
| * 반면, 많은 '''NoSQL''' 데이터베이스는 성능과 확장성을 위해 ACID 원칙을 완화한 'BASE'(Basically Available, Soft state, Eventually consistent) 모델을 따르기도 합니다.
| |
| * 서비스의 성격에 따라 데이터의 일관성이 얼마나 중요한지를 파악하고, 그에 맞는 데이터베이스 기술을 선택하는 것이 중요합니다.
| |