데이터베이스 개념 · 트랜잭션과 ACID · 퀴즈
퀴즈: 트랜잭션과 ACID
문항 7개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
같은 트랜잭션 안에서 같은 행을 두 번 읽었는데 값이 달라졌다. 이 현상의 이름은?
- dirty read
- phantom read
- non-repeatable read
- write skew
두 트랜잭션이 같은 조건으로 집합을 읽고 서로 다른 행을 갱신해 불변식이 깨졌다. 이것을 막을 수 있는 것은?
- Serializable, 또는 명시적 잠금이나 제약 조건
- Read Committed
- Repeatable Read
- Read Uncommitted
PostgreSQL 에서 Read Uncommitted 를 요청하면?
- dirty read 가 발생할 수 있다
- 오류가 발생한다
- 문법은 받아들여지지만 실제로는 Read Committed 로 동작한다
- 성능이 눈에 띄게 좋아진다
격리 수준을 Repeatable Read 이상으로 올릴 때 애플리케이션이 반드시 준비해야 하는 것은?
- 직렬화 실패 오류를 잡아 트랜잭션 전체를 다시 실행하는 재시도 로직
- 잠금 대기가 늘어나니 커넥션 풀 크기를 키우는 설정
- 충돌을 줄이도록 대상 표에 인덱스를 추가하는 작업
- 읽기 부하를 옮길 읽기 전용 복제본 구성
작업 큐 테이블에서 여러 워커가 서로 다른 작업을 안전하게 집어 가게 하는 데 적합한 것은?
- SELECT ... FOR SHARE
- SELECT ... FOR UPDATE SKIP LOCKED
- 격리 수준을 Read Uncommitted 로 낮추기
- 인덱스 힌트
지속성(Durability)을 보장하는 대표적인 메커니즘은?
- 인덱스 — 조회 속도를 높이는 자료 구조
- 선행 기록 로그(WAL) — 데이터 페이지보다 로그를 먼저 디스크에 기록한다
- 커넥션 풀 — 연결을 미리 만들어 재사용한다
- 정규화 — 중복을 없애 갱신 이상이 생기지 않게 한다
중복 예약을 막는 방법 중 가장 견고한 것은?
- 애플리케이션에서 조회 후 없으면 삽입한다
- 격리 수준을 Repeatable Read 로 올린다
- 유일 인덱스나 배제 제약으로 데이터베이스가 강제하게 한다
- 삽입 전에 잠시 대기한다