![](https://velog.velcdn.com/images/minhye1020/post/0b71e5cc-a52b-4b14-b101-3a57d8d4b86d/image.png)
▣ 페이징이란..??
- 게시물이 많을 경우 목록을 10~20개 정도씩 나눠 페이지별로 출력하는 기능
▣ 기능이 없을때의 문제점
- 스크롤이 길어져서 사용자가 목록에서 원하는 게시글을 찾기 어려움
- 전송해야 할 데이터가 많아지므로 페이지 로딩 속도가 느려짐
- 한꺼번에 많은 데이터를 처리해야 하므로 데이터베이스에도 과부하가 걸림
▣ 페이징을 위한 설정
- 한 페이지에 출력할 게시물의 개수
- POSTS _PER_PAGE = 10
- 한 화면(블록)에 출력할 페이지 번호의 개수
- PAGES_PER_BLOCK = 5
![](https://velog.velcdn.com/images/minhye1020/post/858c625c-7dcf-4321-adbc-7543c6dd8eb5/image.png)
▣ 페이징 구현 절차
- 1단계 : board 테이블에 저장된 전체 레코드 수를 카운트
- 전체 게시물이 105개라 가정
- 2단계 : 각 페이지에서 출력할 게시물의 범위를 계산
- 계산식
- 범위의 시작값 : ( 현재 페이지 - 1) POSTS_PER_PAGE + 1
- 범위의 종료값 : ( 현재 페이지 POSTS_PER_PAGE )
- 계산 예
- 1페이지 일때
- 시작값 : (1 - 1) 10 + 1 = 1
- 종료값 : 1 10 = 10
- 2페이지 일때
- 시작값 : (2 - 1) 10 + 1 = 11
- 종료값 : 2 10 = 20
- 3단계 : 전체 페이지 수를 계산
- 계산식 : Math.ceil(전체 게시물 수 / POSTS_PER_PAGE)
- 계산 결과를 무조건 올림 처리해야 마지막 페이지를 조회할 수 있음
- 계산 예
- 게시물 수가 총 105개이므로
- 페이지 수 : Math.ceil(105 / 10) = Math.ceil(10.5) = 11
- 4단계 : ‘이전 페이지 블록 바로가기’를 출력
- 계산식 : ((현재 페이지 - 1) / PAGES_PER_BLOCK ) PAGES_PER_BLOCK + 1
- 계산 예
- 현재 1페이지일 때
- pageTemp = ((1 - 1) / 5) 5 + 1 = 1
- 현재 5페이지일 때
- pageTemp = ((5 - 1) / 5) 5 + 1 = 1
- pageTemp가 1이라면 첫번째 블록이므로 이전 블록 바로가기를 출력하지 않음
4단계 : (앞에서 계속)
- 현재 6페이지일 때
- pageTemp = ((6 - 1) / 5) 5 + 1 = 6
- 현재 10페이지일 때
- pageTemp = ((10 - 1) / 5) * 5 + 1 = 6
- 1이 아닐 때는 pageTemp - 1 결과로 이전 페이지 블록 바로가기를 출력
- 5단계 : 각 페이지 번호를 출력
- 4단계에서 계산한 pageTemp를 BLOCK_PAGE만큼 반복하면서 +1 연산 후 출력
- pageTemp 가 1일 때 : “1 2 3 4 5”를 출력
- pageTemp 가 6일 때 : “6 7 8 9 10”을 출력
- 6단계 : ‘다음 페이지 블록 바로가기’를 출력
- 각 페이지 번호를 출력한 후 pageTemp + 1 하여 다음 페이지 블록 바로가기를 설정
▣ 핵심요약
- 게시판의 설정값은 web.xml에 컨텍스트 초기화 매개변수로 저장해 사용하면 소스 코드 수정없이값을 변경할 수 있음
- 해당 설정값과 테이블에 저장된 레코드의 개수를 통해 페이지 수를 계산
- 페이지 번호를 출력하는 코드는 14장에서 제작할 모델2 방식 게시판에서도 동일하게 사용
- 이처럼 공통적으로 쓰이는 기능은 별도의 유틸리티 클래스로 만들어두면 재사용성이 높아짐