메뉴 건너뛰기

tnt_os

IBM WebSphere WebSphere의 document Root

운영자 2003.06.11 17:34 조회 수 : 2936 추천:62

>
> {[질문] IBM WebSphere 4.0에서 sample 소스인 default_app의 index.html을
>  호출하는 방법은?}
> {김영수(guest), ys2@dit.dongbu.co.kr}
>
> IBM WebSphere Application Server 4.0에서 sample 소스로 제공되는 default_app와
> examples에서 default_app의 경로에 있는 very_simple.jsp는 URL 경로를
> http://localhost/very_simple.jsp 를 이용하여 액세스가 가능한데, 같은 경로에
> 존재하는 index.html은 브라우저에서 읽어오지를 못합니다.
>
> 같은 샘플인 examples는 http://localhost/webapp/examples/index.html 로 액세스가
> 가능한 것을 보면 파일지원 인에이블러 때문이 아닌것 같은데, 확실한 이유를
> 모르겠습니다.
>
> HTTP Server서비스를 종료한 후 http://localhost:9080/index.html 도 시도해 보았지만
> 실패했습니다.
>
> default_app의 index.html이나 login.html을 실행하려면 어떻게 해야 하나요?
> 물론 examples의 콘텍스트 루트는 /webapp/examples 이고 default_app 의 콘텍스트
> 루트는 "/" 입니다.
>
> 테스트 환경은 windows 2000 Server + WebSphere 4.0 AE + DB2 7.1 + IBM HTTP Server
> 1.3.19 입니다.
>
> 조언 부탁드립니다. 좋은 하루 되세요 ^^
>
> 김영수 ys2@dit.dongbu.co.kr



Websphere V4 의 "응용프로그램 어셈블리 도구"를 띄워 보십시요.
윈도즈라면 시작-->프로그램-->IBM 웹스피어 --> "응용프로그램 어셈블리 도구" 로
띄우거나, 관리콘솔의 "도구" 메뉴에서 "응용프로그램 어셈블리 도구"를 선택해도
됩니다.

파일 열기를 선택하여 아래 파일을 열어보십시요.

C:WebSphereAppServerinstallableAppssampleApp.ear

즉, 님이 보셨던 두개의 "웹응용어플리케이션"은 이 EAR 파일에 그 설정정보가 담겨
있습니다.

좌측 트리를 전부 확장하면 크게 두개의 웹모듈이 담겨 있는데, 하나는 "Default
Application" 이고, 또다른 하나는 "Examples Application"입니다.

다음과 같은 순서로 클릭해 들어가 보세요

Sample Application
  --> 웹모듈
     --> Default Application 클릭

우측 중간 탭에서, "IBM확장"을 클릭 해 보시면, 그 아래에 "파일서비스사용가능"
체크박스가 unchecked 되어 있는 것을 알 수 있습니다. 즉, 문서루트가 "/"로 맵핑된
default_app 는 "파일서비스"기능을 사용하고 있지 않습니다.

(Version 3.x 에서는 "파일지원 인에이블러"로 용어가 사용되었으나, V4 에서는 단지
"파일서비스" 기능을 사용한다/안한다로 설명되는 듯 합니다. 내용은 동일한 것이지만)

반면, "Examples Application" 에서 동일한 항목으로 쫓아 들어가 보시면, 문서루트가
"/webapps/examples" 로 URL맵핑된 "Examples Application"은 "파일서비스사용가능"
항목이 체크되어 있는 것을 확인할 수 있습니다.

따라서, 만약  님이 http://localhost/index.html 이라고 호출하면, defaiult_app는
파일서비스를 하지 않으므로 "Default Application" 이 설치된 디렉토리, 즉,
C:WebSphereAppServerinstalledAppssampleApp.eardefault_app.war 디렉토리에서
index.html 을 찾는 것이 아니라, 웹서버인 IBM HTTP Server 의 httpd.conf 에 정의된
DocumentRoot 디렉토리에서 index.html  을 찾게 됩니다.
(막 WebSphere V3 를 default 상태로 설치하셨다면, "IBM HTTP 서버 사용을 환영합니다"
라는 웹서버의 초기화면이 나올 것입니다.)


NOTE: 설치시 기본적으로 제공되는 샘플들은 어디까지나 샘플일 뿐입니다. 실 프로젝트
환경에서는 별도로 WAR, EAR 파일을 "응용프로그램 어샘블리 도구"로 다시 만드시고,
"파일 서비스"기능은 사용하지 않도록 un-checked 하셔서 만드세요.
왜냐면, (늘 했던 얘기지만) static 한 컨텐츠(*.html, *.gif, *.css)들은 웹서버가
담당토록 하는 것이 성능향상에 도움이 되고, 또, 향후, 웹서버와 웹어플리케이션서버를
분리할 땐, 당연히 이렇게 해야만 하는 것이 바람직하기 때문입니다.
웹서버의 DocumentRoot 와 해당 "웹응용어플리케이션"의 Deploy된 디렉토리가 굳이
될 필요는 없고, 디렉토리 구조만 동일하면 됩니다. (같아도 상관 없지만...)

디렉토리 구조는 프로젝트가 시작되기 전부터 고민고민해서 설계해야 하는데, 만약
웹응용어플리케이션이 하나밖에 없다면 별다른 고민이 필요없겠지만, 하나 이상의
웹응용어프리케이션이 있다면, 그 중 이미지 파일이나, 공통적으로 사용하게된 *.html
파일들이 도출될 것입니다. 이것이 각각 상대적인 URL경로로 맵핑된 웹응용어플리케이션
간에 적절히 불려질 수 있도록 하려면, 결국 웹서버의 DocumentRoot 하부의 구조는
다음과 같아야 할 것입니다.

WAR1 URL 컨텍스트 : /
WAR2 URL 컨텍스트 : /pub
WAR3 URL 컨텍스트 : /member

일 때,

WAR1 을 위한 웹서버의 DocumentRoot : C:.....htdocs
WAR2 을 위한 웹서버의 DocumentRoot : C:.....htdocspub
WAR3 을 위한 웹서버의 DocumentRoot : C:.....htdocsmember

반면, WAR 들이 EAR 파일에 포함되어 Deploy 되면, (이것 역시 지정해 주기
나름이겠지만) 통상 C:......installedApps<ear_name><war_name> 디렉토리가
될 것입니다. 따라서, 예를 들어 WAR2 를 위한 구조만을 보면,

C:......installedApps<ear_name><WAR2_name> 하부 디렉토리의 구조가
C:.....htdocspub 의 하부구조와 동일하되 정적컨텐츠(*.html,*.gif...)와 *.JSP
파일들이 각각 구분되어 저장되어야 한다는 것입니다.

("C:.....htdocspub" 디렉토리는 어떤 의미를 가지냐면, "웹서버의 Virtual Host의
DocumentRoot("c:...htdocs") 디렉토리 하부에 있는, 관련된 WebSphere 웹응용어플리케
이션 "WAR2" 의 Context URI 문서루트("/pub")와 동일한 이름의 서브 디렉토리" 라는
의미가 됩니다. 곰곰히 생각해 보시면....)

PS: 이렇게 정적 컨텐츠와 JSP와 같은 동적컨텐츠의 서비스를 분리하게 되면, 흔히
실수를 범하는 부분이 JSP에서 page include 와 같은  테그에서 *.html, *.txt 와
같은 정적컨텐츠를 include 할 수 없게 된다는 것입니다.(당연하죠? 웹서버와 WAS가
물리적으로 서로다른 머신에 존재할 수도 있는 상황이고, 그것을 서비스하는 주체와
물리적으로 놓여 있는 디렉토리구조 조차 다르잖습니까...) 이처럼, 정적 컨텐츠를
JSP에서 page include 를 하려면 WebSphere가 정적컨텐츠까지 서비스하는 상태인
"파일서비스사용가능" 항목이 checked 되어 있을 때만 가능합니다.


NOTE: 이처럼 "파일서비스"기능을 다시 사용토록 혹은 사용치 않도록 변경하는 방법은
"응용프로그램 어셈블리도구"를 이용하여 다시 EAR파일을 Deploy 하여도 되겠지만,
이것을 원치는 않을 겁니다. 아래 디렉토리에 다음과 같은 파일이 있습니다.

D:WebSphereAppServerinstalledAppssampleApp.eardefault_app.warWEB-INF
ibm-web-ext.xmi

이 파일에 보면, 아래와 같이 "IBM확장옵션"들이 정의되어 있는 것을 볼 수 있습니다.

<webappext:WebAppExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
     xmlns:webappext="webappext.xmi"
     xmlns:webapplication="webapplication.xmi"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmi:id="WebAppExtension_1"
     reloadInterval="5"
     reloadingEnabled="true"
     defaultErrorPage="error.jsp"
     additionalClassPath=""
     fileServingEnabled="false"  <--- 이 부분 !!
     directoryBrowsingEnabled="false"
     serveServletsByClassnameEnabled="true"
>
   <webApp href="WEB-INF/web.xml#WebApp_ID"/>
</webappext:WebAppExtension>

이 중, fileServingEnabled="false" 옵션을 수정해 주면 됩니다. (다른 옵션들 역시
그 이름만으로 어떤 기능을 하는 것인지 알 수 있을 겁니다.)

이렇게 변경을 했으면, WebSphere V4를 정지후 다시 시작하고, 특히, 이처럼 변경된
내용을 웹서버인 IBM HTTPServer의 Plug-In 모듈이 인식토록 하려면, Plug-In 모듈이
참조하는 $WAS_HOME/config/ 디렉토리에 있는 plugin-cfg.xml, plugin-cfg-service.xmi
파일들이 변경되어야 합니다. 이 파일은 통상, 관리콘솔에서 해당 Nodes 밑의 서버명을
우측 마우스로 클릭 후 "Regen Webserver Plugin" 항목메뉴를 클릭하면 자동으로
곧바로 해당 파일들이 수정됩니다. 그러나, 이 파일들이 수정되었다고 하여 곧바로
이미 기동되어 있는 웹서버가 인식하는 것은 아니니 만큼 웹서버를 재기동해 주어야
할 것입니다.

NOTE2: 또, $WAS_HOME/config/ 디렉토리에 있는 웹서버가 참조하는 Plug-In 구성파일은
WebSphere 의 Admin Server 가 기동할 때, 또다시 자동으로 재생성할 수도 있고,
그렇지 않을 수도 있는데, 이는 아래의 항목에서 그 여부를 제어할 수 있습니다.

관리콘솔
   --> Nodes
      --> (서버명:lwy)
        --> Application Servers
           -->(어플리케이션서버명:Default Server) 클릭

우측의 중간에 위치한 탭에서 가장 오른 쪽의 "Custom" 탭을 선택하면,
현재 "Automatic Generation of Plugin Configuration" 값이 "true 혹은 false" 가
되어 있을 겁니다. 이를 "Edit" 버튼을 이용하여 팝업창에서 변경해 줄 수 있습니다.


이원영
lwy@kr.ibm.com, javaservice@hanmail.net
위로