키셋 페이지를 읽는 중 행이 삭제되거나 정렬 키가 바뀝니다. 중복 없는 페이지와 고정된 전체 결과는 같은 보장인가요?
잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?
답변과 점검 포인트 펼치기답변 접기
구두 답변
정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.
키셋은 마지막 정렬 키 이후의 행을 이어 읽는 방식이지 여러 요청의 결과를 한 시점에 고정하는 기능은 아닙니다. 정렬 키가 불변이면 이동으로 인한 중복을 줄일 수 있지만 삭제·내용 변경·새 삽입까지 고정하지는 못합니다.
동작 원리와 전제
내림차순에서 이미 본 행의 키가 작아져 커서 뒤로 이동하면 다시 나타날 수 있고, 아직 안 본 행이 커서 앞으로 이동하면 놓칠 수 있습니다. ID 보조 키는 동률의 전체 순서를 만들지만 수정 가능한 주 정렬 키의 이동 문제는 남습니다.
선택과 실패 처리
탐색 화면은 약한 최신성과 새로고침을 허용할 수 있습니다. 감사 보고서처럼 고정 집합이 필요하면 snapshot transaction, 결과 ID 집합 저장, 버전별 읽기 모델 등을 검토합니다. 기준 시각 필터만으로 이후 삭제된 행이나 바뀐 값을 복구할 수는 없습니다.
구체적인 사례와 검증
내림차순 목록에서 마지막 키가 (시각 10, ID 5)라면 다음 요청은 그보다 작은 키를 찾습니다. 이미 읽은 행이 시각 8로 수정되면 다시 후보가 되고, 아직 안 읽은 행이 시각 12로 이동하면 뒤 페이지에서는 보이지 않을 수 있습니다. 이 반례는 인덱스나 ID tie-breaker를 추가해도 없어지지 않습니다. API는 '현재 데이터에서 다음 범위'인지 '처음 시작한 목록의 다음 부분'인지 명시해야 합니다. 고정 결과를 저장할 때는 보관 기간과 사용자 권한 철회도 처리합니다. 과거 snapshot에 접근할 수 있다고 삭제·비공개 처리된 민감 자료를 계속 공개해도 되는 것은 아닙니다.
중복 커서 요청·삭제·키 변경·replica 이동을 시험하고 허용하는 누락과 중복을 명시합니다. 긴 DB snapshot은 버전 정리와 연결 비용을 가지므로 요청별로 무한 유지하지 않습니다. 접근 비용 최적화와 데이터 관찰 계약을 별도로 설계하겠습니다.
득점 포인트
이해가 드러나는 지점을 확인해 보세요.
- 핵심 구분: 키셋은 마지막 정렬 키 이후의 행을 이어 읽는 방식이지 여러 요청의 결과를 한 시점에 고정하는 기능은 아닙니다.
- 선택 조건: 탐색 화면은 약한 최신성과 새로고침을 허용할 수 있습니다.
- 검증 기준: 중복 커서 요청·삭제·키 변경·replica 이동을 시험하고 허용하는 누락과 중복을 명시합니다.
감점 포인트
놓치기 쉬운 조건과 오해를 짚어 보세요.
- 유일한 보조 키만 있으면 동시 수정 중에도 전체 목록이 고정된다고 한다.
더 파고들 거리
하나 더 질문하며 이해의 범위를 넓혀 보세요.
- 뒤 페이지를 일정한 탐색 범위로 읽으려면 어떤 유일한 정렬 키를 커서에 넣나요?
- 이 판단을 긴 스냅샷 읽기 안에서 한다면 어떤 버전을 보며 정리 비용은 어떻게 늘어나나요?
- 쓰기 성공 직후 읽기 replica가 뒤처졌다면 어느 경로로 최신성을 확인하나요?
득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.
원리부터 공부하고 싶다면
답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.