[JSP] 09. 게시판에 페이지 기능 넣기

Min's Study Note·2023년 11월 15일
0

JSP

목록 보기
11/16

▣ 페이징이란..??

  • 게시물이 많을 경우 목록을 10~20개 정도씩 나눠 페이지별로 출력하는 기능

▣ 기능이 없을때의 문제점

  • 스크롤이 길어져서 사용자가 목록에서 원하는 게시글을 찾기 어려움
  • 전송해야 할 데이터가 많아지므로 페이지 로딩 속도가 느려짐
  • 한꺼번에 많은 데이터를 처리해야 하므로 데이터베이스에도 과부하가 걸림

▣ 페이징을 위한 설정

  • 한 페이지에 출력할 게시물의 개수
    - POSTS _PER_PAGE = 10
  • 한 화면(블록)에 출력할 페이지 번호의 개수
    - PAGES_PER_BLOCK = 5

▣ 페이징 구현 절차

  • 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 방식 게시판에서도 동일하게 사용
  • 이처럼 공통적으로 쓰이는 기능은 별도의 유틸리티 클래스로 만들어두면 재사용성이 높아짐

0개의 댓글

관련 채용 정보