OFFSET은 행 자체가 아니라 위치를 기억합니다

앞쪽 데이터가 바뀌면 같은 사용자의 다음 페이지도 흔들립니다

페이지 1을 읽은 뒤 목록 앞부분이 삽입되거나 삭제되면 데이터는 이동하지만, 다음 요청의 OFFSET 5는 그대로라서 경계가 어긋납니다.

사용자는 이미 1페이지에서 A-E를 본 상태입니다

OFFSET 0 LIMIT 5

사용자가 본 1페이지

A B C D E

OFFSET이 유지하는 기준

기억하는 것
앞에서 5개를 건너뛴다
기억하지 않는 것
마지막으로 본 행이 E였다는 사실

행이 뒤로 밀리면 이미 본 데이터가 다시 나타납니다

변화 후 정렬

NEW 추가
NEW A B C D E F G H I

같은 사용자의 다음 요청

OFFSET 5 LIMIT 5
E F G H I

앞에 1건이 들어오면 E가 6번째로 밀려서, 페이지 1에서 봤던 값이 페이지 2에 중복으로 등장합니다.

행이 앞으로 당겨지면 아직 안 본 데이터가 건너뛰어집니다

변화 후 정렬

A 삭제
B C D E F G H I J K

같은 사용자의 다음 요청

OFFSET 5 LIMIT 5
G H I J K

앞에서 1건이 사라지면 F가 5번째로 당겨집니다. 그런데도 OFFSET 5는 그대로라 사용자가 아직 보지 못한 F를 누락한 채 다음 페이지를 돌려줍니다.