[One Day One Question]
DB에서 인덱스에 대해 설명해 주세요.
트랜잭션 격리 수준(Transaction Isolation Level)은 데이터베이스에서 여러 트랜잭션이 동시에 실행될 때, 각 트랜잭션이 다른 트랜잭션으로부터 얼마나 고립(isolated)되어 있는지를 정의하는 기준입니다. 이는 데이터 무결성을 유지하면서 동시에 데이터베이스 성능을 최적화하기 위해 설계되었습니다.
1. READ UNCOMMITTED (읽기 미완료 허용)
- 특징:
- 다른 트랜잭션이 아직 커밋하지 않은 데이터를 읽을 수 있음.
- 가장 낮은 격리 수준으로, 데이터 일관성이 깨질 가능성이 높음.
- 문제점:
- Dirty Read: 커밋되지 않은 데이터를 읽음으로써, 이후 롤백되면 잘못된 데이터를 읽은 문제가 발생.
2. READ COMMITTED (읽기 완료만 허용)
- 특징:
- 다른 트랜잭션에서 커밋한 데이터만 읽을 수 있음.
- 데이터의 일관성을 어느 정도 보장.
- 문제점:
- Non-Repeatable Read: 같은 트랜잭션에서 동일한 데이터를 두 번 조회했을 때 결과가 다를 수 있음.
3. REPEATABLE READ (반복 읽기 보장)
- 특징:
- 트랜잭션이 시작된 이후, 다른 트랜잭션이 해당 데이터에 대해 수정하지 못하도록 보장.
- 동일 트랜잭션 내에서 동일 쿼리는 항상 같은 결과를 반환.
- 문제점:
- Phantom Read: 트랜잭션 중간에 다른 트랜잭션이 데이터를 삽입하여, 결과 집합이 달라질 수 있음.
4. SERIALIZABLE (직렬화)
- 특징:
- 가장 높은 격리 수준.
- 모든 트랜잭션을 순차적으로 실행하는 것처럼 동작.
- 데이터에 대한 읽기 및 쓰기 작업에 완전한 고립성을 보장.
- 문제점:
- 성능 저하: 동시에 실행 가능한 트랜잭션 수가 크게 줄어듦.
트랜잭션 격리 수준 선택 기준
- READ UNCOMMITTED: 성능이 가장 중요하고 데이터 정확성에 민감하지 않은 경우.
- READ COMMITTED: 일반적인 애플리케이션에서 사용, 대부분의 RDBMS의 기본 설정 (예: Oracle).
- REPEATABLE READ: 은행, 금융 등 데이터 일관성이 중요한 경우.
- SERIALIZABLE: 데이터 무결성이 최우선인 경우(성능 저하 감수).
꼬리 질문
트랜잭션 격리 수준과 관련된 문제는 무엇이 있을까요?
트랜잭션 격리 수준과 관련된 문제
- Dirty Read: 커밋되지 않은 데이터를 읽는 문제.
- Non-Repeatable Read: 동일 트랜잭션 내에서 동일 데이터를 여러 번 읽을 때 값이 달라지는 문제.
- Phantom Read: 동일 트랜잭션 내에서 실행된 쿼리의 결과 집합이 달라지는 문제.
'cs > ODOQ' 카테고리의 다른 글
[ODOQ] 로그와 메트릭 (1) | 2024.12.03 |
---|---|
[ODOQ] 얕은 복사 깊은 복사 (0) | 2024.12.02 |
[ODOQ] DB 인덱스(Index) (0) | 2024.11.28 |
[ODOQ] 일급 컬렉션 (0) | 2024.11.27 |
[ODOQ] Checked Exception, Unchecked Exception (0) | 2024.11.26 |