Back-End/Java

Java 웹사이트 페이징 처리 방법(게시판 만들기, 게시판 페이징 처리)

개발자 DalBy 2024. 5. 14. 13:39
반응형

Java 웹사이트 페이징 처리 방법(게시판 만들기, 게시판 페이징 처리)

Java를 활용하여 웹 사이트 페이징 처리 방법을 포스팅 하겠습니다.

 

웹 사이트에서 페이징 처리하는 이유?

성능 이슈 : 페이징을 사용하면 웹사이트에서 대규모 데이터 세트를 더 작고 관리 가능한 단위로 표시할 수 있습니다. 모든 데이터를 한 번에 로드하고 표시하면 서버 리소스에 부담을 주고 사용자 환경이 느려질 수 있습니다. 데이터를 페이지로 나누면 웹 사이트에서 콘텐츠를 보다 효율적으로 로드하고 표시할 수 있어 페이지 로드 시간이 단축되고 성능이 향상됩니다.

검색 크롤링 : Googlebot과 같은 검색 엔진 크롤러는 리소스가 제한되어 있으므로 한 번의 방문으로 웹사이트의 모든 페이지를 크롤링하고 색인을 생성할 수는 없습니다. 페이지 매김을 사용하면 웹사이트에서 콘텐츠가 여러 페이지에 분산되어 검색 엔진에서 해당 콘텐츠를 발견하고 색인화할 가능성이 높아집니다.

이렇듯 페이징 처리는 성능 향상, 사용자 경험 향상, 대역폭 보존, 확장성 촉진, 검색 엔진 크롤링 최적화 등등 다양한 웹사이트에서 많이 사용됩니다.

 

 

Java 웹 페이징 처리 방법

메소드 설명

전체 게시글 카운트: totalCnt ( count(*) )
클릭한 페이지: clickPage ( N )
묶을 게시글: pageGroupSize ( ex 10 게시글당 1 블록 )

return: Map

 

※ 참고사항 ※

노출되는 블록 묶음을 수정 하고 싶다면, bloackList 부분을 따로 처리 해 줘야합니다.

public Map<String, Object> paging(int totalCnt, int clickPage, int pageGroupSize){
    Map<String, Object> rMap = new HashMap<String, Object>();

    List<Map<String, Object>> blockList = new ArrayList<Map<String, Object>>();
    int pageNumber = 0;

    int lastPage = (totalCnt % pageGroupSize) == 0 ? (totalCnt / pageGroupSize) : (totalCnt / pageGroupSize) +1;

    for(int i = 1; i <= (pageGroupSize); i++){
        int q = (clickPage % pageGroupSize) == 0 ? (clickPage / pageGroupSize) -1 : (clickPage / pageGroupSize);
        pageNumber = (Integer)(q * pageGroupSize + i);

        if(lastPage < pageNumber){
            break;
        }

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("page", pageNumber);
        blockList.add(map);
    }

    int firstPage = 0;
    if(totalCnt > 0){
        firstPage = 1;
    }

    int prevPage = 0;
    int nextPage = 0;

    if(clickPage < lastPage && clickPage > firstPage){
        prevPage = clickPage - 1;
        nextPage = clickPage + 1;

    } else {
        prevPage = clickPage - 1;
        nextPage = clickPage;

        if(prevPage == 0){
            prevPage = 1;
            if(lastPage > 1){
                nextPage = nextPage + 1;
            }
        }

        if(nextPage == lastPage){
            nextPage = lastPage;
            if(lastPage > 1){
                prevPage = lastPage - 1;
            }
        }
    }

    rMap.put("blockPage", blockList);
    rMap.put("firstPage", firstPage);
    rMap.put("prevPage", prevPage);
    rMap.put("nextPage", nextPage);
    rMap.put("lastPage", lastPage);
    return rMap;
}

 

blockList 페이지 블록 (위 코드의 블록 생성 기준 : pageGroupSize ) 
firstPage 첫번째 페이지
prevPage n번 기준 (이전 페이지)
nextPage n번 기준 (다음 페이지)
lastPage 마지막 페이지

 

실제 적용 화면 테스트

테스트 결과 사진
테스트 결과

 

 



반응형