06.페이지 처리의 중요성

  • 클라이언트/서버 환경에서 대용량 데이터를 조회할 때는 커서를 닫지 않은 채 사용자 이벤트가 발생할 때마다 결과 집합을 Fetch 하도록 구현 가능
  • 웹 애플리케이션 환경에서는 커서를 계속 오픈한 채로 결과집합을 핸들링 할 수 없음

void pagination(ResultSet rs, long pageNo, int pageSize) throws  Exception{
        int i= 0 ;
        while(rs.next){
            if(++i >(pageNo-1)*pageSize) printRow(rs) ;
            if(i == pageNo * pageSize) break ;
        }
        
}

사용자가 다음 페이지를 요청하거나 스크롤 바를 내릴 때마다 개별적인 SQL문을 수행하는 방식으로 페이지 처리를 구현
페이지 처리를 서버 단에서 완료하고 최종적으로 출력할 레코드만 Fetch

* 페이지 처리를 하지 않았을 때 발생하는 부하요인

1. 다량의 Fetch Call 발생
2. 대량의 결과 집합을 클라이언트로 전송하면서 발생하는 네트워크 부하
3. 대량의 데이터 블록을 읽으면서 발생하는 I/O 부하
4. AP서버 및 웹 서버 리소스 사용량 증가

* 부하 해소 방법

1. 페이지 단위로, 화면에서 필요한 만큼씩 Fetch Call
2. 페이지 단위로, 화면에서 필요한 만큼씩 네트워크를 통해 전송.
3. 인덱스와 부분범위처리 원리를 이용해 각 페이지에 필요한 최소량만 I/O
4. 데이터를 소량씩 나누어 전송하므로 AP, 웹 서버 리소스 사용량 최소화

*조회할 데이터가 일정량 이상이고 수행빈도가 높다면 필수적으로 페이지 처리를 구현
*일반 조회 시 페이지 처리
*사용자가 필요할 때만 '전체 조회' 또는 '다운로드 받기' 버튼을 클릭할 수 있도록 기능을 제공.

페이지 처리를 하는 목적은
-1차적으로 데이터베이스 Call 횟수를 감소
-네트워크를 통한 데이터 전송량을 최소화하고
-서버 내에서의 처리 일량을 감소