서비스가 커질수록 도서 데이터는 엄청 증가할 것입니다.
도서 전체를 요청하면 대량의 데이터를 보내느라 서비스가 느려지는 것도 불가피해집니다.
데이터의 용량을 나누기 위해서 페이지네이션을 구현하고자 하였습니다.
페이지네이션에는 Offset과 Cursor 두 방법이 있습니다.
이번에는 원하는 페이지를 바로 볼 수 있고 정렬에 유리한 Offset을 선택했습니다.
📃 LIMIT, OFFSET
기본적으로 테이블에서 제한된 양의 데이터를 출력하고 싶다면 LIMIT을 사용합니다.
SELECT * FROM 테이블명 LIMIT 5; -- 가장 첫 데이터부터 5개를 출력
데이터가 시작하는 위치를 정하고 싶다면 OFFSET을 사용합니다.
SELECT * FROM 테이블명 LIMIT 5 OFFSET 0; -- 0(처음)부터 데이터 5개 출력
SELECT * FROM 테이블명 LIMIT 10 OFFSET 5; -- 5부터 데이터 10개 출력
이제 예시를 통해 응용해보겠습니다.
클라이언트가 1번 카테고리(소설)에 속한 도서를 조회합니다.
쿼리를 통해서 몇 페이지인지, 페이지 당 몇 권인지, 최신순 정렬을 원하는지 알 수 있습니다.
# POST
{{host}}/categories/1/books?page=1&limit=20&sort=newest
사용자의 관점과 DB의 관점에서 처음은 다르기 때문에 OFFSET을 1 빼주면 원하는 데이터를 얻을 수 있습니다.
SELECT *
FROM book
WHERE category_id = 1
ORDER BY published_at DESC
LIMIT 20 OFFSET 0
이 글을 끝까지 봐주셔서 감사합니다!
틀린 내용이 있다면 댓글로 지적 부탁드립니다.
'프로젝트' 카테고리의 다른 글
[서점 프로젝트] SQL Error [1701] 해결하기 (1) | 2024.10.15 |
---|---|
[서점 프로젝트] 서브 쿼리를 이용한 평점 업데이트 (1) | 2024.10.08 |
[서점 프로젝트] 줄거리 설명 컬럼의 자료형 고민 (0) | 2024.10.04 |
[서점 프로젝트] ERD 설계 (1) | 2024.10.02 |
[서점 프로젝트] API 설계 (1) | 2024.10.01 |