View Source

*06. 페이지 처리의 중요성*
- 클라이언트/서버 환경에서 대용량 데이터를 조회할 때는 커서를 닫지 않은 채 사용자 이벤트가 발생할 때마다 결과 집합을 Fetch 하도록 구현할 수 있다.
- 웹 애플리케이션 환경에서는 커서를 계속 오픈한 채로 결과집합을 핸들링 할 수 없다.
- 데이터베이스와의 연결을 지속하지 않는 웹 환경이기 때문에 사용자가 다음 페이지를 요청하거나 스크롤 바를 내릴 때마다 개별적인 SQL문을 수행하는 방식으로 페이지 처리를 구현해야 한다.
- 페이지 처리를 서버 단에서 완료하고 최종적으로 출력할 레코드만 Fetch 하도록 해야 한다.
\\
- 페이지 처리를 하지 않았을 때 발생하는 부하요인
1. 다량의 Fetch Call 발생 (SQL*Net roundtrips to/from client)
2. 대량의 결과 집합을 클라이언트로 전송하면서 발생하는 네트워크 부하
(byte sent via SQL*Net to client)
3. 대량의 데이터 블록을 읽으면서 발생하는 I/O 부하
4. AP서버 및 웹 서버 리소스 사용량 증가.
\\
- 해결방법
1. 페이지 단위로, 화면에서 필요한 만큼씩 Fetch Call
2. 페이지 단위로, 화면에서 필요한 만큼씩 네트워크를 통해 전송.
3. 인덱스와 부분범위처리 원리를 이용해 각 페이지에 필요한 최소량만 I/O
4. 데이터를 소량씩 나누어 전송하므로 AP, 웹 서버 리소스 사용량 최소화
\\
- 조회할 데이터가 일정량 이상이고 수행빈도가 높다면 필수적으로 페이지 처리를 구현해야 한다.
- 일반 조회 시에는 페이지 처리를 하고, 사용자가 필요할 때만 '전체 조회' 또는 '다운로드 받기' 버튼을 클릭할 수 있도록 기능을 제공.
\\
- 페이지 처리를 하는 목적은, 1차적으로 데이터베이스 Call 횟수를 줄이고 네트워크를 통한 데이터 전송량을 최소화하고, 서버 내에서의 처리 일량을 줄이는 데에도 있다.



h2. 문서에 대하여

* 최초작성자 : [김종원]
* 최초작성일 : 2010년 01월 09일
* 이 문서는 [오라클클럽|http://www.gurubee.net] [코어 오라클 데이터베이스 스터디|3차 코어 오라클 데이터베이스 스터디] 모임에서 작성하였습니다.
* {color:blue}{*}이 문서의 내용은 (주)비투엔컬설팅에서 출간한 '오라클 성능 고도화 원리와 해법I'를 참고하였습니다.*{color}