web
REST API 페이징 방식
datajoy
2021. 12. 22. 00:48
Offset-Based Pagination (오프셋 기반 페이지네이션)
대중적으로 많이사용되는 페이징 방법.
유저가 페이지를 선택하고 이동 할 수 있는 장점이 있음.
전체 페이지 개수를 알 수 있음.
Request Parameter
parameter | value | description |
page | 1 | 조회하려는 페이지 번호를 전달 |
size | 10 | 조회하려는 페이지에서 데이터의 개수 |
sort | +empNm,-orgNm | +는 ASC, -는 DESC 여러가 정렬 시 ","로 구분합니다. |
Response data
{ "content" : [ //Response Json Data ], "page" : { "totalDataCnt" : 99, "totalPages" : 10, "isLastPage" : false, "isFirstPage" : true, "requestPage" : 1, "requestSize": 10 } } |
response | data | description |
content | 리소스 조회 결과를 세팅합니다. | |
page | 현재 페이지 상태를 세팅합니다. | |
totalDataCnt | 총 데이터 수 입니다. | |
totalPages | 총 페이지 수로 페이징처리 시 마지막 페이지 세팅 시 사용합니다. | |
isLastPage | 요청한 리소스가 마지막페이지인지 세팅합니다. | |
isFirstPage | 요청한 리소스가 첫페이지인지 세팅합니다. | |
requestPage | 요청한 페이지 번호 | |
requestSize | 요청한 페이지 번호에서 데이터 수 |
이슈사항
1) 누락 데이터, 중복 데이터 발생.
페이지 요청하는 동안 데이터 변화가 있는 경우 중복데이터 발생.
페이스북이나 인스타그램과 같이 잦은 수정/생성/삭제가 반복되는 서비스에서는 비효율 방식
2) 성능이슈
맨 끝 번째 페이지 있는 값을 찾고 싶은 경우 full scan이 일어나 데이터 양이 많을 수록 성능이슈 존재.
Cursor-Based Pagination (커서 기반 페이지네이션)
페이스북과 같이 스크롤을 내리면 페이징되는 방식.
Offset-Based Pagination은 사용자가 원하는 데이터가 "몇 번째"에 있다는 데에 집중하고있다면,
Cursor-Based Pagination은 사용자가 원하는 데이터가 "어떤 데이터의 다음"에 집중한다.
데이터가 빈번하게 쓰기가 일어나도 조회 시 값이 누락되지않음.
Offset-Based Pagination 이슈사항을 해결 할 수 있다.
Request Parameter (Twitter 방식 - 일반적으로 많이사용 됨)
parameter | value | description |
max_id | 페이징 API 응답받은 내역 중 마지막 글 번호. 글 번호 기준으로 다음 페이징을 하기 때문에 다음 페이징을 하더라도로 중복/누락이 되지 않음. |
|
since_id | 페이징 API 응답받은 내역 중 첫 글 번호. 글 번호 기준으로 이전 페이징을 하기 때문에 이전 페이징을 하더라도로 중복/누락이 되지 않음. web socket, ajax polling 방식을 사용해서 일정 주기에 따라서 갱신 |
|
count | 페이징 개수 |
이슈사항
정렬이 id값으로 되고있지 않는 경우 복잡해 짐.