페이지 처리의 중요성
- 클라이언트/서버환경 : 대용량 데이터를 조회할 때는 커서를 닫지 않은 채 사용자이벤트(다음 버튼, 스크롤바 이동)가 발생할 때마다 Fetch Size 만큼 결과 집합을 Fetch 하도록 구현
(Orange, Toad, Oracle Developer 등등..)
- 웹 애플리캐이션 환경 : 커서를 계속 오픈한 채로 결과집합을 핸들링 할 수 없음.
데이터베이스와의 연결을 지속하지 않는 웹 환경이기 때문에 사용자가 다음 페이지를 요청하거나 스크롤 바를 내릴 때마다 개별적인 SQL문을 수행하는 페이지 처리 방식으로 구현
(JSP, 서벌렛 등등..)
ex) 페이지 처리 하지 않았을 경우
!페이지 처리 안했을 경우.jpg!
ex) 페이지 처리를 했을 경우
!페이지 처리 했을 경우.jpg!
h3.(1) 페이지 처리를 하지 않았을 경우 발생하는 부하 요인
- 다량의 Fetch Call 발생
- 대량의 결과 집합을 클라이언트로 전송하면서 발생하는 네트워크 부하
- 대량의 데이터 블록을 읽으면서 발생하는 I/O 부하
- AP 서버 및 웹 서버 리소스 사용량 증가
h3.(2) 부하 해소 방법
- 페이지 단위로, 화면에서 필요한 만큼씩 Fetch Call
- 페이지 단위로, 화면에서 필요한 만큼씩 네트워크를 통해 전송
- 인덱스와 부분범위처리 원리를 이용해 각 페이지에 필요한 최소량만 I/O
- 데이터를 소량씩 나누어 전송하므로 AP, 웹 서버 리소스 사용량 최소화
h3.(3) 페이지 처리의 목적
- Fetch Call 횟수 감소
- 네트워크를 통한 데이터 전송량 최소화
- 서버 내에서의 처리 일량을 감소(블록 I/O 감소)
h3.(4) 결론
대부분 개발자들은 업무요건 때문에 페이지 처리를 안한다고 하는데.. 수만~수십만 건에 이르는 데이터를 화면에 뿌려놓고 스크롤바를 내리면서
데이터를 분석하지는 않는다. 대부분 데이터 추가가공 및 분석이 목적인데, 이러한 경우에는 사용자의 필요에 따라 전체조회나 Excel 다운로드 기능을
넣어서 엑셀상에서 데이터를 추가가공하여 분석 할 수 있도록 해 주면 된다. 그렇다고 소량의 데이타를 조회 하는데 위와 같은 방법을 제시할 필요는 없다.
결론적으로 해당 업무의 특성에 맞게 구성해주는것이 가장 바람직 하다.