4-3. 트랜잭션과 무결성 - 트랜잭션, 무결성

2025. 11. 27. 22:20·CS 스터디

1. 트랜잭션

트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적인 작업 단위를 말한다. 여러 개의 SQL 쿼리들이 하나의 묶음처럼 처리되어, 전부 성공하거나 전부 실패하는 'All or Nothing' 방식이 적용되는 것이 특징이다. 트랜잭션의 성공적인 수행은 데이터베이스의 신뢰성을 보장하는 핵심이다. 모든 트랜잭션은 데이터 무결성을 보장하기 위해 ACID 특성을 반드시 만족해야 한다.

 

1) 원자성 (Atomicity)

트랜잭션 내의 모든 연산은 반드시 전부 실행되거나, 아니면 전부 실행되지 않아야 한다.

 

- 커밋 : 모든 연산이 성공적으로 완료되어 데이터베이스에 영구적으로 반영하는 명령어

- 롤백 : 연산 도중 오류가 발생하여 트랜잭션이 중단될 때, 데이터베이스를 트랜잭션 시작 이전의 상태로 되돌리는 명령어

 

2) 일관성 (Consistency)

트랜잭션이 성공적으로 완료된 후에도 데이터베이스는 항상 정해진 규칙을 위반하지 않는 일관된 상태를 유지해야 한다. 이때 정해진 규칙에는 제약 조건, 도메인, 무결성 제약 등이 존재한다.

 

3) 격리성 (Isolation)

여러 트랜잭션이 동시에 실행될 때, 각 트랜잭션은 다른 트랜잭션의 작업에 영향을 받지 않고 독립적으로 실행되어야 한다.

 

3.1 격리 수준에 따라 발생하는 현상

- 팬텀 리드 (Phantom Read) : 트랜잭션 A가 특정 조건의 데이터를 읽고, 그 사이에 트랜잭션 B가 해당 조건에 맞는 새로운 행을 삽입하고 커밋하였을 때, 트랜잭션 A가 두번째 쿼리 시 새로운 행이 나타나는 현상

- 반복 불가능 읽기 (Non-Repeatable Read) : 트랜잭션 A가 같은 쿼리를 두 번 실행했을 때, 그 사이에 트랜잭션 B가 데이터를 수정하고 커밋하여 결과가 다르게 나타나는 현상

- 더티 리드 (Dirty Read) : 트랜잭션 A가 아직 커밋되지 않은 트랜잭션 B의 데이터를 읽는 현상. 이후 트랜잭션 B가 롤백되면, A는 존재하지 않는 데이터를 읽은 것이 되어 일관성을 잃게 된다.

 

3.2 격리 수준

- SERIALIZABLE : 트랜잭션을 순차적으로 진행시키는 것으로 여러 트랜잭션이 동시에 같은 행에 접근 할 수 없다. 격리성이 가장 높지만 동시성이 가장 낮다. 교착 상태가 일어날 확률이 많고 가장 성능이 떨어지는 격리 수준이다.

- REPEATABLE_READ : 한 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막지만, 새로운 행을 추가하는 것은 막지 않는 것이다. 팬텀 리드가 발생할 수 있다.

- READ_COMMITTED : 커밋이 완료된 데이터에 대해서만 조회를 허용한다. 하지만 한 트랜잭션이 접근한 행을 다른 트랜잭션이 수정할 수 있기 때문에 팬텀 리드, 반복 불가능 읽기가 발생할 수 있다.

- READ_UNCOMMITTED : 한 트랜잭션이 커밋되기 이전에 다른 트랜잭션에 노출될 수 있다. 격리성이 가장 낮지만 동시성이 가장 높아 빠르고, 팬텀리드와 반복 불가능 읽기, 더티 리드가 발생할 수 있다.

 

4) 지속성 (Durability)

트랜잭션이 성공적으로 커밋된 후에는, 시스템 장애가 발생하더라도 해당 변경 사항이 영구적으로 보존되어야 한다.

 

- 체크섬 : 중복 검사의 한 형태로, 오류 정정을 통해 송신된 자료의 무결성을 보호하는 단순한 방법

- 저널링 : 파일 또는 데이터베이스 시스템에 변경 사항을 반영하기 전에 로깅하는 것

 

 

 

2. 무결성

무결성이란 데이터베이스에 저장된 데이터의 정확성과 일관성, 유효성을 보장하는 규칙이다.

 
구분 적용 대상 설명
개체 무결성 기본키 기본 키는 NULL 값을 가질 수 없으며, 중복 값을 가질 수 없다.
참조 무결성 외래키 외래 키는 참조하는 테이블의 기본 키 값으로 존재하거나 NULL 값을 가진다.
고유 무결성 후보키 또는 UNIQUE 속성 해당 속성이나 속성 집합의 값은 전체 릴레이션 내에서 중복될 수 없다.
NULL 무결성 모든 속성 해당 속성 값은 반드시 값을 가져야 한다.

 

'CS 스터디' 카테고리의 다른 글

4-5. 인덱스 - 인덱스의 필요성, B-트리, 인덱스 최적화 기법  (0) 2025.11.28
4-4. 데이터베이스의 종류 - 관계형 데이터베이스, NoSQL 데이터베이스  (0) 2025.11.27
4-2 ERD와 정규화 과정 - ERD의 중요성, 정규화 과정  (0) 2025.11.27
4-1. 데이터베이스의 기본 - 엔터티, 릴레이션, 속성, 도메인, 필드와 레코드, 관계, 키  (0) 2025.11.27
3-4. CPU 스케줄링 알고리즘 - 비선점형 방식, 선점형 방식  (2) 2025.11.08
'CS 스터디' 카테고리의 다른 글
  • 4-5. 인덱스 - 인덱스의 필요성, B-트리, 인덱스 최적화 기법
  • 4-4. 데이터베이스의 종류 - 관계형 데이터베이스, NoSQL 데이터베이스
  • 4-2 ERD와 정규화 과정 - ERD의 중요성, 정규화 과정
  • 4-1. 데이터베이스의 기본 - 엔터티, 릴레이션, 속성, 도메인, 필드와 레코드, 관계, 키
leastzero
leastzero
  • leastzero
    빵이
    leastzero
  • 전체
    오늘
    어제
    • 모든 글 (31) N
      • CS 스터디 (25)
      • 활동 (2)
      • IT 기술 (4) N
  • hELLO· Designed By정상우.v4.10.4
leastzero
4-3. 트랜잭션과 무결성 - 트랜잭션, 무결성
상단으로

티스토리툴바