Tiny Bunny [SQL] 페이지네이션 - DB파트 - 솜님의 블로그
솜님의 블로그
카테고리
작성일
2024. 10. 2. 00:01
작성자
겨울솜사탕

페이지네이션

페이지네이션이란 웹 사이트에서 데이터를 여러 페이지로 보여줄 수 있는 기능을 의미한다.

 

이번 프로젝트에서 페이지네이션 기능을 구현하기 위해,

DB파트에서 요청에 맞는 데이터를 잘라 서버 측에 전달해 주기로 했다.

 

사용자가 페이지 번호를 선택하면, 해당 페이지 번호가 DB로 넘어오게 되고,

이 넘어온 페이지 번호를 이용해 데이터를 계산하고 원하는 데이터만 잘라서 다시 반환한다.

 

우리는 한 페이지 당 9개의 데이터를 보여주기로 결정했고, 이때 계산되는 방식은

BETWEEN (선택한 페이지 번호-1)*9+1 AND 선택한 페이지 번호*9;

가 된다.

 

 

하지만 이 데이터를 그냥 찾아서 보내줄 수 없기 때문에,

ROW_NUMBER() 라는 함수를 사용해 순번을 매긴 뒤 BETWEEN을 사용해 원하는 범위의 데이터만 보내주어야 한다.

 

 

▼ ROW_NUMBER() 함수와 BETWEEN을 사용하여 원하는 페이지의 데이터를 조회하는 쿼리이다.

SELECT PRODUCT_NUM, PRODUCT_NAME, PRODUCT_PRICE,PRODUCT_ADDRESS, PRODUCT_LOCATION, PRODUCT_CATEGORY, RATING, PAYMENT_COUNT, WISHLIST_COUNT, FILE_NAME, FILE_EXTENSION, FILE_DIR
FROM (SELECT PRODUCT_NUM, PRODUCT_NAME, PRODUCT_PRICE,PRODUCT_ADDRESS, PRODUCT_LOCATION, PRODUCT_CATEGORY, RATING, PAYMENT_COUNT, WISHLIST_COUNT, FILE_NAME, FILE_EXTENSION, FILE_DIR,
	ROW_NUMBER() OVER (ORDER BY PRODUCT_NUM DESC) AS ROW_NUM
	FROM PRODUCT_INFO_VIEW)
WHERE ROW_NUM BETWEEN (COALESCE(?,1)-1)*9+1 AND COALESCE(?,1)*9;

사용자가 처음 상품 목록 페이지에 접속한 경우, 별도의 페이지 선택이 없기 때문에 페이지 번호는 NULL이 될 수 있다.

그로 인해 NULL 처리를 하는 COALESCE 함수를 사용하여 데이터가 NULL인 경우 1로 변경되도록 설정해 주었다.

 

 

DB 실행결과

전체 24개의 데이터가 있다.

위에서 작성한 쿼리의 ? 에 1을 넣으면

1페이지에 해당하는 데이터 9개만 조회가 된다.