2005년 8월 23일자 테크 팁 엔퍼프라이즈용 Java Application Verification Kit(애플리케이션 검증 키트)에서는 기업용 자바 AVK를 이용하여 애플리케이션 수트 소스 파일과 설명자(descriptors)에 대해 정적 테스트를 수행하는 방법에 관해 설명한 바 있다. 애플리케이션 수트는 EAR 파일, WAR 파일 및 확인 대상 애플리케이션을 구성하는 기타 개발 유닛으로 이루어진다.
AVK를 통해 정적 테스트를 수행한 후에 이를 이용하여 런타임 테스트를 수행할 수도 있다. 런타임 테스트는 애플리케이션을 실행함으로써 인보크되는 엔터프라이즈 빈 컴포넌트 메소드, 웹 서비스 메소드, 및 웹 컴포넌트의 비율을 결정한다. 이번 테크팁에서는 AVK를 이용하여 런타임 테스트를 수행하는 방법을 보여준다. 이 팁은 기업 사용자 안내서를 위한 자바 AVK에 담긴 정보를 토대로 한 것이며, 사용자 안내서는 온라인으로도 제공된다. AVK 배포판의 docs 디렉토리에도 사용자 안내서(영문)가 포함되어 있다.
아직 설치하지 않았다면, 엔터프라이즈용 Java Application Verification Kit (AVK) 페이지에서 AVK 배포판을 다운로드하여 설치하도록 한다. 이제, 관련 애플리케이션 수트에 대해 정적 테스트를 수행해야 한다.
이어서 인스트루먼테이션을 켠 상태로 자바 애플리케이션 서버를 시작한다. AVK의 설치 프로세스가 인스트루먼테이션을 enable되도록 서버 구성 파일을 수정한다. 이제 애플리케이션 서버를 시작할 때 인스트루먼테이션이 enable된다. 애플리케이션 서버를 시작하려면 asadmin start-domain 명령어를 이용하여 시작하고자 하는 도메인의 이름을 지정한다. 명령어는 AVK 설치 디렉토리 아래의 appserver/bin 디렉토리에 위치한다. (AVK 설치 시, AVK로 애플리케이션 서버를 설치하거나 이미 설치된 것을 이용할 수 있도록 하는 옵션이 주어진다.) --verbose 옵션을 이용하여 다음과 같은 서버 로그 출력을 디스플레이할 수 있다.
asadmin start-domain --verbose domain1
데이터베이스 액세스의 경우, 애플리케이션 서버에 속한 PointBase 데이터베이스를 이용할 수 있으며, 여기에는 사전 구성된 JDBC(Java Database Connectivity) 리소스와 커넥션 풀이 사용된다. 데이터베이스 액세스를 위해 JDBC API를 이용하는 방법에 관한 자세한 내용은 Sun Java System Application Server Platform Edition 8.1 개발자 가이드(영문)를 참조하도록 한다. 여러분의 애플리케이션에서 데이터베이스가 사용되고 있다면 지금 데이터베이스를 시작해야 한다.
애플리케이션 스위트용 리소스 생성
애플리케이션이 서버 리소스(가령 JDBC 리소스 또는 JMS(Java Message Service) ) 리소스 및 수신지)를 사용할 경우에는 해당 리소스를 생성해야 한다. 어드민 콘솔 애플리케이션 서버 또는 asadmin 명령어를 이용하여 이런 리소스를 생성할 수 있는데, 어드민 콘솔을 이용하려면 브라우저에서 http://localhost:4848/ URL을 열고 관리용 사용자명과 비밀번호(애플리케이션 서버 설치 시에 생성)를 입력한다.
애플리케이션을 배치하기 전에 애플리케이션 서버 배치 툴 내의 각 모듈을 열고 애플리케이션 서버가 요구하는 런타임 정보가 정확한지 확인해야 한다. 이 정보에는 주로 애플리케이션이 이용하는 리소스의 JNDI(Java Naming and Directory Interface) API 이름이 사용된다.
애플리케이션 스위트 내의 각 엔티티 빈에 대해 데이터베이스 테이블을 생성해야 할 수도 있다는 점을 유념한다. 이 경우에도 애플리케이션 서버에 포함된 PointBase 데이터베이스를 이용할 수 있는데, 여기에는 PointBasePool이라는 이름의 사전 구성된 JDBC 커넥션 풀과 jdbc/PointBase라는 이름의 사전 구성된 JDBC 리소스가 들어 있다. 이 리소스를 이용하거나 어드민 콘솔을 이용하여 관리 수준에서 자체 리소스를 생성할 수 있다. 데이터를 사전에 populate해야 할 데이터베이스가 있는 경우, 가장 간단한 방법은 Ant 태스크를 생성하는 것이다.
애플리케이션 스위트 배치 그리고 컴포넌트 라이브러리를 위한 제외 목록 생성
다음 단계는 애플리케이션 수트를 배치하는 것이다. 기본값으로, AVK 리포팅 툴은 배치된 모든 EAR 파일 및 독립형 모듈을 동일한 애플리케이션 수트의 일부로 간주하여 처리한다. 일반적으로, 확인 대상 애플리케이션 수트에 속하지 않는 모듈은 모두 배치 해제해야 한다.
하지만 애플리케이션 스위트에는 애플리케이션에 의해 사용되기는 하지만 그 일부라고 할 수는 없는 컴포넌트 라이브러리가 포함되는 경우가 종종 있다. 이런 라이브러리는 다른 벤더에서 제공한 것으로 이미 확인을 마친 경우가 대부분이다. 이 경우, AVK를 구성하여 런타임 확인 프로세스에서 이런 라이브러리 또는 그 안의 모듈을 제외시킬 수 있다.
확인 작업에서 애플리케이션의 일부 또는 전부를 제외하려면 AVK를 설치한 디렉토리로 가서 config/appVerification/AppExcludeList.xml 파일 내의 <exclude-list> 엘리먼트를 편집한다. WombatApp.ear 및 KangarooApp.ear가 포함되어 있다고 가정하자. 아울러, WombatApp.ear에는 다음과 같은 모듈이 포함되어 있고,
ejb1.jar ejb2.jar web1.war web2.war
KangarooApp.ear에는 다음과 같은 모듈이 포함되어 있다.
ejb3.jar ejb4.jar web3.war web4.war
이 때, 확인 프로세스에서 모든 KangarooApp를 제외하려면 다음과 같이 지정한다.
<exclude-list>
<j2ee-app>
<name>KangarooApp</name>
</j2ee-app>
</exclude-list>
KangarooApp의 2개 컴포넌트 ejb3.jar 및 web4.war만을 제외하려면 다음과 같이 지정한다.
<exclude-list>
<j2ee-app>
<name>KangarooApp</name>
<ejb-bundle>
<name>ejb3.jar</name>
</ejb-bundle>
<web-bundle>
<name>web4.war</name>
</web-bundle>
</j2ee-app>
</exclude-list>
ejb-app 또는 web-app 태그를 이용하여 독립형 EJB JAR 파일 또는 웹 WAR 파일을 지정한다. 예:
<ejb-app>
<name>EjbModule</name>
</ejb-app>
<web-app>
<name>WebModule</name>
</web-app>
자세한 내용을 보려면 AVK 배포판에서 제공하는 dtds/application-verification-app-exclude_1_4.dtd 파일의 AppExcludeList.xml을 위한 DTD를 참조한다. AppExcludeList.xml 파일에 입력을 할 때는 독립형 모듈 이름을 위한 파일 확장자(EAR 파일, EJB JAR 파일, WAR 파일 등)를 지정하지 않는다. 한편, 애플리케이션 내에 포함된 EJB JAR 또는 웹 WAR 파일에 대해서는 .jar 또는 .war 등의 파일 확장자를 붙일 필요가 없다.
애플리케이션 스위트 실행
애플리케이션 스위트를 배치한 후에는 이를 실행하여 가능한 한 많은 기능을 인보크한다. 이 단계에서 수동 또는 자동으로 JSP(JavaServer Pages) 페이지, 서블릿, 공개 EJB 메소드 등을 인보크한다. 실행 단계가 종료되면 다음 명령어를 이용하여 서버를 중단한다(그러나 애플리케이션의 배치를 해제하지는 않는다).
asadmin stop-domain
이 명령어는 서버가 종료되는 동안 몇 가지 작업을 수행하는데, 예컨대 애플리케이션 스위트의 테스트 실행 과정에서 수집된 모든 데이터를 디스크에 기록하는 것이 그것이다. 이 외에도, 서버는 배치된 애플리케이션 스위트에 대해 인트로스펙션(introspection)을 수행하고 J2EE 공개 API(EJB 메소드 및 웹 컴포넌트 포함)의 목록을 생성한다.
리포팅 툴 구동
애플리케이션 스위트를 실행한 후 다음 명령어를 사용하여 리포팅 툴을 구동한다.
reporttool -result
주의: Windows 플랫폼에서 실행하는 경우에는 AVK를 설치한 bin 디렉토리 내의 reporttool.bat 파일을 업데이트해야 한다. 파일 내에서 %JAVA_CMD%로 시작되는 행을 찾아 다음과 같이 인용부호를 친다: "%JAVA_CMD%".
리포팅 툴은 인트로스펙션과 인스트루먼테이션의 결과를 비교하고 이를 바탕으로 보고서를 작성한다. 또한, 리포팅 툴은 결과의 비교를 통해 일련의 HTML 파일을 생성하고 최고 수준 요약 보고서의 URL을 표시한다.
Jul 13, 2005 11:26:07 AM com.sun.enterprise.appverification. tools.DynamicResultLogger findResult INFO: staticDirName C:\Sun\javke1.4.1\reporttool\static Jul 13, 2005 11:26:07 AM com.sun.enterprise.appverification. tools.DynamicResultLogger findResult INFO: Comparing instrumentation and introspection results... Jul 13, 2005 11:26:08 AM com.sun.enterprise.appverification. tools.DynamicResultLogger findResult INFO: Generating final results ... Jul 13, 2005 11:26:10 AM com.sun.enterprise.appverification. tools.DynamicResultLogger generateSummary INFO: Verfication results can be found at C:\Sun\javke1.4.1\reporttool\results\suiteSummary.html
reporttool 디렉토리 내에 HTML 페이지가 생성된다. 최고 수준 요약 보고서는 reporttool 디렉토리 내의 results/suiteSummary.html 파일에 들어 있으며, 요약에는 정적 아카이브 테스트 및 코드 스캐닝 테스트의 결과에 대한 포인터, 각 모듈에 대한 EJB 메소드 커버리지의 요약, 웹 컴포넌트 커버리지의 요약 등이 포함된다. 리포팅 툴은 결과 요약 시 Pass 또는 Fail 상태를 표시한다.
생성되는 커버리지 보고서로서는 EJB 메소드와 웹 컴포넌트를 위한 두 가지 종류가 있다.
EJB 메소드 커버리지 보고서
EJB 메소드 커버리지는 EAR 파일 또는 모듈에 의해 보고되는데, 이 때 가이드라인은 반드시 각 모듈 내 EJB 메소드의 80% 이상이 커버되어야 한다는 것이다.
EJB Method Coverage 페이지는 EAR 파일 또는 모듈 컨텐츠를 확장하고 해당 커버리지로 각 파일의 JAR 파일 및 빈을 열거한다. Methods Called 열은 각 빈의 총 메소드 수에 대한 호출된 메소드의 수를 보여준다. 빈 이름을 클릭하면 EJB Method Coverage Detail 페이지가 뜨고 해당 빈의 각 메소드의 상태를 표시한다. 최초의 테이블에는 성공적으로 호출되지 않은 메소드가 포함되어 있는데, 이 메소드들은 전혀 호출되지 않았거나 호출 과정에서 예외 메시지가 전달된 경우이다. 다음 테이블은 성공적으로 호출된 모든 메소드를 보여주며, 이 정보는 가이드라인이 지켜지지 않은 경우 가이드라인에 맞도록 커버리지를 증가시키기 위해 인보크해야 할 메소드를 결정하는 데 사용될 수 있다.
웹 컴포넌트 커버리지 보고서
웹 컴포넌트 커버리지는 컨텍스트별로 보고된다. 가이드라인은 반드시 JSP 페이지 및 서블릿이 예외 없이 100% 호출되어야 한다는 것이다.
요약 페이지의 테이블은 호출된 웹 컴포넌트의 퍼센티지를 보여준다. Passed 또는 Failed 중 하나를 클릭하면 Web Component Coverage 페이지가 뜨고, 호출 여부와 관계없이, 그리고 호출되었다면 예외가 있었는지 여부와 관계없이, 각 컴포넌트를 컨텍스트 루트별로 열거한다. 이 정보는 가이드라인에 맞도록 커버리지를 증가할 때 호출해야 하는 웹 컴포넌트를 결정하는 데 사용될 수 있다.
커버리지 보고서는 다른 JSP 페이지가 include directive를 이용하여 포함시킨 JSP 페이지들을 열거하지 않는 대신 이 페이지의 include directive가 포함된 JSP 페이지만을 열거한다. 한편, JSP include action와 함께 포함된 JSP 페이지들은 커버리지 보고서에 열거된다.
결과 및 보고서 삭제하기
인스트루먼테이션 코드에 의해 생성된 결과 및 보고서를 삭제하려면 -clear_results 옵션으로 리포팅 툴을 실행한다.
reporttool -clear_results
동적 검사 과정에서 예외가 전달되었고, 여러분이 문제를 해결했을 경우에 이 옵션을 사용한다. 또한, 결과에서 예외를 제거하려면 반드시 모든 결과를 삭제해야 한다
AVK에 관한 자세한 내용은 엔터프라이즈용 Java Application Verification Kit (AVK)(영문) 페이지를 참조하기 바란다.
"Java EE" 카테고리의 다른 글
- JAX-WS 핸들러 구성, 패키징, 배치하기 (댓글 2개 / 트랙백 0개) 2006/10/19
- Enterprise Bean에서 보안 주석 사용하기 (댓글 4개 / 트랙백 0개) 2007/05/28
- 엔터프라이즈용 Java Application Verification Kit, 2부 (댓글 1개 / 트랙백 0개) 2005/10/05
- Java Persistence를 최상으로 구현하는 방법 (댓글 12개 / 트랙백 0개) 2007/07/23
- SAAJ 소개 (댓글 1개 / 트랙백 0개) 2005/06/08
- 커스텀 ELResolver를 이용하여 통합 EL 확장하기 (댓글 4개 / 트랙백 0개) 2006/10/19
- JAX-WS를 이용한 웹 서비스 개발 (댓글 1개 / 트랙백 0개) 2006/01/18
- JAXR (JAVA API FOR XML REGISTRIES) (댓글 1개 / 트랙백 0개) 2005/05/18
- GlassFish에서 호출 흐름 모니터링하기 (댓글 3개 / 트랙백 0개) 2006/06/16
- Groovy, Grails, MySQL 및 Java Persistence API의 조합 (댓글 0개 / 트랙백 0개) 2008/08/20
댓글을 달아 주세요
좋은 정보 감사해요~
2007/09/19 05:02