displaytag 정렬/페이징 성능 대 원시 SQL#

http://wrschneider.blogspot.com/2005/01/displaytag-sortingpaging-performance.html

displaytag는 정렬과 페이징을 가진 HTML데이타 테이블을 표현하기 위한 사용하기 쉬운 JSP태그 라이브러리이다. 하지만 체크해야 할 사항이 있다. 기업용 애플리케이션에서 collection은 몇몇 데이터베이스 쿼리의 결과이다. 그래서 전체적으로 presentation 레이어내에서 정렬과 페이징을 구현하는 것은 ORDER BY, LIMIT 그리고 OFFSET (PostgreSQL 문법이라고 가정하여)를 사용하는 데이터베이스내에서 원시적으로 정렬및 페이징을 모두 하는것만큼 효과적이지 않을것이다. 대신에 displaytag는 메모리에 둘 전체 collection을 요구하고 필요한 것만 표시하며 자바 collection자체를 정렬한다.

나는 이것이 성능에 얼마나 많은 영향을 끼치는지 정확하게 보기 위해 몇몇 테스트를 수행했다. 250개의 결과 세트를 가진 비-과학적인 테스트에서 displaytag로 정렬하는 것은 원시 ORDER BY보다 34%의 오버헤드를 추가한다. 페이징을 위해서는 좀더 인상적인 차이점을 가진다. DB에서 250개의 row를 로드하고 오직 25개(pagesize=25)만 표현하는 테스트에서 실질적으로 표시될 25개의 row만을 반환하는 "LIMIT 25"보다 평균적으로 141%더 길게 가진다. 오버헤드 요소는 원래 제한되지 않은 쿼리내 row의 모든 갯수를 가지고 측정할것이다.

그래서 displaytag는 원시 SQL내 정렬과 페이징처럼 명백하게 효과적이지 않다. 하지만 이것이 문제가 될 만큼 충분한 차이점인가.? 이것은 당신 애플리케이션의 의존하여 성능과 훌륭한 디자인사이에 고전적인 거래이다. 관심사항에 대한 분리는 구조화된 J2EE애플리케이션내 presentation 레이어에 개념적으로 속하는 페이징 결과를 말한다. 당신은 이것이 훌륭하지는 않지만 비지니스와 퍼시스턴스 레이어를 통해 정렬/페이징을 늦출수 있다.

나의 개인적인 의견을 통해 성능은 대개 정렬/페이징된 결과를 위해 displaytag를 사용하는 당신에게 권하기 위한 충분한 요소가 될수는 없다. 만약 당신의 쿼리가 표시되지 않는 row로 부터 오버헤드를 가져다 줄수 없는 많은 row를 반환한다면 당신은 적당한 방법의 페이징에 대해 생각하지는 않을것이다. 페이징은 너무 많은 작업으로 부터 데이터베이스의 작업을 줄이는 것이 아닌 큰 HTML문서를 스크롤하거나 다운로드하는것으로 부터 사용자의 수고를 덜어내기 위한 UI 레이어를 생성하는 것과 같은 생각이 될수 있다. 페이지 1로 부터 페이지 47까지 넘어가는것이 어떻게 의미가 있는가.? 만약 당신의 쿼리가 예를 들어 300 row(각각 20 row를 가진 15 페이지) 보다 좀더 많은 것을 반환한다면 당신은 아마도 맹목적으로 페이징을 출력하는것보다 사용자가 추가적인 검색 규칙을 만다는것에 대해 생각해야만 한다.

presentation 레이어가 데이터베이스에 직접적으로 커플링되는 다른 선택사항은 무엇인가.? 이것은 자바 collection보다 SQL쿼리를 가져오고 동적으로 ORDER BY 와 LIMIT/OFFSET을 추가하여 원시적으로 정렬/페이징을 다루는 displaytag를 위한 확장을 상상하는 것이 쉽다.(사실 MS툴셋은 실질적으로 이 패턴을 권고하는것 같다.)

이것은 프로토타입이나 기본적인 CRUD트랜잭션에서 비지니스 로직을 가지지 않는 간단한 애플리케이션을 위해 좋다. 하지만 이것은 재빨리 관리되지 않을수 있다. 만약 DB스키마가 변경된다면 수정해야할 많은 부분이 있을뿐 아니라 당신은 테이블에 직접적으로 접근하여 도입하는 버그의 위험성을 가지고 특정 필드를 묶는 도메인 로직(비지니스 규칙들)을 잠재적으로 후회한다. 특히 쿼리가 객체기반보다 좀더 관계형적이라면 여전히 이것은 유지관리능력을 능가하는 특별한 성능관련 요구사항을 가진 손으로 최적화한 쿼리를 위한 전략처럼 이것을 고려할만한 가치가 있다.

요약해서 말하면 displaytag는 정렬과 페이징을 가진 HTML테이블이 필요한 많은 애플리케이션을 위한 좋고, 간단한 선택이다. 여기서 성능이 중요한 핵심이지만 깔끔하고 관리가능한 디자인이 종종 좀더 중요하다.

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-1) was last changed on 06-Apr-2006 09:45 by 이동국