 |
|
난이도 : 초급 Sing Li, Author, Wrox Press
2006 년 4 월 04 일 Apache Tomcat 5.5에서 IBM® WebSphere® Application Server Community Edition V1.0으로 J2EE™ 웹 티어 애플리케이션을 마이그레이션 하는 방법을 설명한다.
이미 Apache Tomcat 5.x를 사용하여 웹 애플리케이션을 호스팅 하고 있고 강력하고 개발자 친화적인 개발 또는 제품 환경으로서 IBM WebSphere Application Server Community Edition V1.0을 평가하고 싶다면 이 글이 도움이 될 것이다.
Tomcat 5.5 애플리케이션 서버와 WebSphere Application Server Community Edition간 구현 차이 알아보자. 샘플 애플리케이션을 두 가지 구현들 간 차이를 명확히 설명하겠다. 먼저 애플리케이션을 Tomcat 5.5에 전개한 다음, 마이그레이션 단계를 수행하고 WebSphere Application Server Community Edition (이후 Community Edition)에 전개할 것이다.
이 글의 섹션 구성은 다음과 같다.
구현 분석: Tomcat 대 Community Edition
한 벤더의 서버에서 또 다른 서버로 애플리케이션을 마이그레이션 하기란 여간 까다로운 작업이 아닐 수 없다. J2EE 인증이라는 보증이 있음에도 불구하고 벤더 스팩의 기능들과 확장을 사용할 수 있다. 바로 이것 때문에 서버들 간 이식성이 떨어지게 되는 것이다. 하지만 Tomcat 5.5에서 Community Edition으로 이동할 때는 문제될 것 없다.
Tomcat 5.5와 Community Edition 1.0 간 애플리케이션 이동이 수월한 이유는 Tomcat 5.5가 Community Edition 1.0의 일부이기 때문이다. 바로 웹 티어 컨테이너로서 Tomcat 5.5.9를 통합한 것이다. 결과적으로 다른 웹 티어 컨테이너로 마이그레이션 할 필요도 없다. 그림 1은 Tomcat 5.5 통합 모습이다.
그림 1. WebSphere Application Server Community Edition으로의 Tomcat 5.5 통합
그림 1을 보면 익숙한 Tomcat 5.5 서버로 작업하게 될 것이라는 사실을 알 수 있다. Community Edition에 맞게 Tomcat 5.5 애플리케이션 티어 자산들을 재패키지 또는 변경할 필요가 없다. 하지만 애플리케이션을 마이그레이션 할 때는 차이점도 알아둬야 한다.
차이점은 다음과 같은 이유에서 기인한다.
- Tomcat 5.5가 Community Edition 컨테이너에 통합되는 방법. Community Edition은 이제 설정 관리를 핸들한다.
- 완벽한 J2EE 1.4 서버의 리소스를 이제 Tomcat에서도 사용할 수 있다.
기본적으로는, 빌트인 JNDI 지원, 보안, 빌트인 EJB 지원, 빌트인 JMS 브로커, 빌트인 RDBMS 같은 컨테이너 서비스를 제공하면서 더 큰 J2EE 컨테이너에서 Tomcat 5.5를 래핑하는 것으로 생각할 수 있다.
마이그레이션 관련 문제들을 극복하기 위해 해야 할 일은 Tomcat 5.5 설정 기능이 Community Edition 컨테이너로 어떻게, 어디로 매핑되는지를 파악하는 것이다. 일단 이러한 매핑 위치를 잡았다면 Tomcat 5 컨테이너의 작동은 여러분이 작업하고 있는 Tomcat 5.5 서버와 동일하다. 통합 과정에서 Tomcat 5.5의 내부적인 아키텍처 변경이 없다. Community Edition 컨테이너에 간단하게 래핑된다. 현재 5.5 릴리스 이상의 Tomcat 버전이 빠르게 Community Edition으로 통합될 수 있다는 의미이다.
아래 표는 스탠드얼론 모드에서 실행되는 Tomcat 5.5 서버와 Community Edition으로 통합된 서버 간 중요한 차이를 보여준다.
표 1. Tomcat 5.5와 Community Edition 1.0 특징 비교
| 특징 | Tomcat 5.5 스탠드얼론 | WebSphere Application Server Community Edition 1.0 |
|---|
| 서블릿과 JSP | Servlet 2.4와 JSP 1.2 컴포넌트를 처리하는데 같은 엔진이 사용된다. | 코어 엔진의 경우 Tomcat 5.5와 차이가 없다.
| |
다중 커넥터
|
다중 프로토콜 핸들러가 같은 엔진에 액세스 할 수 있다. 예를 들어, HTTP 1.1 커넥터는 같은 엔진상의 SSL 커넥터와 작동할 수 있다.
|
Community Edition 웹 콘솔은 사용될 커넥터를 설정하는데 사용된다.
| |
JNDI
|
JNDI는 에뮬레이트 된다. server.xml을 통해 JNDI 리소스를 직접 설정해야 한다.
|
JNDI는 Apache Geronimo 커널에서 관리되는 Gbean 또는 객체 레퍼런스에 액세스 한다.
| |
영역
|
Tomcat의 영역은 사용자 ID와 패스워드 정보를 가진 데이터베이스 이다. server.xml 또는 context.xml 파일들을 통해서 Tomcat에서 영역을 설정한다.
|
Community Edition은 컨테이너 관리형 보안 영역을 지원한다. 모든 Community Edition 애플리케이션 컴포넌트의 권한과 인증을 위해 전체 컨테이너에 일관성 있게 적용된다.
| |
가상 호스트
|
하나의 서버가 다중 도메인 이름을 가진 애플리케이션을 호스팅 할 수 있다. server.xml을 편집하여 가상 호스트를 설정해야 한다.
|
이 기능이 지원된다. j2ee-tomcat-plan.xml을 편집하고 이를 서버에 재전개 해야 한다.
| |
밸류
|
밸류 체인이 Tomcat 컴포넌트와 제휴 될 수 있다. server.xml 또는 context.xml을 편집해야 한다.
|
역시 지원된다. j2ee-tomcat-plan.xml을 편집하고 이를 서버에 재전개 해야 한다.
| |
JDBC 데이터소스
|
여느 JDBC 드라이버를 사용하여 설정될 수 있다. 풀링에 Apache DBCP를 사용하도록 설정될 수 있다. |
Community Edition은 JCA 1.5와 TranQL을 사용하여 JDBC를 통해 다양한 RDBMS에 액세스 한다. 웹 기반 GUI 콘솔을 사용하여 설정할 수 있다. |
Community Edition에는 server.xml 이나 context.xml이 없다는 것에 주목하라. Community Edition 컨테이너는 이제 모든 설정 관리를 핸들한다. 대신, 두 개의 전개 플랜 중 하나를 수정해야 한다. 자신의 필요에 맞게 j2ee-tomcat-plan.xml 파일 이든 geronimo-web.xml이든 변경하도록 한다. 커넥터 변경 같은 태스크는 Community Edition 웹 콘솔에서 가능하다.
샘플 애플리케이션을 통해 실제 마이그레이션 연습을 해 보자.
샘플 애플리케이션
우리가 마이그레이션 할 샘플 애플리케이션은 General Store 애플리케이션이고 다음과 같은 웹 티어 컴포넌트를 사용하여 구현된다.
- JSP
- 서블릿
- JSP Standard Tag Library(JSTL)
이 애플리케이션은 MVC(Model-Controller-View) 기반 아키텍처를 사용하여 요청을 라우팅하고, 전체적으로는 스크립트가 없다. (JSP 페이지 내에 삽입된 자바 코드가 없다.)
Tomcat 5.5 애플리케이션으로서, 다음과 같은 Tomcat 기능들을 사용한다.
- 사용자 인증에 Default Tomcat UserRealm을 사용한다.
- 외부 Derby 데이터베이스와 연결된 JDBC 데이터 소스 검색에 JNDI를 사용한다.
그림 2는 이 애플리케이션의 아키텍처 모습이다.
그림 2. General Store 샘플 애플리케이션
그림 2에서, 인커밍 요청들은 모두 컨트롤러(MVC 아키텍처) 서블릿으로 향한다. 이 서블릿은 인커밍 요청의 매개변수에 따라서 요청들을 두 개의 JSP 페이지들 중 하나로 보낸다. 처음에 이 요청은 제품 카탈로그를 디스플레이 하는 generalstore.jsp로 간다.
그림 3. 애플리케이션 카탈로그 페이지
BUY 하이퍼링크들 중 하나를 클릭하면 Controller는 요청을 checkoutcart.jsp 페이지로 보낸다. 여기에서 여러 아이템들을 카트에 추가하거나 카트를 비우거나 다시 쇼핑하기로 돌아갈 수 있다.
generalstore.jsp와 checkoutcart.jsp 모두 JSTL을 사용하여 인터랙티브 쇼핑 카드를 스크립팅 한다. 어떤 삽입된 자바 코드도 사용되지 않는다.
GerneralStore라는 클래스는 카테고리와 각 카테고리에 있는 제품 리스트를 얻을 수 있는 메소드를 갖고 있다. 제품 시나리오에서 이 클래스의 구현은 데이터용 외부 DBMS로 연결된다. 이 예제에서 이 구현은 카테고리와 제품 정보를 하드 코딩하여 단순함을 유지하고 있다.
JDBC를 통해 RDBMS를 내보이기 위해 checkoutcart.jsp 페이지는 RDBMS를 사용하여 그날의 광고 메시지를 보내고 이를 쇼핑하는 사람에게 디스플레이 한다.
샘플 애플리케이션을 구성하고 있는 파일들은 ZIP 파일로 되어있으며 다운로드 할 수 있다. 표 2는 애플리케이션을 구성하고 있는 클래스와 파일들을 요약해 놓은 것이다.
표 2. General Store 샘플 애플리케이션의 파일들
| 파일 | 설명 |
|---|
|
generalstore.jsp
|
사용자에게 카탈로그를 제공한다.
| |
checkoutcart.jsp
|
사용자에게 쇼핑 카트를 제공한다. (JNDI를 통해 검색한) 데이터 소스를 통해 RDBMS에 액세스 하여 프로모션 메시지를 디스플레이 한다.
| |
generalstore.css
|
HTML 엘리먼트를 두 개의 JSP 페이지로 포맷팅 하는데 사용되는 스타일시트.
| |
StoreController.java
|
요청을 JSP로 보내는 주 컨트롤러. 카테고리와 제품 정보를 포함하고 있고 이들을 JSP용 애트리뷰트로 첨부하여 디스플레이 한다.
| |
GeneralStore.java
|
애플리케이션에 필요한 데이터를 리턴하는 메소드를 포함하고 있다. 커스텀 태그 라이브러리(generalstore-taglib.tld 참조)를 구현하는 함수도 포함되어 있다.
|
Category.java
Proudct.java
LineItem.java
|
애플리케이션의 모델과 뷰 간 데이터가 이동될 때 값을 보유하는데 사용되는 JavaBeans.
| |
generalstore-taglib.tld
|
JSP에 사용되는 GeneralStore.java의 메소드로서 구현된 커스텀 태그 라이브러리. |
이 샘플 애플리케이션을 사용하려면 다음을 다운로드 하여 설치하도록 한다.
Tomcat 5.5 환경에 전개하기
예제를 구현하기 전에 코드 디렉토리에 있는 build.xml 파일에서 wasce.home 변수를 수정하여 설치 디렉토리를 나타내도록 한다. 코드 디렉토리로 가서 다음 명령어를 입력하여 예제 웹 애플리케이션을 구현할 수도 있다.
이 명령어는 dist 디렉토리에 generalstore.war라고 하는 WAR 파일을 만들 것이다. 이것은 Tomcat 5.5에 전개할 수 있는 웹 애플리케이션 아카이브 파일이다.
1. Tomcat 5.5 커넥터 설정
Tomcat 5.5 서버는 기본적으로 8080 포트에서 요청들을 리스닝 한다. 이것은 Tomcat 5.5 설치 디렉토리 밑에 있는 conf/server.xml을 통해 설정된다. Listing 1은 커넥터를 구성하는 server.xml 세그먼트이다.
Listing1. server.xml에서의 Tomcat 커넥터 설정
<Server port="8005" shutdown="SHUTDOWN">
...
<!-- Define the Tomcat Stand-Alone Service -->
<Service name="Catalina">
...
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" /> |
포트를 변경하려면 다음과 같이 한다.
- 서버를 중지한다.
port="8080"를 위 server.xml 세그먼트에 있는 원하는 포트로 변경한다.
- 서버를 다시 시작한다.
2. Tomcat 5.5 인증 영역 설정
영역은 Tomcat에 사용자, 그룹, 패스워드 정보를 관리한다. 기본적으로 UserDatabaseRealm이 Tomcat 5.5에서 설정된다. 이것은 스토어에 액세스 하기 전에 사용자를 인증한다. 이 영역은 server.xml 파일에서도 설정된다. Listing 2의 server.xml 코드 세그먼트에서 볼드체는 인증 영역 설정 부분이다.
Listing 2. server.xml에서의 Tomcat UserDatabaseRealm 설정
<Server port="8005" shutdown="SHUTDOWN">
...
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
...
<Service name="Catalina">
...
<Engine name="Catalina" defaultHost="localhost">
...
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
... |
위 UserDatabaseRealm 설정은 conf/tomcat-users.xml 밑에 있는 파일을 사용하여 사용자, 패스워드, 역할 정보를 관리하도록 되어 있다. 이 영역은 <Engine> 레벨에서 설정되기 때문에 Tomcat <Engine> 컴포넌트 인스턴스에서 실행되는 모는 호스트에 사용될 수 있다.
애플리케이션을 실행하기 위해 conf/server.xml 파일을 수정할 필요가 없다. 디폴트 설정으로도 충분하다. 하지만 UserDatabaseRealm이 모든 사용자 정보를 보유하고 있는 곳인 conf/tomcat-users.xml 파일은 몇 가지 수정이 필요하다. Listing 3에 볼드체로 표시되어 있는 대로 수정한다.
Listing 3. tomcat-users.xml에서 Tomcat 사용자에 admin과 매니저 역할 추가하기
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat,manager,admin"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
</tomcat-users> |
이것은 Tomcat 사용자(패스워드는 'tomcat') 역할을 매니저와 admin 그룹의 일부로 지정한다.
이 애플리케이션의 web.xml 파일에서, 스토어의 컨트롤러는 보호되고 admin 역할을 가진 사용자에만 액세스를 허용한다. Listing 4에서 애플리케이션을 보호하는 web.xml을 볼드체로 표시했다.
Listing 4. 애플리케이션에 액세스 인증이 되어있는 web.xml 전개 디스크립터
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<description>
IBM Community Edition 1.0 Example
</description>
<display-name>IBM Community Edition 1.0 General Store Example</display-name>
<servlet>
<servlet-name>GeneralStore</servlet-name>
<servlet-class>com.ibm.wasce.store.StoreController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GeneralStore</servlet-name>
<url-pattern>/store.cgi</url-pattern>
</servlet-mapping>
...
<security-constraint>
<display-name>General Store Security Constraint</display-name>
<web-resource-collection>
<web-resource-name>Entire store</web-resource-name>
<url-pattern>*.cgi</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Shopping Realm</realm-name>
</login-config>
<security-role>
<role-name>admin</role-name>
</security-role>
...
</web-app>
|
<security-constraint>와 <security-role> 엘리먼트는 표준 J2EE 보안 설정 엘리먼트이고, 컨테이너들 간 이식도 가능하다. 마찬가지로, 수정하지 않은 같은 web.xml이 Community Edition 환경에서도 적용된다는 것이다. 하지만 Tomcat에 이 애플리케이션을 전개하기 전에 애플리케이션이 액세스 할 Derby RDBMS를 설정해야 한다.
3. network Derby 서버 설정
먼저 Apache Derby 10.1이 설치되었는지를 확인한다. Derby 설치 디렉토리에 DERBY_INSTALL 환경 변수를 설정하고 CLASSPATH 환경 변수에 다음 엘리먼트들이 포함되었는지를 확인한다.
- lib/derby.jar
- lib/derbytools.jar
- lib/derbynet.jar
- lib/derbyclient.jar
소스 코드 배포판에서 제공된 sp.bat 파일은 이러한 변수들을 설정하는데 사용된다. 배치 파일을 사용하려면 먼저 이것을 변경하여 실제 Derby 설치 디렉토리에 반영되도록 한다. 그런 다음 네트워크로 연결된 Derby 서버를 다음과 같은 명령어를 사용하여 콘솔 윈도우에서 시작한다.
java org.apache.derby.drda.NetworkServerControl start |
Derby 서버는 디폴트 포트 1527에서 시작하고 리스닝 한다.
다음에는, 사용될 데이터베이스를 만든다. 데이터베이스의 이름을 generalstore로 하고 여기에는 단 하나의 테이블 promotions만 포함하도록 한다. createdb1.sql 파일이 이것의 생성을 수행하고 데이터베이스를 파퓰레이트 한다.
ij 명령어를 사용하여 SQL 스크립트를 실행한다.
java org.apache.derby.tools.ij createdb1.sql |
createdb1.sql 스크립트에는 Listing 5에 보이는 SQL 명령어가 포함된다.
Listing 5. createdb1.sql 스크립트: 데이터베이스 테이블을 만들고 데이터 채우기
connect 'jdbc:derby://localhost/generalstore;create=true';
drop table promotion;
create table promotion
(id char (5) not null,
message char(40) not null,
primary key(id));
insert into promotion values ('1', 'Thank your for your order.');
insert into promotion values ('2', 'Have a nice day!');
exit;
|
ERROR 08001: No suitable driver라는 메시지가 나온다면 필요한 lib/derbyclient.jar 라이브러리가 CLASSPATH 환경 변수에 없는 것이다.
4. Tomcat 5.5 JNDI 리소스 레퍼런스와 JDBC 커넥터
checkoutcart.jsp 페이지는 JSTL의 SQL 지원 태그를 사용하여 프로모션 데이터베이스로 액세스 하고 프로모션 메시지를 프린트 한다. Listing 6은 RDBMS에 액세스 하는 코드를 발췌해 놓은 것이다.
Listing 6. 데이터베이스 서버에 액세스 하는 checkoutcart.jsp의 JSP 코드
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="storetags" uri="/GeneralStoreTagLibrary" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
...
<sql:query var="rs" dataSource="jdbc/storeDB">
select * from promotion
</sql:query>
...
<tr>
<td colspan="5">
<c:forEach var="row" items="${rs.rows}">
${row.message}<br/>
</c:forEach>
</td>
</tr>
...
|
JSTL <sql:query> 태그는 JNDI를 통해 jdbc/storeDB라는 데이터소스를 검색한다. 이름 레퍼런스는 이 애플리케이션의 web.xml 전개 디스크립터 내에 J2EE 표준 방식으로 정의된다. 이 같은 표준 설정은 Tomcat 5.5와 Community Edition 모두 적용된다. Listing 7은 설정 부분이다.
Listing 7. JNDI 데이터소스 레퍼런스를 지정하는 web.xml의 엘리먼트
<resource-ref>
<description>Derby DB connection</description>
<res-ref-name>jdbc/storeDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
|
이제 실제 JDBC 드라이버와 RDBMS 커넥션이 매치되도록 이 레퍼런스를 설정해야 한다. 이는 컨테이너 마다 방식이 다르며 Tomcat과 Community Edition 모두 다르다. Tomcat 5.5의 경우 META-INF/context.xml 파일 (dd 디렉토리)에서 설정된다.(Listing 8)
Listing 8. JNDI 리소스를 Derby JDBC 커넥터와 JDBC 커넥터와 제휴시키는 Tomcat의 context.xml 디스크립터
<Context>
<Resource name="jdbc/storeDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
driverClassName="org.apache.derby.jdbc.ClientDriver"
user="APP" password="APP"
url="c"/>
</Context>
|
Derby 네트워크 JDBC 드라이버인 org.apache.derby.jdbc.ClientDriver는 jdbc:derby://localhost/generalstore에 있는 데이터베이스에 액세스 하는데 사용된다. 이 Derby 서버는 디폴트 사용자 "APP"와 패스워드 "APP"를 갖고 있다.
5. 매니저 애플리케이션으로 Tomcat 5.5 환경에 전개하기
애플리케이션 WAR 파일을 전개하려면 Tomcat 5.5 서버를 시작하고 웹 브라우저가 다음을 가리키도록 한다.
http://localhost:8080/manager/html |
이전에 설정했던 UserDatabaseRealm이 사용하여 로그인 프롬프트가 뜰 것이다. 매니저 역할이 필요하기 때문에 'tomcat'이라는 패스워드와 'tomcat' 사용자를 사용한다.
이 매니저 애플리케이션은 전개된 모든 모듈들을 보여줄 것이다. "Deploy directory or WAR file located on server"용 박스가 있는 밑 부분 까지 스크롤을 내린다. "Context path"의 경우 /Shopping을 입력하고 "WAR or Directory URL"의 경우 generalstore.war 파일에 대한 절대 경로를 입력한다. Deploy 버튼을 누른다. 이제 /Shopping 컨텍스트로 실행되는 General Store 애플리케이션을 볼 수 있다. 그림 4는 전개 후 매니저 애플리케이션 모습이다.
그림 4. Tomcat 매니저를 사용한 애플리케이션 전개
다음 URL을 사용하여 애플리케이션에 액세스 한다.
http://localhost:8080/Shopping/store.cgi |
쇼핑 카드에 몇 가지를 추가하라. 프로모션 메시지 디스플레이를 주목하라. 이 메시지를 얻기 위해 Derby RDBMS에 액세스 되었다.
Community Edition으로 애플리케이션 마이그레이션 하기
일반적으로 General Store 애플리케이션을 Community Edition 1.0으로 마이그레이션 하기 위해서는,
- Tomcat UserDatabaseRealm을 Community Edition 컨테이너의 관리를 받는 인증 영역으로 설정 및 대체한다.
- 스탠드얼론 버전의 Derby 보다는 Community Edition에 포함된 IBM Cloudscape™ RDBMS (Derby 기반)을 사용한다.
- Community Edition에서 관리하는 새로운 데이터 소스를 만든다.
- 필요한 데이터베이스 테이블을 만들고 데이터를 채운다.
- JNDI 레퍼런스를 설정하여 Community Edition의 Cloudscape 데이터 소스를 가리키도록 한다.
마이그레이션 동안 변경될 필요가 없는 엘리먼트는,
- web.xml에 있는 데이터 소스에 대한 JNDI 레퍼런스
- web.xml의 애플리케이션을 보호하는 보안 설정
이러한 엘리먼트들은 J2EE 컨테이너들 간 이식이 가능하도록 주의 깊게 코딩 된다.
1. Community Edition에서 Tomcat 연결에 사용되는 포트를 변경한다.
Community Edition에서 Tomcat 연결에 사용되는 포트를 변경해야 한다면 server.xml 파일을 찾지 말라. Community Edition에는 없다. 대신, Community Edition 설치 디렉토리 밑에 있는 var/config 디렉토리에서 config.xml 파일을 찾아본다. Listing 9는 Tomcat 설정 엘리먼트를 포함하고 있는 config.xml을 발췌한 것이다. 포트 넘버를 볼드체로 했다.
Listing 9. Community Edition의 config.xml 파일에 있는 Tomcat 커넥터 설정
<gbean name="TomcatWebConnector">
<attribute name="host">0.0.0.0</attribute>
<attribute name="port">8080</attribute>
<attribute name="redirectPort">8443</attribute>
<attribute name="catalinaHome">var/catalina</attribute>
</gbean>
<gbean name="TomcatAJPConnector">
<attribute name="host">0.0.0.0</attribute>
<attribute name="port">8009</attribute>
<attribute name="redirectPort">8443</attribute>
</gbean>
<gbean name="TomcatWebSSLConnector">
<attribute name="host">0.0.0.0</attribute>
<attribute name="port">8443</attribute>
</gbean> |
config.xml에 있는 포트 넘버를 변경하려면 Community Edition을 재시작 한다. Tomcat은 새롭게 설정된 포트를 사용하게 될 것이다.
Tomcat 커넥터를 추가하거나 커넥터에 사용되는 포트 넘버를 편집하는데 웹 콘솔을 사용할 수도 있다. 웹 콘솔 메뉴에서 Server => Web Server를 선택한다.
2. 인증 영역에서 관리되는 Community Edition 설정하기
기본적으로, Community Edition은 "geronimo-properties-realm"이라고 하는 영역을 관리하고, 사용자, 패스워드, 그룹 정보를 저장하기 위해 var/security 디렉토리 밑에 있는 속성 파일을 사용한다. 이 영역에서 설정된 유일한 사용자는 "manager"라는 패스워드를 가진 "system"이다. 이는 "admin" 그룹/역할에 속해있다.
이 영역은 실제로 디폴트 Tomcat 호스트 컴포넌트에 설정된다. doc/plan 디렉토리에서 j2ee-tomcat-plan.xml 이라고 하는 전개 플랜에서 이 설정을 볼 수 있다. 이것은 Tomcat 5.5 서버의 server.xml 파일에 상응하는 것이다. Listing 10의 코드는 Host에 영역이 설정된 장소이다.
Listing 10. j2ee-tomcat-plan.xml에 있는 Tomcat용 Engine 컴포넌트의 디폴트 영역 설정
<gbean name="TomcatEngine" class="org.apache.geronimo.tomcat.EngineGBean">
<attribute name="className">org.apache.geronimo.tomcat.TomcatEngine</attribute>
<attribute name="initParams">
name=Geronimo
defaultHost=0.0.0.0
</attribute>
<references name="Hosts">
<pattern>
<gbean-name>geronimo.server:j2eeType=Host,*</gbean-name>
</pattern>
</references>
<reference name="RealmGBean">
<name>TomcatJAASRealm</name>
</reference>
<reference name="TomcatValveChain">
<name>FirstValve</name>
</reference>
</gbean>
|
Community Edition 설정에서 Tomcat의 모든 컴포넌트(Engine, Host 등)들은 GBeans로 래핑된다. j2ee-tomcat-plan.xml 파일은 server.xml과 상응하는 GBeans용 와이어링 다이어그램이다.
이 예제에서 디폴트 설정을 변경할 필요가 없다. 하지만 Tomcat 시스템 설정을 변경하려면 (예를 들어, 가상 호스트 추가하기) 다음 명령어로 플랜을 재전개 해야 한다.
deploy --user system --password manager redeploy new-j2ee-tomcat-plan.xml org/apache/geronimo/Tomcat |
문제가 발생할 경우를 대비하여 원본 플랜의 복사본을 보관하도록 한다.
General Store 애플리케이션에서 디폴트 영역을 사용하려면 웹 애플리케이션용 Community Edition 스팩의 전개 플랜을 만들어야 한다. 이 플랜은 geronimo-web.xml이라고 하며, WEB-INF 디렉토리에 이것을 배치한다면, WAR 파일의 일부로서 포함될 수 있다. Listing 11은 애플리케이션용 컨테이너 영역을 지정하는 방법을 보여주고 있다.
Listing 11. Community Edition 컨테이너에 의해 관리되는 인증 영역 설정하기
<web-app
xmlns="http://geronimo.apache.org/xml/ns/web/tomcat"
xmlns:sec="http://geronimo.apache.org/xml/ns/security"
xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.0"
xmlns:naming="http://geronimo.apache.org/xml/ns/naming"
parentId="org/apache/geronimo/Security"
configId="com/ibm/wasce/GeneralStore">
<context-root>/Shopping</context-root>
<context-priority-classloader>false</context-priority-classloader>
...
<security-realm-name>geronimo-properties-realm</security-realm-name>
<sec:security
doas-current-caller="false"
use-context-handler="false">
<sec:default-principal realm-name="geronimo-properties-realm">
<sec:principal
class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal"
name="system"/>
</sec:default-principal>
<sec:role-mappings>
<sec:role role-name="admin">
<sec:realm realm-name="geronimo-properties-realm">
<sec:principal
class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"
name="admin"/>
<sec:principal
class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal"
name="system"/>
</sec:realm>
</sec:role>
</sec:role-mappings>
</sec:security>
|
 |
Tomcat 작업 디렉토리 Community Edition 내부에서 Tomcat이 실행될 때 작업 및 임시 파일들을 어디에다 두는지 궁금할 것이다. 기본적으로, Tomcat 작업 디렉토리는 Community Edition 설치 디렉토리의 var/catalina 하위 디렉토리 밑에 있다.
|
|
Listing 12에서, Tomcat 5.5 버전과 같은 컨텍스트 경로로 Community Edition 애플리케이션에 액세스 하기 위해 <context-root>가 "/Shopping" 으로 설정된다.
<security-realm-name>은 geronimo-properties-realm을 지정한다. <security> 엘리먼트는 geronimo-properties-realm의 역할들이 web.xml 내의 <security-constraint> 엘리먼트에서 참조되는 역할들로 매핑하는 방식을 지정한다.
3. Community Edition에서 네트워크 Cloudscape RDBMS 서버를 시작한다.
반드시 스탠드얼론 버전의 Derby를 중지해야 한다. 같은 포트(1527)에서 리스닝 하면 충돌을 일으키기 때문이다.
Community Edition이 실행되면 콘솔에 로그인하여 Application => J2EE Connectors를 선택한다. org/apache/geronimo/DefaultDatabase라는 설정을 시작한다. 이것은 네트워크로 연결된 데이터베이스 인스턴스이다.
4. 프로모션 데이터베이스 테이블을 만들고 데이터를 채운다.
org/apache/geronimo/DefaultDatabase 설정이 시작되면 네트워크로 연결된 Cloudscape 서버가 표준 포트 1527에서 요청들을 리스닝하고, ij 명령어를 사용하여 createdb1.sql 스크립트를 실행할 수 있다.
java org.apache.derby.tools.ij createdb1.sql
|
이 명령어는 필요한 데이터베이스와 테이블을 만든다. 네트워크 드라이버를 사용하여 Cloudscape 데이터베이스 인스턴스로 액세스 한다.
5. Community Edition 관리형 데이터 소스를 만든다.
Community Edition 관리형 데이터 소스를 만들려면 콘솔을 사용하고, Applications => Database Pools를 선택한다. 오른쪽 패인에서 Add New Datasource를 클릭한다. 표 3에 있는 값들을 사용하여 데이터 소스를 만든다.
표 3. Community Edition 관리 데이터 소스 만들기
| 필드 | 값 |
|---|
|
Name
|
StoreDatasource
| |
JNDI Name
|
공백
| |
Dependency
|
리스트에서 org.apache.derby/jars/derbyclient-10.1.ibm.jar를 선택한다.
| |
Driver Classname
|
org.apache.derby.jdbc.ClientDriver
| |
DB URL
|
jdbc:derby://localhost/generalstore
| |
DB User Name
|
APP
| |
DB Password
|
APP
| |
Pool Max Capacity
|
20
| |
Pool Initial Capacity
|
10
|
Create 버튼을 눌러 Community Edition 관리형 풀링 데이터 소스 StoreDatasource를 만든다. 이 데이터 소스는 네트워크 Cloudscape 서버의 Community Edition 관리형 인스턴스에 액세스 하도록 설정된다.
전개를 무사히 완료하면, StoreDatasource라고 하는 새로운 설정이 생성되어 시작된다. 콘솔 메뉴에서 Applications => All Configurations 또는 Applications => J2EE Connectors를 클릭하여 설정을 볼 수 있다. 그림 5는 J2EE Connectors 선택 후 설정의 실행 모습이다.
그림 5. StoreDatasource 실행 모습
6. StoreDatasource와 JNDI 레퍼런스를 제휴 시킨다.
geronimo-web.xml 전개 플랜에 있는 <resource-ref> 엘리먼트를 사용하여 jdbc/storeDB의 web.xml JNDI 레퍼런스에 StoreDatasource를 제휴 시킬 수 있다. (Listing 12)
Listing 12. StoreDatasource와 JNDI 리소스 레퍼런스의 제휴
<naming:resource-ref>
<naming:ref-name>jdbc/storeDB</naming:ref-name>
<naming:resource-link>
StoreDatasource
</naming:resource-link>
</naming:resource-ref>
|
Tomcat 5.5에서 제휴를 설정했을 때에는 context.xml 파일을 사용 했다. Community Edition에서 context.xml에 상응하는 것은 geronimo-web.xml 파일이다. 여기에서 설정된 것은 로컬 애플리케이션 컨텍스트에만 영향을 미친다.
Community Edition 환경에 전개하기
다음 명령어를 사용하여 Community Edition 1.0에 generalstore.war 파일을 전개한다.
deploy --user system --password manager deploy generalstore.war |
Applications => All Configurations를 클릭하여 generalstore.war 파일을 전개하고 오른쪽 패인에서 Install New Application 박스를 사용한다.
애플리케이션이 전개되면, 같은 URL에서 브라우저를 사용하여 애플리케이션에 액세스 할 수 있다.
http://localhost:8080/Shopping/store.cgi |
login/authentication 프롬프트가 생기면 사용자에는 "system"을 패스워드에는 "manager"를 사용한다. 쇼핑 카트에 무엇인가를 놓으면 Cloudscape에서 애플리케이션이 데이터를 보내고 다음과 같은 프로모션 메시지를 내보낸다. Thank you for your order. Have a nice day! (그림 6)
그림 6. RDBMS에서 보내온 프로모션 메시지와 쇼핑 카트
결론
Tomcat 5.5는 Community Edition에 통합되었고 실제로 Community Edition의 일부이기 때문에 Tomcat 5.5에서 WebSphere Application Community Edition 1.0으로의 마이그레이션은 단순하다. 하지만 Community Edition이 이제는 모든 설정 관리를 수행하기 때문에 server.xml 이나 context.xml의 설정 엘리먼트는 이제 다음으로 마이그레이션 되어야 한다.
- config.xml: 커넥터용 포트 넘버 같은 변경 매개변수용
- j2ee-tomcat-plan.xml: 가상 호스트, 영역, 밸류 설정 같은 Tomcat 컴포넌트용. 이 플랜에서 생긴 변경 사항들이 적용되려면 서버에 재전개 해야 한다.
- geronimo-web.xml: 애플리케이션 컨텍스트용 Community Edition 스팩의 전개 플랜. WEB-INF 디렉토리에 포함될 수 있다.
Tomcat 5.5에서 WebSphere Application Server Community Edition으로의 마이그레이션 과정을 통해 인증 영역의 변환, JNDI 레퍼런스 매핑, Cloudscape 네트워크 서버의 설정, JDBC 커넥터의 설정 등 마이그레이션의 주요 포인트를 배웠다.
기사의 원문보기
다운로드 하십시오
참고자료 교육
제품 및 기술 얻기
토론
필자소개
기사에 대한 평가
 |
| 이 문서 북마킹 하기
|
|