WAS 구축

	공개SW기술지원센터

Copyright ⓒ 2005공개SW기술지원센터 All right reserved.	http://help.oss.or.kr

문서정보

DATA	Revision	Modifications
2005-10	1.0	초기작성(Booyo Server1.0, Jeus50, webtoB-316b7, Apache2.0, Tomcat 5.x)

목차

문서정보	1

목 차	1

개 요	2

구 성	2

제 1 장 Apache

1. 아파치 설명	3

2. 아파치 2.0 추가 기능	3

3. 아파치 2.0 설치	5

4. 아파치 2.0 가이드	8

제 2 장 WebtoB

1. WebtoB 설명	10

2. WebtoB 주의사항	10

3. WebtoB 설치	10

4. JDK 설치	13

5. WebtoB 환경설정	13

6. WebtoB 실행,종류	14

7. WebtoB 보안설정	16

8. WebtoB 튜닝	17

제 3 장 Tomcat

1. 톰캣 설명	18

2. 톰캣 설치	18

3. 콘텍스트 컨테이너 설정	19

4. 메니져 어플리케이션 설정	23

5. 시큐어 소켓 레이어 설정	25

6. JNDI, JDBC 설정	26

7. Realm 설정	31

8. 아파치와 톰캣 연동	33

제 4 장 JEUS

1. JEUS 설명	36

2. JEUS 요구 사항	36

3. JEUS 설치	36

4. WebtoB와 JEUS 연동	39

참조문서	41

개 요

이 문서는 Booyo Server에서 WAS 종류의 어플리케이션 “Apache, Tomcat, Jeus, WebtoB 등을 보다 빨리 서버 환경에 구축 할수 있도록 돕는 가이드를 제공하고 각각의 용도에 대해 설명 합니다

구 성

System 기본 구성 사항	Intel Celeron CPU 2.00GHz 512MB HDD 120GB
OS	Booyo Server 1.0
Kernel	2.6.10-1.35.bone1
Add-in PCI Device	없음
Linux Package Install	Customize the set of Packages ALL 선택
구성 변경	없음

제 1 장 아파치

1. 아파치 설명

아파치 웹 서버는 전 세계적으로 가장 많이 사용되고 있는 웹서버중의 하나로 전체 시장의 60%에 상회하는 마켓쉐어를 형성하고 있으며 아파치2.0의 멀티스레드와 새로운 프로세스 모델들의 필터 및 API등을 고려하여 단계적으로 구체화 되어 개발 되었고.POSIX플랫폼,윈도우버젼 및 기타 메인프레임 환경에서 운영되며 코드의 복잡성,관리 쳬계등 새로운 플랫폼으로 변환 포팅등에 관한 문제점등을 개선하기 위하여 유연성있는 코드자체의 변화가 이루지고 있으며 인터넷의 전자상거래와 같이 안전한 전송을 위해 쓰여지고 있는 중의 하나인 SSL(Secure Socket Layer)을 핵심모듈의 수정 없이 기본적으로 지원하고 있다.

아파치는 "open source" 라이선스에 따라 배포되어 마음대로 쓸 수 있는 웹서버이며 버전2.0은 리눅스, Solaris, AIX와 같은 대부분의 유닉스 기반 운영체계, Rhapsody, BeOS, BS2000/OSD 등과 같이 UNIX/POSIX에서 파생된 시스템들, 그리고 AmigaOS 및 윈도우 등에서 실행된다.

※ SSL : 네트웍 내에서 메시지 전송의 안전을 관리하기 위해 만들어진 프로그램 계층

2. 아파치 2.0의 추가 기능

1.3 버전과 2.0버전의 차이점을 설명

● Unix threading

- POSIX thread의 유닉스 시스템에서 multithreading, multiprocess을 혼합해서 사용

● New compiler System

- Compiler를 Autoconf, libtool을 사용하도록 작성

※ autoconf 매크로 텍스트 파일

※ libtool은 스크립트를 지원하는 일반적인 라이브러리

● Multi protocol support

- 여러 프로토콜을 서비스 할수 있는 구조를 가지고 있음

● Non-Unix platform support

- POSIX 호환 대신 자체 API로 구현된 플래폼의 MPM과 APR를 사용

※ MPM(Multi-Processing Modules) : 서버는 시스템의 네트웍 포트에 연결하고, 요청을 받아들이며, 받아들인 요청을 처리하기위해 하위 프로세서 들에게 분배하는 다중처리 모듈 MPM 을 선택할 수 있음

※ APR(Apache Portable Runtime) : 프로세싱 모듈을 통해 CGI(Common Gateway Interface) 스크립트 아웃풋을 돌릴 수 있는 필터링 기법이며, 윈도즈 유니코드 파일의 호환성

● New Apache API

- 모듈 순서와 우선순위를 자동으로 처리하며 모듈순서는 hook 단위로 지정되고 아파치 서버의 핵심 부분을 수정하지 않고 새로운 모듈 기능을 제공하는 함수 추가

● IPv6 support

- APR 라이브러리에 기초하여 기본적으로 IPv6를 요청을 받아들일수 있으며 Listen, NameVirtualHost 지시어는 IPv6 주소체계를 지원

※ IPv6(Internet Protocol Version 6) : IPv6의 개선점은 IP주소의 길이가 32비트에서 128비트로 확장

● Filtering

- 서버에 의해서 테이터가 전송되거나 받아들일 때 필터를 적용할 수 있으며 입력/출력의 필터로 나누어 지고 클라이언트의 데이터가 서버로 전송되어 처리되는 것은 입력 필터가 서버에 의해 클라이언트로 전송되는 데이터는 출력 필터에 의해 처리되는 과정을 거치게 됨

※ Filtering : 적합한 기준을 위해 각 입력이나 출력요청을 시험하고 적절히 처리한 다음 전달하기 위해 설계된 프로그램

● Multilanguage Error Responses

- 브라우저로 보내는 오류 응답문을 SSI 문서를 이용하여 다국어로 제공하며 관리자는 통일된 외관을 위해 문서를 수정할 수 있음

● Simplified configuration

- 많은 지시어들이 간단해졌으며 Port와 Bindaddress 지시어는 삭제되고 IP 주소 연결에 Listen 지시어만을 사용 ServerName지시어는 리다이렉션과 가상호스트 인식에만 사용될 서버명과 포트를 지정

● Native Windows NT Unicode Support

- 모든 파일명 인코딩에 utf-8을 사용. 파일명은 허위 유니코드 파일시스템으로 직접 번역되어 Windows NT 기반 시스템에 다국어 지원을 제공

● Regular Expression Library Updated

- Perl 호환 정규표현식 라이브러리를 포함 모든 정규표현식에 더 강력한 Perl 5 문법을 사용

3. 아파치 2.0 설치

아파치 2.0의 설치 환경은 기존 1.3에서 Autoconf-style Interface(APACI)와는 다른 방법을 제시 libtool 과 autoconf를 이용하여 다른 오픈 소스 프로젝트와 같은 환경 생성

● Apache 2.0 다운로드

- http://httpd.apache.org/download.cgi 에서 httpd-2.0.55.tar.gz 다운로드

● Apache 2.0 Compiling and Installing

- tar xvfz httpd-2.0.55.tar.gz 다운받은 아카이브 파일의 압축을 해제

● Configuring the source tree

- 기본 옵션은 ./configure를 입력 설치 장소는 --prefix나 다른 configure 옵션을 사용하여 파일의 위치를 설정. 모듈의 추가는 --enable-module이며 --disable-module은  Base 모듈을 뺄수 있음 configure

configure --prefix=/usr/local/apache

● Build and Install

- make ; make install 컴파일과 설치를 실행

● Customize

- vi /usr/local/apache/conf/httpd.conf 아파치 웹서버의 환경설정 파일을 편집

※ Main Configuration Files

Related Modules	Related Directives
mod_mime	<IfDefine> Include TypesConfig

설정파일을 Inclued 지시어를 사용하여 포함하고 와일드카드를 사용하여 설정파일을 포함하면 지시어를 어떤 설정파일에나 사용

※ Syntax of the Configuration Files 한줄에 한 지시어를 사용 줄 마지막 문자가 백슬레쉬이면 다음줄에 계속 대소문자 구별은 없으며 지시어의 아규먼트는 대소문자를 구별하는 경우가 있음 "#"로 시작하는 줄은 주석으로 무시하며 설정 지시어와 같은 줄을 사용할 수 없다. apachectl configtest또는 -t 명령행 옵션을 사용하여 설정파일의 문법 오류를 검사

※ Module

Related Modules	Related Directives
mod_so	<IfModule> LoadModule

모듈을 읽어들여서 기능을 확장하고 기본적으로 base 모듈이 포함되어있다. 서버를 동적으로 읽어 들이는 모듈을 사용하게 할수 있으며 컴파일시 모듈을 따로 컴파일하여 언제든지 LoadModule 지시어로 추가할 수 있고 지시어를 IfModule 블록으로 특정 모듈이 있는 경우 선택적으로 처리도 할수 있다. 모듈의 컴파일을 보려면 -l 명령행 옵션을 사용

※ Scope of Directives

Related Modules	Related Directives
	<Directory> <DirectoryMatch> <Files> <FilesMatch> <Location> <LocationMatch> <VirtualHost>

지시어는 서버 전체에 적용되고 일부분에만 적용하려면 <Directory> <DirectoryMatch> <Files> <FilesMatch> <Location> <LocationMatch>섹션 안에 두어야 하며 지시어의 적용범위는 파일시스템이나 URL의 특정 위치로 한정한다. <VirtualHost>는 여러개의 웹사이트를 동시에 서비스하는 기능을 가상호스트라고 하며 <VirtualHost> 섹션 안에 두어 특정 웹사이트만 지시어를 적용

※ .htaccess File

Related Modules	Related Directives
	AccessFileName AllowOverride

※ 특정한 파일을 사용하여 설정을 나누어서 관리. .htaccess 라고 하며 AccessFileName 지시어 지정

지시어	설명
Port	기본포트는 80이며 1024번 이상의 포트번호를 설정할수 있음
Group	시스템에서 인식하지 못하며 nobody 와같은 그룹으로 지정
ServerName	도메인이 없는경우 시스템의 IP 주소를 입력하거나 localhost 입력한다.
ServerRoot	아파치의 경로를 지정하고 지정하지 않은 경우는 기본경로를 가지게 된다
DocumentRoot	아파치의 기본 문서 디렉토리로 클라이언가 요청시에 제일먼저 DocumentRoot에 의해 지정된 디렉토리의 문서 내용을 보여주며 올바른 디렉토리가 아닌 경우 접근 금지 와 같은 메시지를 보여준다

● apachectl start and stop

- Apache 실행옵션

※ 실행옵션

옵션	설명
-D name	지시자에서 사용되는 이름을 정의
-d directory	아파치 실행의 root 경로를 지정
-f file	설정파일을 직접 지정할 수 있음.
-C "directive"	설정파일을 읽기 전
-c "directive"	설정파일을 읽은 후
-v	버전을 표시
-V	컴파일시 사용된 옵션을 표시
-h	도움말
-l	컴파일시 사용된 모듈 표시
-L	설정 가능한 지시자 표심
-S	설정된 가상호스트 표시
-t	httpd.conf 문법 체크

4. 아파치 2.0 가이드

아파치 2.0의 변화된 부분과 보안 기능을 설명

● Multi-Processing Modules(MPMs)

- 아파치 2.0에서 멀티스레딩을 지원하고 1.3버전의 요청에 대한 프로세스에 의존하는 일반적인 방법이 아니라 스레드 기능의 추가로 확장성 및 유연성을 개선. 원하는 MPM을 선택하려면 ./configure 스크립트에 with-mpm=NAME 선택해서 사용할수 있음

- PREFORK 스레드를 지원하지 않는 오래된 플랫폼에서 스레드 없이 사용할 때  기본옵션으로 선택

- MPM leader 모듈의 쓰레드간의 호환을 위해 Leader/Followers 디자인 패턴을 사용

- Perchild CGI 스크립트들의 하위프로세서스의 소유주 아이디로 작동 하기 때문에 보안적인 기능을 제공하고 스레드를 지원하는 대부분의 플랫폼 환경에서 사용하며 CPU 사용량 감소

- worker 각각의 여러 쓰레드를 사용하고 일반적으로 prefork MPM 보다 적은 메모리를 사용하므로 서버에 사용

● Web Server Security Set

- ServerRoot 루트 실행자의 이외의 사용자가 수정을 못하도록 chown 0 /usr/local/apache/bin/httpd , chgrp 0 /usr/local/apache/bin/httpd , chmod 511 /usr/local/apache/bin/httpd 설정

- Server Side Includes(SSI) 페이지가 스크립트 프로그램을 실행하지 못하도록 Options지시어에서 Includes 대신 IncludesNOEXEC를 사용

- Protecting System Settings .htaccess 파일에 AllowOverride None 추가

- Protect Server Files .htaccess 파일에 Order Deny, Allow Deny from all 추가

제 2 장 WebtoB

1. WebtoB 설명

기존의 웹 서버의 성능과 모니터링 기능 등을 개선 및 해결한 Web Server

제품별 기능

제품구분	제공기능
WebtoB@Base	HTML,CGI,PHP,SSI,SSL,Basic,WBAPI
WebtoB@Standard	WebtoB@Base+Multi-Node+ Load Balancing+JSP/Servlet+WBAPI
WebtoB@Enterpise	WebtoB@Standard+TP-service+Failover

요구 사항

H/W 요구사항	S/W 요구사항
Intel Pentium Processor	Linux-Kernel 2.0 이상
최소 128Mbytes Memory	GNU ANSI C 컴파일러

2. WebtoB 주의사항

지원하는 기본 시스템의 사양을 확인하고 기존 버전의 설치 유무와 다른 웹 서버를 사용하고 있다면 포트번호 중첩 사용등을 확인해야 한다

웹 서버 동작 시에 기본으로 설정된 포트번호 80port이며 루트 계정의 사용자가 아니면 사용할수 없으므로 일반 계정의 사용자는 1024번 이후의 포트를 사용

3. WebtoB 설치

설치의 환경은 GUI(Graphic User Interface) 와 커맨드 형태의 Shell 스크립트 파일을 제공

● WebtoB 3.1.6 Download

- http://technet.tmaxsoft.com 사이트에서 제품 다운로드 받을수 있음 Full 버전은 신규 설치나 재설치를 할 때 사용하며 Patch 버전은 수정된 부분만 재설치 하므로 사용자가 설정한 환경이나 애플리케이션을 보존할 수 있음 설치시 기본적으로 라이센스가 포함되어 있지 않으므로 정식 및 데모는 라이센스를 신청

● WebtoB directory structure

- bin/ 실행 파일

- cgi-bin/ cgi 파일

- lib/ Library 파일

- usrinc/ API 헤더 파일

- config/ Webtob 환경 파일

- path/ 프로세스의 내부 통신을 위한 named-pipe 생성

- docs/ Html 파일의

- log/ 로그 파일

- svct/ WBAPI의 서비스 테이블

- icons/ DIRINDEX에서 사용할 아이콘

- ssl/ SSL 관련 파일

- ap/ APP 파일

● WebtoB Install

- 아키이브 파일의 압축을 푼 디렉토리에서 "install.sh" 실행

Web Server WebtoB Release 3.1

This Software is made by 'Tmax Soft Co., Ltd.'

and this software is distributed under our license agreement.

Software End-User License Agreement..............................

- 라이센스의 동의를 해야 다음 과정으로 넘어감

Do you accept all the terms of the license agreement? [y/n]

- 서버의 해당 운영체제의 번호를 선택

Choose Operating System of your Server!

1) Compaq-Alpha(Tru64 V5.1)

2) HP_PA-RISK(HP-UX 11.x 32bit)

3) HP_PA-RISK(HP-UX 11.x 64bit)

4) IBM(AIX 4.3, 5.1 32bit)

5) IBM(AIX 4.3 64bit)

6) Linux_x86 (RedHat 6.0 or higher 32bit)

7) Sun_SPARC (Solaris 2.7 - 2.9 32bit)

8) Sun_SPARC (Solaris 2.7 - 2.9 64bit)

9) Solaris_x86 (Solaris 2.8, 2.9 32bit)

10) Quit

- 설치할 디렉토리의 절대 경로 설정은 Path와 무관하게 자신이 원하는곳을 Path로 지정하면 되고 계정의 권한이 없는곳을 지정하는 경우는 설치를 할수 없으며 쓰기 권한만 있다면 자동으로 Path를 지정

Enter the installation path of the WebtoB !

ex) /usr/local/webtob

Input ->

- 동시 접속자 수를 설정하고 동시접속자의 수가 1500명 이상의 경우에는 환경 파일을 수정

Select one of the following :

1. Total user number of concurrent connection(1~800)

2. Total user number of concurrent connection(801~1500)

In case users are over the 1500, you can modify configuration file by yourself!!

Select Product :

- WebtoB Servlet Engine 설정

Would you like to install Servlet Engine? [y/n] :

- JDK 1.2 또는 1.3버전을 선택

o Select one of the following :

1. J2EE(TM) 1.2 Extension for jdk 1.3

2. J2EE(TM) 1.2 Extension for jdk 1.2

3. Quit Installation Program

Select Product :

- JDK 설치된 패스를 설정

Enter the installation path of the JDK !

Input Sample) /usr/java/jdk1.3.1_16

Current JDK_PATH =  /usr/java/jdk1.3.1_16

Input -> /usr/java/jdk1.3.1_16

- 관리자의 패스워드를 설정

Enter Password of Administrator

The minimum password length is 7 characters

ex) jeusadmin

Input -> XXXXXXX

- 다음과 같은 메시지가 나오면 정상적으로 설치

============[ Installation is completed successfully ]=============

WebtoB and Servlet Engine installation is completed successfully.

WebtoB environment variables and Servlet Engine environment variables

have been added to your account's scripts(.cshrc and .profile). Before

testing the Tmax, justapply the script in the home directory.

# C shell

source .cshrc

# Bourne/Korn Shell

/.profile

Thank you for using WebtoB Product!

- WebtoB의 환경변수 .profile .bash_profile .bashrc 파일들의 패스를 수정

### WebtoB Environment ###

WEBTOBDIR=/usr/local/webtob; export WEBTOBDIR

PATH=/usr/local/webtob/bin:$PATH; export PATH

### Using WebtoB Shared Library for WebAPI ###

LD_LIBRARY_PATH=$WEBTOBDIR/lib:$LD_LIBRARY_PATH;export LD_LIBRARY_PATH

● WebtoB Upgrade, Patch

- 업그레이드, 패치 파일은 [name].tar.Z 형식의 이름으로 압축되어 있고 다운받은 압축 파일을 WebtoB가 설치되어 있는 디렉토리로 이동후 압축을 풀어주고 업그레이드,패치는 "wsdown" 명령으로 서비스를 중지한후 uncompress name.tar.Z을 풀고 tar xvz name.tar 압축을 푼후 WebtoB Configuration File을 다시 컴파일후 wscf -i sample.m , wsboot 서비스를 재실행.

4. JDK 설치

썬 마이크로시스템즈에서 나온 자바 소프트웨어 개발 환경이며 자바 가상머신(JVM)과 컴파일러, 디버거 및 자바 애플릿,응용프로그램 개발을 위한 툴

● JDK Download

- http://java.sun.com/j2se/1.3 사이트에서 Java SDK v1.3.0 SE(HopSpot Server)을 다운받아서 설치

● JDK Permission

- chmod a+x jdk-1.3.1_16.i586.rpm.bin 변경하여 액세스 할 수 있는 자격을 취득

● RPM(RedHat Package Management) Install

- rpm -ivh jdk-1.3.1_16.i586.rpm 패키지의 설치

● Path Environment Set

- echo $PATH 현재 설정되어진 패스를 확인후 /usr/java/jdk1.3.1_16/bin/를 vi ~/.bashrc 에 export PATH=/usr/java/jdk1.3.1_16/bin/ 추가한후 java -version실행하여 아래와 같은 메시지가 나오면 정상적으로 설치

java version "1.3.1_16"

Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_16-b06)

Java HotSpot(TM) Client VM (build 1.3.1_16-b06, mixed mode)

5. WebtoB 환경 설정

환경설정은 서비스 실행에 필요한 모든 정보를 제공하고 사용자의 환경파일에 설정된 내용을 가지고 서비스를 실행하며 잘못된 내용을 입력 시에는 잘못된 동작 및 문제가 발생

● Domain Section

- *Domain section를 webtob로 설정 도메인은 인터넷에서 사용하는 도메인 하고는 전혀 상관없은 시스템에서 사용하는 이름

● NODE Section

- 환경설정 및 NODE 설정

구분	제공기능
WEBTOBDIR	설치된 디렉토리
SHMKEY	Shared 메모리의 값 설정
DOCROOT	html 문서 디렉토리
AppDir	응용프로그램을 호출하는 경우 설정
HostName	response header의 hostname field 기록
PORT	http listerner 포트번호 설정
JSVPort	webtob와 java servlet의 연결 포트 설정
HTH	http request handler 프로세스 개수 설정
SSLNAME	ssl 사용시 설정
Timeout	접속후 사용자의 요구를 내려받는 시간 설정
Clichklntval	클라이언트와 접속여부를 설정
CacheSize	내부 캐쉬 사이즈 조정
CacheEntry	캐쉬의 총 hashing key 엔트리 개수 설정
KeepAliveTimeout	클라이언트의 불필요한 커넥션 시간 설정
KeepAliveMax	커넥션의 유지한 상태로 서비스 시간 설정
IndexName	기본적인 서비스 파일 이름 설정
Options	디렉토리의 정보 표신 설정
DirIndex	인덱스 이름
Logging	노드에서 해당하는 로그 기록
ErrorLog	오류 발생시 정보 이름 기록
SysLogDir	시스템 메시지가 저장될 경로명
EnvFile	변수와 변수에 대한 정보를 기록
Method	클라이언트가 보내는 request method 정의
Listen	ip address 서비스를 원하는 경우 복수 설정

6. WebtoB 실행,종료

환경 설정을 저장후에 WebtoB의 실행,종료에 관련된 여러 가지 명령어와 옵션 정리

● wsboot

- wsboot는 WebtoB를 실행하기 위한 프로그램

※ wsboot -f 환경파일명을 지정하지 않으면 기본으로 wscofnig 참조

※ wsboot -T 관리 프로세스 WSM, HTL, HTH 만을 실행

※ wsboot -n 지정된 노드에 서버 프로세스을 실행

※ wsboot -A 환경파일을 읽어들여 모든 서비스 프로세스를 실행

● wsdown

- wsdown는 WebtoB를 종료하기 위한 프로그램

※ wsdown -A 모든 서비스 프로세스를 종료

※ wsdown -i 실행중인 해당 업무를 무조건 종료

7. WebtoB 보안 설정

Authentication 과 SSL 지원하며 웹 서버에서 기본적으로 지원하는 것으로 보안을 유지하기 위하여 가장 많이 사용되고 있으며 인터넷에서 사용자들의 정보를 보호하고 해킹을 미연에 방지

※ Authentication 은 실제 사용자인지 판단하는 과정으로 개별 인터넷을 포함한 공공 네트워크에서 대개 로그온 암호의 사용

※ SSL 네트워크 내에서 메시지 전송의 안정을 보장하기 위하여 네스케이프에 위해 만들어진 Secure Sockets Layer

● wsmkpw

- WebtoB에서 Authentication을 사용하기 위하여 실제 사용자의 사용자명과 패스워드를 만들어서 저장

※ wsmkpw “인증파일의 전체 경로” “사용자 이름”

● Authentication Set

- 설정은 환경파일의 Server Group에 아래와 같은 방식으로 넣어 주면 됨

*AUTHENT

[사용자가 원하는 이름] [TYPE=]Basic,MD5,RSA 있음

[UserFile=]wsmkpw에서 만들어진 패스워드 파일

● SSL Set

- 환경파일의 VHOST항목에서 SSLFLAG를 선언해야 사용가능하며 기본적으로 SSL 사용은 활성화 되어 있지 않음

SSLFLAG=Y

*SSL

SSL NAME   Certificatefile, CertificateKeyFile,

CACertificatePath, CACertificateFile,

VerifyDepth, VerifyClient, RandomFile,

8. WebtoB 튜닝

웹 서버 운영자의 환경에 맞춰서 최적의 성능을 제공

● HTH Set

- 특정 프로세스에서의 브라우저에 관련된 연결을 관리하지만 이러한 구조는 하나의 프로세스에서 모든 처리를 도맡아 하여 빠르게 작얼을 할 수 있는 장점이 있지만 프로세스의 안전성에 대해서는 시스템의 성능에 좌우되므로 주의해야 하고 변경은 환경파일의 "NODE" 섹션에서 “HTH=2” 2개의 HTH Process를 실행하고 각각의 HTH 프로세스는 각 프로세스의 로드에 따라서 사용자의 요구를 분배

● Server Process Set

- HTML,CGI,SSI등의 모든 서비스 처리 루틴이 포함되어 있고 사용자가 원하는 접속하는 경우 각각의 프로세스에서 처리를 완료하고 사용자의 요구 순간마다 프로세스가 접속을 연결받아 처리하며 MinProc는 기본으로 실행되는 프로세스의 수이며 MaxProc는 최대로 이용할수 있는 프로세스의 수

*SERVER

html    SVGNAME=htmlg,  MinProc=6,   MaxProc=10

jsvl     SVGNAME=jsvg,   MinProc=2,   MaxProc=10

cgi     SVGNAME=cgig,    MinProc=1,   MaxProc=10, SvrCPC=4

ssi     SVGNAME=ssig     MinProc=1,   MaxProc=2

제 3 장 TOMCAT

1. 톰캣 설명

톰캣은 아파치 소프트웨어의 애플리케이션 서버로서 자바 서블릿을 실행하고 JSP 코드가 포함되어 있는 자바 서블릿과 JSP규격으로 톰캣은 개발자의 개방적 협력 잡업의 산물로 바이너리 버전과 소스코드 버전이 있으며 톰캣은 자체적으로 보유하고 있는 내부 웹 서버와 함께 독립적으로 사용할 수 있지만 다른 웹 서버와 함께 사용할수 있다. 톰캣을 실행하기 위해서는 JRE 1.1 이상의 자바 런타임 환경이 필요하고 자카르타 프로젝트라고 불리는 여러 개방형 소스 공동작업 중 하나이다.

※ JSP(Java Server Page) 서블릿의 사용을 통해 웹페이지의 내용이나 모양을 제어하는 기술이며 썬마이크로시스템즈에서는 JSP 기술을 서블릿 API라고 말한다.

※ Servlet 서버에서 실행되는 작은 프로그램으로 자바 애플릿들은 사용자를 위해 간단한 업무를 수행하거나 서비스를 위해 클라이언트에서 실행되도록 만들어진다.

※ JRE(Java Runtime Environment) 자바 응용프로그램의 개발도구의 일부이여 실행하는데 있어 최소한의 요건을 제공하고 클래스들과 각종 지원 파일들로 구성

2. Tomcat 설치

다운받은 아카이브 파일의 압축을 해제하면 설치 완료

	공개SW기술지원센터

Copyright ⓒ 2005공개SW기술지원센터 All right reserved.	http://help.oss.or.kr

● Tomcat Download

- http://tomcat.apache.org/download-55.cgi 에서 apache-tomcat-5.5.12.tar.gz 다운로드

● Tomcat Compiling and Link

- tar xvfz apache-tomcat-5.5.12.tar.gz 아카이브 파일의 압축 해제 및 링크

● Tomcat Path Set

- echo $PATH로 설정되어진 패스를 확인후 vi ~/.bashrc 에 export PATH=/usr/local/tomcat를 추가

● Tomcat Connector Install

- http://tomcat.apache.org/connectors-doc/ 사이트에서 JK-1.2.14release sources 다운

● Directories structure

- bin/ *.sh 파일은 “UNIX" 시스템에서 사용되는 스크립트 파일

- conf/ DTDs와 중요한 server.xml 과 메인 컨테이너 환경파일

※ DTD는 그 문서의 문단을 구분하고, 주제의 제목을 식별하고, 또 각각이 어떻게 처리되어야할지를 식별할 수 있도록, 문서와 함께 동반되는 하나의 규격이다

- logs/ 로그 파일 생성

- webapps/ 웹 어플리케이션 파일

3. 컨텍스트 컨테이너 설정

Context는 웹 어플리케이션 아카이브 파일이며 각 HTTP 요청을 처리하는 컨텍스트 경로에 대한 URI의 가능한 prefix중 매칭 가능한 컨텍스트 경로를 가진 컨텍스트를 선택해서 이루어지고 수신된 요청을 처리하기 위해 적절한 서블릿 선택

● Common Attributes

-ClassName 클래스는 org.apache.catalina.context 인터페이스를 구현하며 지정하지 않으면 기본 표준값을 설정

- Cookies 기본으로 지정되어 있으면 클라이언트가 쿠키를 지원하는 경우 세셕 확인 통신으로 쿠키를 사용하며 Fales로 지정해 놓으면 쿠키사용을 하지 않고 어플리케이션에 의한 URL rewriting 사용

- CrossContext 어플리케이션의 호출을 통해 다른 웹 어플리케이션에 대해 request dispatcher하며 Fales롤 지정해 놓으며 GetContext()을 통해 Null 값으로 반환

- DocBase 디렉토리나 웹 어를리케이션 파일의 경로명

- Privileged 관리자 서블릿과 같은 컨테이너 서블릿을 사용

- Path 웹 어플리케이션의 Context의 경로를 나타내며 요청 URI의 시작 부분에 매칭

- Reloadable 클래스의 변경을 모니터링하고 변경된 부분이 발견되면 웹 어플리케이션을 자동으로 리로드

- WrapperClass 관리할 서블릿에 대한 구현 클래스의 자바 클래스명

● Standard Implementation

- Debug 엔진이 해당 로거에 디버깅 로그를 출력

- SwallowOutput 웹 어플리케이션에서 system.out과system.err으로 출력하는 바이트 출력의 모든 웹 어플리케이션의 logger로 재지정

- UseNaming J2EE플랫폼 규약에 맞는 JNDI Initial Context를 Catalina가 사용

※ Java2 Enterprise Edition(J2EE) J2EE 서비스는 사용자의 브라우저와, 엔터프라이즈 데이터 베이스 및 레거시 정보시스템 사이의 중간계층에서 수행

- workDir Context에서 사용할 임시 디렉토리에 대한 경로명

● Nested Components

- Loader는 웹 어플리케이션의 서블릿과 빈 클래스들을 로드하는 웹 어플리케이션 클래스 로더를 설정

- Logger는 Context의 모든 로그 메시지를 받아서 처리할 로거를 설정

- Manager HTTP세션의 세션 관리자를 설정

- Realm 사용자 역할 데이터 베이스의 영역을 설정

- Resources 정적 자원에 접근 하는데 사용할 자원 관리자를 설정

● Special Features

- Aceess Logs 는 웹서버를 운영할 때 일반적으로 생성되는 출력 파일중 하나 이며 서버가 요청하는 표준 포맷에 따라 한 라인을 출력

<Context path="/examples">

<Valve className="org.apache.catalina.valves.AccessLogValve"

prefix="localhost_access_log." suffix=".txt"

pattern="common"/>

</Context>

- Automatic Context Configuration 는 Catalina가 기동될 때 또는 웹 어플리케이션 리로드 될 때 자동으로 수행

- Context Parameters 서블릿 컨텍스트 초기화 파라미터로 웹 어플리케이션 사용할 수 있도록 파라미터이름 값 등을 설정

<context-param>

<param-name>companyName</param-name>

<param-value>My Company, Incorporated</param-value>

</context-param>

- Environment Entries 웹 어플리케이션에서 사용할 수 있도록 이름-값을 설정

<env-entry>

<env-entry-name>maxExemptions</param-name>

<env-entry-value>10</env-entry-value>

<env-entry-type>java.lang.Integer</env-entry-type>

</env-entry>

- Lifecycle Listeners 시작되거나 종료되는것을 JAVA 객체가 알아야 하는 경우에 리스너를 중첩시켜 자바 개첵의 클래스명을 선언

<Context path="/examples">

<Listener className="com.mycompany.mypackage.MyListener">

</Context>

- Request Filters 주소나 호스트 명을 검사하도록 지시하며 원격지 주소나 이름을 허거또는 거부로 검하여 정규표현식 라이브러리에 정의

<Context path="/examples" ...>

<Valve className="org.apache.catalina.valves.RemoteHostValve"

allow="*.mycompany.com,www.yourcompany.com"/>

<Valve className="org.apache.catalina.valves.RemoteAddrValve"

deny="192.168.1.*"/>

</Context>

- Resource Definitions 웹 어플리케이션의 배치 디스크립터의 JNDI룩업에 반환되도록 자원의 특성을 선언

<resource-ref>

<description>Employees Database for HR Applications</description>

<res-ref-name>jdbc/EmployeeDB</res-ref-name>

<res-ref-type>javax.sql.DataSource</res-ref-type>

<res-auth>Container</res-auth>

</resource-ref>

※ Java Naming and Directory Interface(JNDI) 자바 프로그램들을 DNS,LDAP 및 NDS 등과 같은 네이밍/디렉토리 서비스에 연결하기 위한 썬의 API이다. 애플리케이션은 JNDI API에 작성되어 있으며, 디렉토리 드라이버는 JNDI SPI (Service Provider Interface)에 작성되어 있다. JNDI는 썬의 J2EE 플랫폼의 일부이다.

- Resource Parameters 해당 자원 이름으로 JNDI룩업을 수행할 때 객체를 돌려주는데 사용되는 자원관리자를 설정하기 위해 사용하며 JDBC 데이터 소스에 대한 자원 파라미터 설정은 아래와 같이 하며 된다

<Context ...>

<ResourceParams name="jdbc/EmployeeDB">

<parameter>

<name>driverClassName</name>

<value>org.hsql.jdbcDriver</value>

</parameter>

<parameter>

<name>url</name>

</value>jdbc:HypersonicSQL:database</value>

</parameter>

<parameter>

<name>user</name>

<value>dbusername</value>

</parameter>

<parameter>

<name>password</name>

<value>dbpassword</value>

</parameter>  </ResourceParams>

</Context>

※ Java Database Connectivity(JDBC) 자보로 작성된 프로그램을, 일반 데이터베이스에 연결하기 위한 응용프로그램 인터페이스 규격

- Resource Links JNDI의 자원으로부터 연결을 생성하는 사용하고 JNDI룩업을 실행하며 연결된 자원으로 반환

<Context ...>

<ResourceLink name="linkToGlobalResource"

global="simpleValue"

type="java.lang.Integer"  ...

</Context>

4. Manager 어플리케이션 설정

전체 컨터이너의 Shutdown 및 Start 하지 않고 새로운 웹 어플리케이션을 배치하고 설치된 것을 해체하는 기능과 환경설정 파일에 reloadable이 설정되지 않아도 현재 실행중인 어플리케이션의 재시동을 요청

● Manager Context Contents

- 디렉토리 또는 WAR 파일 경로명의 새로운 웹 어플리케이션 배치

- 배치된 웹 어플리케이션 리스트와 각각의 웹 어플리케이션 세션 리스트

- 운영중인 어플리케이션 리로드

- 운영중인 어플리케이션 제거

- 운영중인 어플리케이션 중지

- 어플리케이션 시작

● Configuring manager APP Access

- manager 권한을 갖고 있는 유저는 패스워드 인증을 거쳐야 사용

- /usr/local/tomcat/conf/server.xml에서 파일을 지정하지 않으면 기본적으로 ~/conf/tomcat-users.xml 사용

<user name="craigmcc"Password="secret"foles="standard,nanager"/>

- JDBCRealm, JNDIRealm는 사용자와 역할 정보를 JDBC통해 접근되는 database에 저장하고 표준절차를 따라서 기존의 사용자와 새로운 사용자를 manager 추가

● Supported Manager Commands

- manager 어플리케이션 처리를 알려주는 명령어들은 URI 지정

http://{host}:{port}/manager/{command}?{parameters}

- path 처리하려는 웹 어플리케이션 컨텍스트 경로

- war 웹 어플리케이션 압축 파일 또는 웹 어플리케이션의 디렉토리 경로명의 URL은 아래와 같은 형식으로 사용

※ file:/absolute/path/to/a/directory 웹 어플리케이션의 압축이 풀린 버전을 가지고 있는 경로명

※ jar:file:/absolute/path/to/a/warfile.war! 로컬 웹 어플리케이션 압축 파일의 URL

※ jar:http://hostname:port/path/to/a/warfile.war! 원격JAR 파일로부터 웹 어플리케이션 배치

- 각각의 명령은 text/plain 형식의 응답을 반환하고 명령어 실행의 성공여부는 OK 또는 FAIL 중 하나로 시작

● Deploy New App

- 다른 웹 어플리케이션이 사용하지 않는 컨텍스트 경로에 새로운 웹 어플리케이션 설치 및 압축 파일의 URL 지정

http://localhost:8080/manager/install?path=/foo&war=file:path/to/foo

http://localhost:8080/manager/install?path=/bar&war=jar:file:/path/to/bar.war!/

- 정상적으로 성공하면 OK-Installed application at context path/foo 메시지가 보여지고 실패하면 FAIL로 응답을 시작 문제의 원인은 아래와 같다.

※ App already exists path /foo 현재 실행되는 웹 어플리케이션의 경로

※ Doc base does not exist or is not readable directory는 압축파일의 파라메터로 지정한 URL과 서버의 디렉토리의 압축 파일의 URL의 경로 확인

※ Encountered execption 새로운 웹 어플리케이션을 시작할 발생

※ Invalid context path URL specified URL의 디렉토리 웹 어플리케이션의 유효 확인

※ Invalid context path was specified 관리자를 제외하고는 컨텍스트 경로에 슬래시 문자로 시작하고 관리자는 아무 문자열 상관 없음

※ No context path was specified 패스 파라미터 필요

● List Currently Deployed App

- 웹 어플리케이션의 컨텍스트 경로 및 현재상태와 세션의 목록을 출력

http://localhost:8080/manager/list

OK-Listed applications for virtual host localhost

/webdav:running:0

/examples:running:0

/manager:running:0

/:running:0

● Reload An Existing App

- 어플리케이션의 종료 및 재시작 하도록 프로세스 실행한다. 다음과 같이 ~/conf/server.xml의 <Context>섹션에 reloadable="true" 설정해야 하며 정상적으로 작동하면 “OK-Reloaded application at context path /examples” 라는 메시지 출력

http://localhost:8080/manager/reload?path=/examples

정상적으로 작동하지 않을 경우는 FAIL 응답 메시지 출력하며 문제의 원인을 아래와 같다.

※ Encountered execption 웹 어플리케이션의 재시작시 발생

※ Invalid context path was specified 수퍼유저를 제외하고 컨텍스트 경로는 슬래시 문자로 시작해야 하며 수퍼유저는 문자열을 사용하지 않음

※ No context exists for path foo 지정한 컨텍스트 경로의 배치가 없음

※ No context path was specified 경로의 파라메터가 없음

● Session Statistics

- 기본 세션의 종료 및 살아있는 세션수의 시간을 표시

OK-Session information for application at context path /examples

Default maximum session nactive interval 30 minutes

30-<40 minutes:1 sessions

● Start an Existing App

- 어프리케이션의 재시작을 실행한다. 어플리케이션을 임시로 사용할 수 없을 때 중지하고 재 시작하며 정상적으로 실행이 되면 "OK-Started application at context path /examples" 메시지를 출력하고 문제가 발생할 경우 "FAIL" 출력하며 에러의 원인은 다음과 같다

※ Encountered execption 웹 어플리케이션의 재시작시 발생

※ Invalid context path was specified 수퍼유저를 제외하고 컨텍스트 경로는 슬래시 문자로 시작해야 하며 수퍼유저는 문자열을 사용하지 않음

※ No context exists for path foo 지정한 컨텍스트 경로의 배치가 없음

※ No context path was specified 경로의 파라메터가 없음

● Stop an Existing App

- 어플리케이션의 실행을 하지 못하도록 중지된 상태에서는 “HTTP error 404” 메시지를 출력 하며 정상적으로 작동 시에는 "OK-Stopped application at context path/examples" 메시지를 출력한다. 비정상적으로 작동 시에는 "FAIL" 출력하며 에러의 원인은 다음과 같다

※ Encountered execption 웹 어플리케이션의 재시작시 발생

※ Invalid context path was specified 수퍼유저를 제외하고 컨텍스트 경로는 슬래시 문자로 시작해야 하며 수퍼유저는 문자열을 사용하지 않음

※ No context exists for path foo 지정한 컨텍스트 경로의 배치가 없음

※ No context path was specified 경로의 파라메터가 없음

● Undeploy an Existing App

- 어플리케이션을 종료하고 Tomcat에서 제거 정상적인 작동 시에는 "OK-Removed application at context path/examples" 메시지 출력한다. 비정상적으로 작동 시에는 "FAIL" 출력하며 에러의 원인은 다음과 같다

※ Encountered execption 웹 어플리케이션의 재시작시 발생

※ Invalid context path was specified 수퍼유저를 제외하고 컨텍스트 경로는 슬래시 문자로 시작해야 하며 수퍼유저는 문자열을 사용하지 않음

※ No context exists for path foo 지정한 컨텍스트 경로의 배치가 없음

※ No context path was specified 경로의 파라메터가 없음

5. SSL 설정

웹 브라우저와 웹 서버간의 보안을 이용해 통신하도록 하는 기술이며 어느 한쪽에서 암호화된 데이터가 전송되고 받은쪽 에서는 암호를 해독하는 것을 의미 한다. 서버는 모든 SSL 관계된 기능을 다루게 되고 Tomcat의 컨테이너로 가는 요청을 해독한 후에 전송하며 Tomcat은 일반 텍스트의 응답을 반환하고 사용자의 브라우저로 보내지기 전에 암호한다. Tomcat은 웹 서버와 클라이언트 사이의 통신 보안 연결하에서 이루어진다.

● JSSE Download

- Java Secure Socket Extension(JSSE)는 라이브러리 인증,암호화,통합성에 필요한 기능을 제공하고 이러한 지원을 통해 네트워크로 전송된 데이터의 비공개

- http://java.sun.com/products/jsse/index-103.html에서 JSSE 1.0.3_03 다운

● JSSE Install

- Installed extensing JSSE를 설치한 디렉토리 패스 설정하고 “jcert.jar, jnet.jar, jsse.jar"을 자바가 설치된 디렉토리의 /jre/lib/ext에 복사

● Prepare the Certificate Keystore

- 명령어를 사용해 "자바홈/bin/keytool -genkey -alias tomcat -keyalg RSA“ ".keystore"의 새로운 파일을 생성하며 위치의 변경이나 파일명 지정은 ”-keystore“ 파라미터에 ”keytool" 파라미터에 키스토어 파일을 경로명을 지정 "자바홈/bin/keytool -genkey -alias tomcat -keyalg RSA -keystore /path/to/my/keystore"

● Edit the Tomcat Configuration

- 보안 소켓 설정은 "/usr/local/tomcat/conf/server.xml"파일의 SSL 커넥터 세션 수정

<--Define an SSL HTTP/1.1 Connector on port 8443-->

<Connector className="org.apache.catalina.connector.http.HttpConnector"

port="8443" minProcessor="5" maxProcessors="75"

enableLookups="true"

acceptCount="10" debug="0" scheme="https" secure="true">

<Factory className="org.apache.catalina.net.SSLServerSocketFactory"

clientAuth="false" protocol="TLS"/>

</Connector>

※ port은 Tomcat의 보안 연결에 사용되는 기본값 8443의 번호는 임의로 변경이 가능

※ Factory은 해당 포트번호의 소켓이 필요시 Tomcat의 "SoketFactory"를 설정

속성	설명
ClassName	소켓 팩토리의 구현Java클래스의 전체 경로명
ClientAuth	true값은 소켓의 사용하는 모든 클라이언트가 클라이언트 인증서를 제시하도록 Tomcat으로부터 요청
KeystoreFile	키스토어 파일을 Tomcat의 기본 위치에 있지 않을 경우 속성 추가
KeystorePass	changeit외 다른 키스토어 암호를 사용시 추가
protocol	소켓에 사용되는 암호

- SSL을 통한 Tomcat의 웹 어플리케이션 접근은 "https://localhost:8443"

6. JNDI, JDBC Resoureces 설정

웹 어플리케이션 Java Naming and Directory Interface(JNDI) 자바 프로그램의 DNS,LDAP,NDS 등과 같은 네이밍/디렉토리 서비스 연결 API이며 Tomcat에서는 JNDI Context의 인스턴스 제공

● Configuring JNDI

- JNDI Initial Context를 통해 웹 어플리케이션의 스칼라 환경 엔트리에 대한 이름값을 설정

- 이름과 어플리케이션에서 유효한 자원의 데이터 형을 지정

- 사용할 자원 factory implementation의 자바 클래스명과 자원 factory 설정하는 javabeans 프로퍼티 설정

● Generic JavaBean Resources

- 팩토리의 자원을 instantiated 자바빈 클래스을 생성

package com.mycompany;

public class MyBean {

private String foo = "Default Foo";

public String getFoo() {

return (this.foo);

}

public void setFoo(String foo) {

this.foo = foo;

}

private int bar = 0;

public int getBar() {

return (this.bar);

}

public void setBar(int bar) {

this.bar = bar;

}}

- 웹 어플리케이션의 "~/web.xml"파일의 JNDI 인서턴스 요청 명을 선언

<resource-env-ref>

<Description>

Object factory for MyBean instances.

</Description>

<resource-env-ref-name>

bean/MyBeanFactory

</resource-env-ref-name>

<resource-env-ref-type>

com.mycompany.MyBean

</resource-env-ref-type><resource-env-ref>

- 환경 설정은 "TOMCAT_HOME/conf/server.xml"파일의 웹 어플리케이션 Context 세션에 아래와 같이 추가

<Context ...>

<Resource name="bean/MyBeanFactory" auth="Container"

type="com.mycompany.MyBean"/>

<ResourceParams name="bean/MyBeanFactory">

<parameter>

<name>factory</name>

<value>org.apache.naming.factory.BeanFactory</value>

</parameter>

<parameter>

<name>bar</name>

<value>23</value>

</parameter>

</ResourceParams>

</Context>

● JavaMail Sessions Resource Requirement

- 웹 어플리케이션의 "web/xml" 수정후에 설치된 세션의 JNDI명을 선언

<resource-ref>

<description>

Resource reference to a factory for javax.mail.Session instances that may be used for sending electronic mail messages, preconfigured to connect to the appropriate SMTP server.

</description>

<res-ref-name>

mail/Session

</res-ref-name>

<res-type>

javax.mail.Session

</res-type>

<res-auth>

Container

</res-auth>

</resource-ref>

- 어플리케이션의 자원을 사용

Context initCtx = new InitialContext();

Context envCtx = (Context) initCtx.lookup("java:comp/env");

Session session = (Session) envCtx.lookup("mail/Session");

Message message = new MimeMessage(session);

message.setFrom(new

InternetAddress(request.getParameter("from"));

InternetAddress to[] = new InternetAddress[1];

to[0] = new InternetAddress(request.getParameter("to"));

message.setRecipients(Message.RecipientType.TO, to);

message.setSubject(request.getParameter("subject"));message.setContent(request.getParameter("content"), "text/plain");

Transport.send(message);

- 톰캣의 팩토리 자원 설정은 "server.xml"파일 설정

<Context ...>

<Resource name="mail/Session" auth="Container"

type="javax.mail.Session"/>

<ResourceParams name="mail/Session">

<parameter>

<name>mail.smtp.host</name>

<value>localhost</value>

</parameter>

</ResourceParams>

</Context>

● JDBC Resource Requirement

- 자바로 작성된 프로그램을 일반 데이터베이스에 연결하기 위한 응용프로그램 인터페이스 규격이며 다수의 운영체제 플랫폼의 데이터베이스를 연결하도록 설계된 프로그램 작성하고 JDBC문장을 사용한 프로그램은 윈도우즈의 마이크로소프트 엑세스 데이터베이스에도 접근 가능

- 웹 어플리케이션의 "web.xml"수정하고 새로운 인스턴스를 요청시 JNDI명을 선언하며 "web.xml" 엔트리는 아래와 같다

<resource-ref>

<description>

</description>

<res-ref-name>

jdbc/EmployeDB

</res-ref-name>

<res-type>

javax.sql.DataSource

</res-type>

<res-auth>

Container

</res-auth>

</resource-ref>

- 어플리케이션의 자원 사용을 위한 코딩

Context

initCtx = new InitialContext();

Context envCtx = (Context) initCtx.lookup("java:comp/env");

DataSource ds = (DataSource)

envCtx.lookup("jdbc/EmployeeDB");

Connection conn = ds.getConnection();

conn.close();

- 톰캣의 팩토리 자원 설정은 "server.xml"파일의 웹 어플리케이션의 Context세션 추가

<Context ...>

<Resource name="jdbc/EmployeeDB" auth="Container"

type="javax.sql.DataSource"/>

<ResourceParams name="jdbc/EmployeeDB">

<parameter>

<name>user</name>

<value>dbusername</value>

</parameter>

<parameter>

<name>password</name>

<value>dbpassword</value>

</parameter>

<parameter>

<name>driverClassName</name>

<value>org.hsql.jdbcDriver</value>

</parameter>

<parameter>

<name>driverName</name>

<value>jdbc:HypersonicSQL:database</value>

</parameter>

</ResourceParams>

</Context>

- 사용자 트렌잭션 JDBC를 java.transaction.UserTransaction 지원 하려면 아래와 같이 코딩

Context initCtx = new InitialContext();

Context envCtx = (Context) initCtx.lookup("java:comp/env");

Transaction tx = (Transaction) envCtx.lookup("UserTransaction");

tx.begin();

tx.commit();

7. Realm Configuration 설정

웹 어플리케이션 사용자의 인증과 역할을 부여하는 사용자의 비밀번호 데이터 베이스이며 인증 정보 소스에 연결을 하는 세가지 표준 플러그인 제공

가) JDBCRealm는 JDBC를 통해 관계데이터베이스에 저장된 인증정보 엑세스

나) JNDIRealm는 JNDI를 통해서 LDAP기반 서버에 저장된 인증정보 엑세스

다) MemoryRealm는 XML문서 정보의 초기화된 내부 메모리 객체 컬렉션에 인증정보 엑세스

● Configuring Realm

- “server.xml"의 환경설정 파일에 XML 요소를 추가

<Realm className="Class name"/>

※ Engine는 Realm의 모든 웹 어플리케이션 가상호스트를 공유하며 <Host><Context>중복된 Realm은 제외

※ Host는 Realm은 하나의 가상 호스트 내의 모든 웹 어플리케이션 공유하며 <Context>중복된 Realm은 제외

※ Context은 Realm의 웹 어플리케이션에 사용

● JDBCRealm Implementation

- JDBC을 통해 접근하는 관계형 데이터베이스의 사용자를 서치하는 Realm의 인터페이스

※ 각각의 유효한 사용자는 한개의 Row와 Users 테이블을 가지고 있음

※ 유저의 테이블은 적어도 2개 이상의 컬럼이 존재

※ 특정 사용자는 유효한 각각의 하나의 Row의 User roles 테이블을 지니고 있음

※ 유저의 롤 테이블은 적어도 2개 이상의 컬럼이 존재

● JDBCRealm Element Attributes

- 설정은 "~/conf/server.xml“환경 파일에서 Reaml 요소를 추가하며 지원되는 속성은 다음과 같다

속성	설명
ClassName	전체 java의 클래스 명으로 "org.apache.catalina.realmJDBCRealm" 사용
ConnectionName	데이터베이스 사용자
ConnectionPassword	데이터베이스 비밀번호
ConnectionURL	데이터베이스 URL
Debug	Logger 남겨진 Realm의 디버깅 내용 기본값은 “0”
Digest	일반적인 텍스트가 아닌 비밀번호로 저장하며 유효한 밸브는 "java.security.MessageDigest" 클래스의 알고리즘명으로 지정하지 않으며 일반 텍스트로 비밀번호 저장
DriverName	JDBC 전체 경로명
RoleNameCol	사용자에 설정된 user roles 테이블
UserCredCol	사용자의 비밀번호를 가지고 있는 유저 테이블
UserNameCol	user, user roles 테이블의 사용자명
UserRoleTable	유저네임에 할당된 롤과 하나의 Row를 가지고 있으며 테이블은 최소 "userNameCol, roleNameCol" 속성의 컬럼
UserTable	유저네임에 하나의 Row를 가지고 있으며 테이블은 최소 "userNameCol, userCredCol" 속성의 컬럼

● JNDIRealm Implementation

- JNDI의해 접근되는 디렉토리 서버의 사용자를 서치하는 Realm 인터페이스 구현이며 스키마가 다음 조건에 맞지 않으며 기존 스키마에 적용하는 환경설정의 유연성

※ 사용자의 인증은 "connectionURL“ 속성을 통해서 접근하고 높은 수준의 "DirContext"

※ user은 구분명 "distinguished name“ 속성 인증의 사용자명과 일반 테스트 암호의 사용자 비밀번호 속성

※ user group은 Realm의 "roleSearch"속성의 LDAP 검색 패턴하고. "roleBase“역활은 전체 디렉토리 컨텍스트 검색하며 ”roleSubtree"은 디렉토리 컨텍스트의 전체 서브트리 검색

● JNDIRealm Element Attributes

- 설정은 "~/conf/server.xml“환경 파일에서 Reaml 요소를 추가하며 지원되는 속성은 다음과 같다

속성	설명
ClassName	전체 java의 클래스 명으로 "org.apache.catalina.realmJNDIRealm" 사용
ConnectionName	JNDI 연결에 사용되는 디렉토리 서버 사용자명
ConnectionPassword	JNDI 연결에 사용되는 디렉토리 서버 비밀번호
ConnectionURL	JNDI 연결에 사용되는 디렉토리 서버 URL
ContextFactory	JNDI 컨텍스트 팩토르이 전체 자바 클래스명으로 기본 JNDI, LDAP 사용 “com.sun.jndi.ldap.LdapCtxFactory"
Digest	일반적인 텍스트가 아닌 비밀번호로 저장하며 유효한 밸브는 "java.security.MessageDigest" 클래스의 알고리즘명으로 지정하지 않으며 일반 텍스트로 비밀번호 저장
Debug	Logger 남겨진 Realm의 디버깅 내용 기본값은 “0”
RoleBase	검색을 위한 기본 요소이며 지정하지 않으며 디렉토리 컨텍스트의 높은 요소 사용
RoleSearch	"java.text.MessageFormat"의 문법을 따르는 LDAP 검색 패턴
RoleSubtree	“RoleBase"의 역할 검색
UserPassword	일반 텍스트의 사용자 비밀번호을 가지고 있는 디렉토리 서버 속성
UserPattern	"java.text.MessageFormat"의 문법을 따르는 LDAP 검색 패턴

● MemoryRealm Implementation

- 모든 사용자의 역할을 XML 문서로 로드한다. 실제 서비스 사용하도록 설계 구현 되지 않음

속성	설명
ClassName	전체 java의 클래스 명으로 "org.apache.catalina.realmMemoryRealm" 사용
Debug	Logger 남겨진 Realm의 디버깅 내용 기본값은 “0”
Digest	일반적인 텍스트가 아닌 비밀번호로 저장하며 유효한 밸브는 "java.security.MessageDigest" 클래스의 알고리즘명으로 지정하지 않으며 일반 텍스트로 비밀번호 저장
Pathname	changeit외 다른 키스토어 암호를 사용시 추가
protocol	유효한 사용자명과 비밀번호을 가지고 있는 XML문서 기본설정은 “~/conf/tomcat-users.xml"

8. Apache 와 Tomcat 연동

아파치 포트를 통해서 들어오는 모든 요청을 아파치에 설치된 mod_jk에 설정된 주소 패턴에 따라 톰캣으로 요청 전환

● J2SE Install

- http://java.sun.com에서 Java(TM)2 SDK, Standard Edition 1.4.2_10를 다운

● J2SE Permission Conversion

- chmod +x j2sdk-1_4_2_10-linux-i586-rpm.bin 변경후 ./j2sdk-1_4_2_10-linux-i586-rpm 실행

● RPM(Redhat Package Management) Install

- rpm -ivh j2sdk-1_4_2_10-linux-i586.rpm 패키지를 설치

● Path Environment Set

- 패키지 설치후에 심보릴 링크 설정

- ~/.bash_profile 에 패스설정

● JK2 Connector Download

- http://www.apache.org에서 jakarta-tomcat-connectors-jk2-src-current.tar.gz 다운

● JK2 Compiling

- JK2 디렉토리의 ~/jk/native2/에서 컴파일 실행

● httpd.conf Environment Set

PREFIX/conf/httpd.conf 환경 파일을 편집

- LoadModule jk2_module Modules/mod_jk2.so 부분을 추가

- Directoryindex에서 index.jsp 추가

Alias /icons/ "/usr/local/apache/icons/"

Alias /jsp-examples/ "/usr/local/tomcat/webapps/jsp-examples/"

Alias /servlets-examples/ "/usr/local/tomcat/webapps/servlets-examples/"

- DocumentRoot 행에서 DocumentRoot "/www/"  수정후 ln -s /usr/local/apache-tomcat-5.5.12/webapps/ROOT /www

● workers2.properties Environment set

- PREFIX/conf에 workers2.properties 환경 파일을 편집

[channel.socket:localhost:8009

port=8009

host=127.0.0.1

[ajp13:localhost:8009]

channel=channel.socket:localhost:8009

[uri:/*.jsp]

worker=ajp13:localhost:8009

[uri:/servlets-examples/*]

worker=ajp13:localhost:8009

제 4 장 JEUS

1. JEUS 설명

JEUS는 자바의 J2EE 어플리케이션을 구동하는데 필요한 플랫폼을 제공하며 JSP/Servlet Engine 등 기타 자바의 구성 요소들을 포함

2. JEUS 시스템 요구사항

기본 시스템의 사양을 확인하고 JEUS 설치를 위해서 필요 HW, SW 요구 사항

SW 요구 환경

플랫폼	설치 환경
Linux 7.1 Kernel 2.4	INTEL Pentium3 933MHz 메모리 256Megabytes 하드디스크 40Gigabytes JDK 버전은 1.4.x or 1.3.1

3. JEUS 설치

GUI와 쉘 스크립트 설치를 제공하며 여기서는 Unix 환경에서 쉘 스크립트 파일로 JEUS를 설치

● JEUS 5.0 Download

- http://technet.tmaxsoft.com 사이트에서 제품의 다운로드와 라이센스를  받을수 있음

● JEUS 5.0 Install

- 다운받은 파일의 퍼미션을 아래와 같이 변경후 제우스 실행

- 라이센스의 동의를 해야 다음 과정으로 넘어감

- 기본으로 설치되는 폴더를 지정하며 사용자 정의로 폴더를 지정할 수 있음

- 인스톨 설정을 지정

- 인스톨 환경설정 요약

- 패스워드는 관리자의 ID에 할당되며 JEUS를 관리하는데 필수적

- JDK의 설치된 경로를 입력

- 아래와 같이 설치 완료 메시지가 나오면 정상적으로 설치 완료

● JEUS directory structure

- bin/ 실행 파일

- docs/ 문서 파일

- license/ 라이센스 파일

- webhome/ EJB, Servlet, JSP 어플리케이션 배치

- Uninstallerdata/ 언스톨을 위한 폴더

- config/ XML 디스크립터 파일, 노드 설정파일, 보안설정

- lib/ 라이브러리 파일, 클래스 라이브러리 아카이브

- logs/ 로그 파일

- samples/ 예제 프로그램의 폴더

- webserver/ Servlet Engine 리스너 JEUS 웹 서버의 설치 경로

4. WebtoB 와 JEUS 연동

대규모 전자 상거래 시스템을 사용하려면 WebtoB와 JEUS를 연동해서 사용

● WebtoB with JEUS Connection Environment Set

- WebtoB 환경파일 (sample.m)

※ NODE 섹션에 HTH 개수와 JEUS 연결을 위한 JSVPORT 추가

*NODE

HTH=1,

JSVPROT=9999,

※ SVRGROUP 섹션에 SVRTYPE에 JSV 서버 그룹 추가

*SVRGROUP

htmlg NODENAME=webtob1, SVRTYPE=HTML

jsvg NODENAME=webtob1, SVRTYPE=JSV

※ SERVER 섹션에 MyGroup 서비스 추가

*SERVER

html SVGNAME=htmlg, Minproc=2, Maxproc=10

Mygroup SVGNAME=jsvg, Minproc=4, Maxproc=10

※ URI 섹션에 MyGroup 서비스 uri 추가

*URI

uri1 uri="/examples/",

SVRTYPE=JSV,

SVRNAME=MyGroup

※ EXT 섹션에 .jsp 추가

*EXT

jsp MimeType="application/jsp",

SVRTYPE=JSV

- JEUS 환경파일 (WEBMain.xml)

※ Port 값은 WebtoB Servlet Engine 웹 컨테이너와 WebtoB와의 연결을 맺을 Port 번호를 설정 sample.m JSVPORT값과 일치

※ WebtoB의 sample.m NODE섹션 부분의 HTH 설정값과 일치

※ sample.m의 SERVER섹션의 MyGroup과 일치

※ Thread의 개수는 sample.m의 MyGroup Server의 MinProc 값과 일치

- JEUS 환경파일 (WEBMain.xml)

- 연결포트 번호

- HTH 수

- Server Name

- Process 수

<webtob-listener>

<listener-id>webtob1</listener-id>

<port>9999</port>

<webtob-address>210.183.235.32</webtob-address>

<registration-id>MyGroup</registration-id>

<hth-count>1</hth-count>

<thread-pool>

<min>10</min>

<max>10</max>

<step>0</step>

<max-idle-time>1000</max-idle-time>

</thread-pool>

</webtob-listener>

참조 문서

[1] Apache 2.0 New Features

[2] Apache HTTP Server Version 2.0 Documentation

[3] WebtoB Admin Guide Book

[4] WebtoB Installation Guide Book

[5] Java 2 SDK Standard Edition Documentation

[6] Tomcat User Guide Books

[7] JEUS Guide Boos