반응형
4.3.1 트랜잭션
- 정의: 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업 단위.
- 여러 개의 쿼리를 하나로 묶어서 처리.
- 특징 (ACID):
- 원자성 (Atomicity):
"모든 작업이 완료되거나, 아무것도 수행되지 않음을 보장." - 일관성 (Consistency):
데이터는 트랜잭션 전후에 허용된 방식으로만 변경되어야 함. - 격리성 (Isolation):
서로 다른 트랜잭션이 독립적으로 실행되며, 동시에 실행되더라도 서로 영향을 미치지 않음. - 지속성 (Durability):
성공적으로 수행된 트랜잭션은 영구적으로 반영되어야 함.
- 원자성 (Atomicity):
커밋과 롤백

- 커밋 (Commit):
- 트랜잭션 내의 모든 작업이 성공적으로 완료되었음을 데이터베이스에 알리고 확정.
- 트랜잭션 성공을 의미.

- 롤백 (Rollback):
- 트랜잭션 내 작업 중 오류가 발생했을 경우, 이전 상태로 되돌림.
- "태초의 상태"로 복원.
*격리 수준 (Isolation Level)
격리 수준 | 정의 | 장점 | 단점 |
Serializable | 모든 트랜잭션이 순차적으로 실행되는 것처럼 동작. | 가장 높은 데이터 무결성 제공. | 성능이 가장 낮음. |
Repeatable Read | 트랜잭션 동안 읽은 데이터가 변경되지 않도록 보장. | 동일 데이터 재조회 시 일관성 유지. | 팬텀 리드 발생 가능. |
Read Committed | 커밋된 데이터만 읽음. 트랜잭션 중 변경된 데이터는 보이지 않음. | 더티 리드 방지. | 반복 불가능한 읽기 발생 가능. |
Read Uncommitted | 커밋되지 않은 데이터를 읽을 수 있음. | 가장 높은 성능 제공. | 더티 리드, 반복 불가능한 읽기, 팬텀 리드 발생. |
1. 팬텀 리드 (Phantom Read)
- 정의:
한 트랜잭션에서 동일한 조건으로 두 번 이상 데이터를 조회했을 때,
**첫 번째 조회 시에는 없던 새로운 데이터(팬텀 데이터)**가 두 번째 조회 시 나타나는 현상. - 발생 조건:
- 다른 트랜잭션에서 새로운 데이터를 삽입하거나 삭제한 경우.
- 예시:
- 트랜잭션 A가 "가격이 1000 이상인 상품"을 조회 중.
- 트랜잭션 B가 가격이 1000 이상인 새 상품을 추가하면,
A가 동일한 조건으로 데이터를 다시 조회했을 때 추가된 데이터가 나타남.
- 해결 방법:
- Serializable 격리 수준에서만 방지 가능.
2. 반복 가능하지 않은 조회 (Non-Repeatable Read)
- 정의:
한 트랜잭션에서 동일한 조건으로 데이터를 두 번 조회했을 때,
첫 번째 조회 결과와 두 번째 조회 결과가 다르게 나타나는 현상. - 발생 조건:
- 다른 트랜잭션에서 데이터를 수정하거나 삭제한 경우.
- 예시:
- 트랜잭션 A가 특정 사용자의 잔액을 조회함 (조회 결과: 5000).
- 트랜잭션 B가 해당 사용자의 잔액을 7000으로 변경.
- A가 다시 조회했을 때 잔액이 7000으로 변경됨.
- 해결 방법:
- Repeatable Read 격리 수준 이상에서 방지 가능.
3. 더티 리드 (Dirty Read)
- 정의:
한 트랜잭션에서 다른 트랜잭션에서 커밋되지 않은 데이터를 읽는 현상.- 이후, 읽은 데이터가 롤백되면 데이터 불일치 문제가 발생.
- 발생 조건:
- 트랜잭션이 Read Uncommitted 격리 수준일 때 발생.
- 예시:
- 트랜잭션 B가 특정 사용자의 잔액을 7000으로 변경 (아직 커밋되지 않음).
- 트랜잭션 A가 이 데이터를 조회해 7000으로 인식.
- 이후 B에서 롤백하여 잔액이 원래 값(5000)으로 복원되면, A는 잘못된 데이터를 본 셈이 됨.
- 해결 방법:
- Read Committed 격리 수준 이상에서 방지 가능.
격리 수준 | 팬텀 리드 | 반복 가능하지 않은 조회 | 더티 리드 |
Serializable | 방지 | 방지 | 방지 |
Repeatable Read | 발생 가능 | 방지 | 방지 |
Read Committed | 발생 가능 | 발생 가능 | 방지 |
Read Uncommitted | 발생 가능 | 발생 가능 | 발생 가능 |
지속성 (Durability)
- 정의: 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함.
- 시스템 장애 발생 시에도 복구 가능.
- 지속성을 지원하는 기술:
- 체크섬 (Checksum): 데이터의 무결성을 확인하기 위한 값.
- 저널링 (Journaling): 트랜잭션 작업 내용을 로그에 기록하여 장애 시 복구 가능.
- 롤백 (Rollback): 작업 중 문제가 생겼을 때, 데이터의 이전 상태로 복원.
무결성 (Integrity)
종류 | 정의 | 설명 |
개체 무결성 | 기본키(Primary Key)는 NULL 값이거나 중복될 수 없음. | 각 레코드가 유일하게 식별되어야 함. |
참조 무결성 | 외래키(Foreign Key)는 참조되는 테이블의 기본키 값과 일치해야 함. | 참조 관계에 있는 데이터 간의 일관성을 유지. |
고유 무결성 | 특정 컬럼은 중복된 값을 가질 수 없음. | 고유 제약 조건(UNIQUE). |
NULL 무결성 | 특정 컬럼은 NULL 값을 가질 수 없음. | NOT NULL 제약 조건 사용. |
반응형
'SW개발 > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
4.5 인덱스 (0) | 2025.01.22 |
---|---|
4.4 데이터베이스의 종류 (3) | 2025.01.22 |
4.2 ERD와 정규화 과정 (1) | 2025.01.21 |
4.1 데이터베이스의 기본 (0) | 2025.01.21 |
참고. 가상 메모리, 페이징 기법, Segmentation Fault (0) | 2025.01.17 |