목차
챕터4. 데이터베이스
4.3 트랜잭션과 무결정
4.3.1 트랜잭션
- 트랜잭션
- 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위
- 여러 개의 쿼리들을 하나로 묶는 단위
- 특징: 원자성, 일관성, 독립성, 지속성 = ACID 특징
- 원자성 atomicity
- 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징
- all or nothing
- 예) 트랙잭션 커밋 → 문제 발생 → 롤백 → 그 이후에 모두 수행되지 않음을 보장
- 트랜잭션 단위로 여러 로직들을 묶을 때 외부 API를 호출하는 것이 있으면 X
- 커밋 commit:
- 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어
- 트랜잭션 단위로 수행, 변경된 내용이 모두 영구적으로 저장되는 것
- 커밋이 수행 되었다 = 하나의 트랜잭션이 성공적으로 수행되었다
- 아래 예시) update, insert, delete 의 쿼리가 하나의 트랜잭션 단위로 수행
- 롤백:
- 트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전으로 돌리는 일(취소)
- 커밋과 롤백 덕에 데이터의 무결성이 보장됨
- 데이터 변경 전에 변경 사항을 쉽게 확인 가능, 작업 그룹화 가능
- 트랜잭션 전파: 여러 트랙잭션 관련 메서드의 호출을 하나의 트랜잭션에 묶이도록 하는 것
- 일관성 consistency
- ‘허용된 방식’으로만 데이터를 변경해야 하는 것
- 데이터베이스에 기록된 모든 데이터는 여러 가지 조건, 규칙에 따라 유효함
- 예) 범석이 0원 가짐 → 필자한테 500만원 입금 → 불가능 (마통아닌 경우)
- 격리성 isolation
- 트랜잭션 수행 시 서로 끼어들지 못하는 것
- 여러 개의 격리 수준으로 나뉘어 격리성을 보장
- 격리 수준에 따라 발생하는 현상
- 팬텀 리드 phantom read
- 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우
- 반복 가능하지 않은 조회 non-repeatable read
- 한 트랜잭션 내의 같은 행에 두 번 이상 조회 발생, 그 값이 다른 경우
- 팬텀 리드와 다른 점:
- 반복 가능하지 않은 조회) 행 값이 달라질 수도 있음
- 팬텀 리드) 다른 행이 선택될 수도 있음
- 더티 리드 dirty reaad
- 반복 가능하지 않은 조회와 유사
- 한 트랜잭션이 실행 중일 때, 다른 트랜잭션에 의해 수정되었지만 아직 ‘커밋되지 않은’ 행의 데이터를 읽을 수 있을 때 발생
- 격리 수준
- SERIALIZABLE
- 트랜잭션을 순차적으로 진행시키는 것
- 매우 엄격한 수준
- 여러 트랜잭션이 동시에 같은 행 접근 불가
- 해당 행에 대해 격리 → 기다려야함
- 교착 상태가 일어날 확률이 많고 가장 성능이 떨어지는 격리 수준
- REPEATABLE_READ
- 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아주지만 새로운 행을 추가하는 것은 막지 않음
- 추가된 행 발견 가능
- READ_COMMITTED
- 가장 많이 사용되는 격리 수준 (여러 DBMS에서 기본값 설정)
- 커밋 완료된 데이터에 대해서만 조회 허용
- 어떤 트랜잭션이 접근한 행을 다른 트랜잭션이 수정 가능
- 트랜잭션 A가 수정한 행을 트랜잭션 B가 수정 가능
- → 트랜잭션 A가 같은 행을 읽을 때 다른 내용 발견 가능
- READ_UNCOMMITED
- 가장 낮은 격리 수준, 빠름
- 하나의 트랜잭션이 커밋되기 이전에 다른 트랜잭션에 노출되는 문제 존재
- → 데이터 무결성을 위해 되도록 사용하지 않는 것이 이상적
- 지속성 durability
- 수행된 트랜잭션은 영원히 반영되어야 하는 것을 의미
- 데이터베이스에 시스템 장애 발생 시 원래 상태로 복구하는 회복 기능이 있어야 함
- → 체크섬, 저널링, 롤백 등의 기능 제공
4.3.2 무결성
- 무결성: 데이터의 정확성, 일관성, 유효성을 유지하느 ㄴ것
- 무결성이 유지되어야 데이터베이스에 저장된 데이터 값과 그 값에 해당하는 현실 세계의 실제 값이 일치하는지에 대한 신뢰 생김
- 무결성의 종류: 개체 무결성, 참조 무결성, 고유 무결성, NULL 무결성
'Boaz > Computer Science' 카테고리의 다른 글
[CS 전공지식 #16] 챕터4-6~7. 조인과 조인의 원리 (0) | 2025.02.24 |
---|---|
[CS 전공지식 #15] 챕터4-4~5. 데이터베이스의 종류와 인덱스 (0) | 2025.02.24 |
[CS 전공지식 #13] 챕터4-2. ERD와 정규화 과정 (0) | 2025.02.24 |
[CS 전공지식 #12] 챕터4-1. 데이터베이스의 기본 (0) | 2025.02.24 |
[CS 전공지식 #11] 챕터3-4. CPU 스케줄링 알고리즘 (0) | 2025.02.17 |