데이터베이스에서 데이터를 가져오기 전에 가져올 데이터의 크기를 정해서 가져와야 DB 부하, 서버 부하, 네트워크 트래픽 부하 등을 방지할 수 있다.

  • ​페이징(Paging) : 이렇게 일정한 크기로 데이터를 나누는 것
  • 페이지(Page) : 일정한 크기를 가진 데이터
  • 페이지네이션(Pagination) : 이 페이지들을 이동하는 것

 

페이지네이션 정보

// 페이지네이션 정보
const result = {
	pageCounterNum, // 페이지 크기
	pageNum, // 현재 페이지 번호
	pnStart, // 현재 페이지의 페이지네이션 시작 번호
	pnEnd, // 현재 페이지 페이지네이션 마지막 번호
	pnTotal, // 전체 마지막 페이지 번호
	contents: contentQueryResult, // 게시판 컨텐츠 배열
};

예시

// 전체 게시글 개수 가져오기
var query = "Select count(*) as TotalCount from ??"; 
var table = ["users"]; 
query = mysql.format(query, table);
connection.query(query, function(err, rows) {
 if(err){
   return err;
 }else{
  //store Total count in variable
  let totalCount = rows[0].TotalCount
 
 // 현재 페이지, 페이지 크기 설정
 if(req.body.start == '' || req.body.limit == ''){
     let startNum = 0;
     let LimitNum = 10;
   }
 
 else{
     //parse int Convert String to number 
      let startNum = parseInt(req.body.start);
      let LimitNum = parseInt(req.body.limit);
   }
}

// 페이지 크기만큼 게시글 데이터 가져오기 
var query = "Select * from ?? ORDER BY created_at DESC limit ? OFFSET ?";
var table = ["users",LimitNum,startNum];
query = mysql.format(query, table);
connection.query(query, function(err, rest) {
 if(err){
  res.json(err);
}
else{

	// json으로 데이터 내보내기
   res.json("Total Count": totalCount , "data":rest)
}

 

출처

https://medium.com/@salonimalhotra1ind/pagination-in-node-express-mysql-eda52bf605b7

https://hidelryn.github.io/2018/06/24/nodejs-paging/

https://carrotweb.tistory.com/175

+ Recent posts