반응형

Tomcat 설치와 JDBC 연동이 확인됐다면 JSP 프로그래밍을 위한 준비가 되었다고 생각합니다.


다음으로는 톰캣과 웹 애플리케이션에 대해서 간단히 설명을 하겠습니다.

톰캣은 순수 자바로 만든 자바 웹 애플리케이션의 컨테이너라고 표현합니다.

컨테이너란 그릇이란 뜻인데 담는 내용물이 자바 웹 애플리케이션입니다.


자바 웹 애플리케이션을 담는 것뿐만 아니라 웹상에서 클라이언트의 요구에 따라 자바 웹 애플리케이션이 서블릿, JSP 스펙에 따라서

동작하도록 하는 것을 자바 웹 애플리케이션 컨테이너가 하는 일입니다.


JSP 서블릿을 서비스하기 위해서는 컨테이너를 선택하여 서버상에 동작하도록 해야 합니다.

우리는 Tomcat 을 선택했고 지난 글에서 설치를 하였습니다.


자바 웹 애플리케이션에 대해서 좀더 자세하게 살펴봅시다


자바 웹 애플리케이션란?


"자바 웹 애플리케이션은 서블릿, html 페이지, 클래스, 그리고 그 외 자원의 집합인데
이들 자원은 번들화될 수 있고, 이 번들은 다양한 벤더의 다양한 컨테이너에서 작동할 수 있다."

간단하게 정리하면, 웹 애플리케이션은 다음 리스트의 어떠한 결합도 유지할 수 있는 것을 자바 웹 애플리케이션이라고 할 수 있습니다.

* Servlets
* Java Server Pages (JSPs)
* utility classes, JavaBeans
* 정적 엘리먼트 HTML, images 등
* 클라이언트 사이드 classes
* 자바 웹 애플리케이션을 설명하는 메타 정보

또 한가지 중요한 것은, 웹 애플리케이션의 주요 특징 중 하나가 ServletContext 과 웹 애플리케이션과의 관계라는 것입니다.
각각의 웹 애플리케이션은 오직 하나의 ServletContext를 가집니다.
이 관계는 서블릿 컨테이너에 의해 유지되고, ServletContext 안의 객체에 두개의 웹 애플리케이션
이 접근할때 충돌이 일어나지 않게 하는 것을 보장합니다.
참고로 ServletContext는 웹 애플리케이션의 컴포넌트간 공동 저장소로서 주로 이용됩니다.
공동 저장소로서 사용되는 예제는 뒤에서 살보겠습니다.


자바 웹 애플리케이션은 위와 같은 파일들의 모임인데 이 파일들이 위치하는 디렉토리도 일정하게 정해져 있으므로 알맞은 위치에서

두어야 서비스 할 수 있습니다.


자바 웹 애플리케이션의 디렉토리 구조

%% 이클립스에 설정하요 사용시 디렉토리 구조가 다를수 있다. %% 

만약 {Tomcat}/webapps 디렉토리에 웹 애플케이션을 새로 설치한다면 {Tomcat}/webapps 아래에 다음과 같은 디렉토리 구조를 가지게 됩니다.

(우리가 새로 작업할 디렉토리명을 mnd라고 정했다면..)


/mnd
웹 애플리케이션 root 디렉토리입니다 , 모든 JSP, HTML 파일을 여기에 저장합니다.

서브 디렉토리 역시 만들 수 있습니다.


/mnd/WEB-INF
root 디렉토리에 있지 않은 모든 자원을 여기에 위치시킵니다.
여기에는 웹 애플리케이션 배치 정의자 (web.xml)가 위치합니다.
클리이언트가 직접적으로 접근할 수 있는 파일은 이곳에 없습니다.

/mnd/WEB-INF/classes
Servlets 과 사용자 유틸리티 클래스, 자바빈을 이곳에 저장합니다.

/mnd/WEB-INF/lib
웹 애플리케이션이 사용하는 자바 아카이브 파일을 이곳에 저장합니다.
예를들면 JDBC 드라이버나 태그 라이브러리를 구성하는 jar 파일을 이곳에 저장합니다.

웹 애플리케이션 디렉토리에서 주목해야 할 것은
컴파일된 클래스 파일이 위치하는 곳이 두 군데 라는 것입니다.
하나는 /mnd/WEB-INF/classes 이고 다른 하나는 /mnd/WEB-INF/lib 입니다.
만일 똑같은 객체가 이들 두곳에 위치합니다면 어떻게 될까요?
클래스 로더는 먼저 /mnd/WEB-INF/classes 에서 로딩하고 그 다음에 /mnd/WEB-INF/lib 를 로딩하게 됩니다.
따라서 /mnd/WEB-INF/classes 에 있는 클래스가 우선권을 가지고 로딩되고 /lib 에 있는 클래스는 무시된다고 합니다.

하지만 중복되지 않게 하는 것이 더 중요하겠지요.


다음은 /mnd/WEB-INF/ 내에 있는 파일인 web.xml 파일을 좀 더 정리합니다.


Deployment Descriptor (배치자) 설명


웹 애플리케이션의 심장은 Deployment Descriptor (배치자)라고 불리는 web.xml 이라는 이름의 XML파일입니다.
Deployment Descriptor 는 /mnd/WEB-INF/ 디렉토리안에 둡니다.

배치자는 웹 애플리케이션의 모든 설정 정보를 정의합니다.
배치자 파일이 가지고 있는 정보는 다음과 같습니다


* servlet 정의
* servlet 초기 파라미터
* session 설정 파라미터
* servlet/JSP 매핑
* MIME 타입 매핑
* 보안 설정 파라미터
* welcome 파일 리스트
* 에러 페이지 리스트
* 자원과 환경 변수 정의

web.xml 의 예

<web-app>
   <display-name>The Mnd App</display-name>
   <session-timeout>30</session-timeout>
   <servlet>
      <servlet-name>TestServlet</servlet-name>
      <servlet-class>kr.go.mnd.TestServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
      <init-param>
         <param-name>name</param-name>
         <param-name>value</param-name>
      </init-param>
   </servlet>
</web-app>


<display-name>은 단순히 웹 애플리케이션의 이름을 나타냅니다.
이것은 아무런 기능도 하지 않습니다.

<session-timeout> 은 애플리케이션의 HttpSession 객체의 라이프타임을 컨트롤합니다.
위의 <session-timeout> 값은 JSP/servlet 컨테이너에게 HttpSession 객체가 30분 동안 아무런
움직임이 없다면 소멸될 것이라는 것을 알려줍니다.

<servlet>은 servlet과 해당 servlet 의 프로퍼티를 나타냅니다.


web.xml 파일은 간단한 웹 애플리케이션의 경우 생략이 가능합니다.


팩킹 (Packing)

위 디렉토리 구조로 개발이 완료되었다면 웹 애플리케이션을 번들화 하여 다른 웹 애플리케이션 컨테이너에 배포를 할 수 있습니다.


배포를 하기 위해서는 웹 애플리케이션의 루트 디렉토리에서 다음과 같은 명령을 내려 war 확장자를 가진 war 파일을 만듭니다.


jar cvf mnd.war .


그러면 mnd.war 파일이 만들어지는데 이 파일을 다른 톰캣 컨테이너에 배포를 하는 방법은 다른 톰캣 컨테이너의 webapps 디렉토리에 두면 자동으로 서비스를 할 수 있게 톰캣이 알아서 자동으로 우리의 mnd 애플리케이션을 배치합니다.


다른 방법으로는 톰캣의 manager 툴을 이용하는 방법이 있습니다.


이 툴은 톰캣을 설치하면 같이 설치가 되는 툴이며 이것 역시 웹 애플리케이션입니다.

<출처: http://cafe.naver.com/webprogramguide/88 >

+ Recent posts