Database

[DB] 트랜잭션과 무결성

mooni_ 2025. 5. 20. 18:47

트랜잭션(Transaction)이란?

  • 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위
  • 여러 개의 쿼리들을 하나로 묶어 일괄 처리할 수 있도록 함
  • 모든 쿼리가 정상적으로 실행되어야만 전체 트랜잭션을 확정(commit)하며, 하나라도 실패하면 전부 취소(rollback) 가능

ACID: 트랜잭션의 4대 특징

1. 원자성 (Atomicity)

  • 트랜잭션 내 모든 작업이 완전히 수행되거나 전혀 수행되지 않아야 함
  • 일부만 실행된 상태로 남아선 안 됨

관련 명령어

  • 커밋(commit): 트랜잭션 내 쿼리들이 정상적으로 완료되었음을 확정하고 변경 내용을 영구 반영

  • 롤백(rollback): 트랜잭션 처리 중 문제가 발생했을 때 변경 내용을 전부 취소하고 되돌림

➡ 커밋과 롤백은 데이터 무결성을 지키기 위한 핵심 도구

 

 

2. 일관성 (Consistency)

  • 트랜잭션이 성공적으로 완료되면 데이터베이스는 일관성 있는 상태로 유지되어야 함
  • 제약 조건, 트리거, 규칙 등을 어기지 않는 범위 내에서만 변경 가능

예: 외래 키 제약 조건 위반 없이 참조 무결성이 유지되어야 함

 
 

3. 격리성 (Isolation)

  • 동시에 실행되는 트랜잭션이 서로 영향을 주지 않아야 함
  • 결과적으로 마치 순차적으로 실행된 것처럼 보여야 함

 

트랜잭션 병행성 문제 (Anomaly)

  1. 더티 리드 (Dirty Read): 커밋되지 않은 데이터를 다른 트랜잭션이 읽음
  2. 반복 불가능한 조회 (Non-repeatable Read): 같은 데이터를 두 번 조회했는데 결과가 다름
  3. 팬텀 리드 (Phantom Read): 같은 조건의 SELECT 쿼리 결과가 트랜잭션 중간에 다르게 나옴

 

격리 수준 (Isolation Level)

수준 설명 방지되는 문제
SERIALIZABLE 가장 엄격, 모든 트랜잭션을 순차 실행 팬텀 리드까지 방지
REPEATABLE READ 같은 행에 대한 반복 조회 보장 더티 리드, 반복 불가능 조회 방지
READ COMMITTED 커밋된 데이터만 읽기 허용 더티 리드 방지 (기본값인 경우 많음)
READ UNCOMMITTED 커밋되지 않은 데이터도 읽기 가능 성능은 좋으나 가장 위험

 

 

4. 지속성 (Durability)

  • 트랜잭션이 커밋되면 그 결과는 영구적으로 보존되어야 함
  • 시스템 장애가 발생해도 변경된 데이터는 손실 없이 복구되어야 함

주요 기술

  • 체크섬 (Checksum): 데이터 전송 중 오류를 검출하기 위한 중복 검사 기법
  • 저널링 (Journaling): 변경 사항을 반영하기 전 로그를 기록해 복구 가능하게 함
  • 롤백 세그먼트 / Undo Log: 롤백을 위한 트랜잭션 복구 정보 보관

무결성

  • 데이터의 정확성, 일관성, 유효성을 유지하는 것
  • 무결성이 유지되어야 데이터베이스에 저장된 데이터 값과 그 값에 해당하는 현실 세계의 실제 값이 일치하는지에 대한 신뢰가 생김

 

무결성의 종류

1) 개체 무결성 : 기본키로 선택된 필드는 빈 값을 허용하지 않음

2) 참조 무결성 : 서로 참조 관계에 있는 두 테이블의 데이터는 항상 일관된 값을 유지해야함

3) 고유 무결성 : 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우 그 속성 값은 모두 고유한 값을 가짐

4) NULL 무결성 : 특정 속성 값에 NULL이 올 수 없다는 조건이 주어진 경우 그 속성 값은 NULL이 될 수 없다는 제약 조건

 


트랜잭션은 데이터베이스의 신뢰성을 유지하는 가장 중요한 메커니즘입니다. ACID 원칙은 트랜잭션의 일관된 처리와 무결성을 보장하며, 동시에 여러 사용자가 DB를 안전하게 사용할 수 있도록 합니다.

현대의 RDBMS에서는 대부분 이 네 가지 속성을 다양한 수준에서 보장하고 있으며, 실무에서는 트랜잭션 범위 설정과 격리 수준의 조절을 통해 성능과 무결성 간의 균형을 맞추는 것이 중요합니다.