커서 페이지네이션

Cursor Pagination

마지막으로 읽은 항목의 위치를 커서로 넘겨 새 항목이 추가돼도 이어서 읽습니다.

···
html
<div class="viz"><h3>CURSOR AFTER C</h3><div class="row" id="items"><span class="box">A</span><span class="box">B</span><span class="box active">C</span><span class="arrow">→</span><span class="box">D</span><span class="box">E</span></div><div class="muted" id="caption">next: D, E</div></div>
css
.viz{width:94%;height:88%;max-width:960px;padding:clamp(10px,2vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);font:600 clamp(12px,1.35vw,16px)/1.35 var(--font-sans,system-ui,sans-serif);display:flex;flex-direction:column;gap:clamp(7px,1.8vmin,13px);overflow:hidden}.viz h3{margin:0;color:var(--accent);font:700 clamp(12px,1.35vw,16px)/1.2 var(--font-sans,system-ui,sans-serif);letter-spacing:.04em}.viz .row{display:flex;align-items:center;justify-content:center;gap:clamp(5px,1.4vmin,12px);flex:1;min-height:0}.viz .box{padding:clamp(5px,1.5vmin,12px);border:1px solid var(--line);border-radius:9px;background:var(--bg);text-align:center}.viz .muted{color:var(--muted)}.viz .accent{color:var(--accent)}.viz .code{font-family:ui-monospace,monospace}.viz .pill{padding:3px 7px;border:1px solid var(--line);border-radius:99px;white-space:nowrap}.viz .active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface))}.viz .arrow{color:var(--accent);font:700 18px ui-monospace,monospace}#items{gap:clamp(3px,1vmin,8px)}#items .box{min-width:12%;padding:9px 3px}#items .fresh{color:var(--accent-2)}
js
let added=false;function draw(){added=!added;document.getElementById('items').innerHTML=(added?'<span class="box fresh">NEW</span>':'')+'<span class="box">A</span><span class="box">B</span><span class="box active">C</span><span class="arrow">→</span><span class="box">D</span><span class="box">E</span>';document.getElementById('caption').textContent=added?'new item inserted · next: D, E':'next: D, E'}draw();setInterval(draw,1700)

커서 페이지네이션은 페이지 번호 대신 마지막 항목을 가리키는 불투명한 값을 돌려줍니다. 다음 요청은 그 커서를 보내 정해진 정렬 순서 뒤의 항목부터 읽습니다. 새 항목이 목록 앞에 들어와도 이미 읽은 경계가 밀리지 않습니다.

데모에서 첫 묶음 뒤에 새 항목이 삽입돼도 다음 묶음은 C 뒤의 D·E로 이어집니다. 정렬 키는 안정적이고 중복을 구분할 수 있어야 하며, 커서는 클라이언트가 내부 형식에 의존하지 않게 다룹니다.

언제 쓰나

삽입이 잦은 피드나 긴 목록을 누락·중복 없이 순차 탐색할 때 적합합니다.

페이지로 열기 ↗