달력

3

« 2024/3 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'jetty'에 해당되는 글 1

  1. 2009.09.01 Jetty
2009. 9. 1. 16:44

Jetty Computing에 관한 독백2009. 9. 1. 16:44

Apache Tomcat이 Servlet / JSP 참조 구현체이긴 하지만 요새 Jetty란 JSP/Servlet Engine이 Tomcat보다 더 작고 가벼워로 각광 받는 듯 하다. 특히 Google이 자사의 AppEngine을 Tomcat -> Jetty로 교체한 사실은 앞으로 Jetty에 많은 힘을 실어줄 듯 하다. 이 정도 되니 Jetty에 대한 궁금증이 생겨 Jetty를 알아보기로 했다.

 

Jetty 6? Jetty 7?

2009년 9월 1일 현재 Jetty의 안정 버전은 6.x이고 다. 상위 버전인 7.x가 출시 준비판(Release Candidate)으로 존재한다. 6.x는 codehaus가 관리하는데 7.x부터는 Eclipse 재단이 관리하는 것도 재미있는 점이다. 7.x 버전은 제품 자체 완성도는 좋을 지 모르나 문서화가 아직 진행 중이기 때문에 관련 정보 획득이 어렵다. 따라서 현재 안정 버전인 Jetty 6 획득을 권장한다.

 

Jetty 시작과 종료

간단한 Jetty 시작 / 종료

Jetty 기동은 다음과 같이 하면 된다.

$ java -jar start.jar

이후 웹 브라우저에서 http://localhost:8080 으로 접속해 보면 Jetty가 제대로 기동되었는지 여부를 알 수 있다.

 

종료는 Jetty를 기동하는 java process를 kill하면 된다.

 

Jetty 기동 Option

간단한 Jetty 시작에서는 아무 옵션도 주지 않고 기동했지만, Jetty 기동에는 여러 옵션을 줄 수 있다. Jetty 기동 command line은 아래와 같은 형태를 가진다.

 

java [<property_list>] -jar start [--help | --stop | --version] | [<jetty_config_file_urls>]

 

 

<property_list>에는 Jetty에 관련된 JVM property들이 나온다. 이들 property를 설정함으로써 Jetty 기동을 좀 더 세밀하게 제어할 수 있다. 다음은 Jetty 기동 시 부여할 수 있는 property 및 그 의미에 대한 목록이다.

 

  • jetty.home : Jetty Home Directory를 지정한다. OS의 JETTY_HOME 환경 변수를 지정하는 것으로 이 property 설정을 생략할 수 있다.
  • jetty.port : Jetty가 listening할 HTTP port를 지정한다. 이 port는 XML로 된 Jetty 설정 파일에서도 지정 가능하다.
  • jetty.host: Jetty가 기동하는 장비의 IP, 또는 hostname을 지정한다. 기본적으로 Jetty가 돌아가는 로컬 장비의 hostname으로 설정된다.
  • jetty.logs: Jetty가 남기는 log 디렉토리 지정. 기본은 ${jetty.home}/logs 디렉토리이다.
  • STOP.PORT : Jetty 정지 신호를 받아들이는 port. jetty.port로 설정하는 port와는 다른 port이다.
  • STOP.KEY : Jetty를 정지시킬 때 주어야 할 열쇠글(이 열쇠글을 제대로 주지 않으면 Jetty 정지가 안된다)

 

Jetty는 property 이외에도 --help, --stop, --version과 같은 option을 줄 수 있다.

 

  • --help : Jetty 기동 시 줄 수 있는 option을 표시한다(별로 자세하지는 않다)
  • --version : Jetty의 version을 표시한다.
  • --stop : Jetty를 중단시킨다.

 

--stop, STOP.PORT, STOP.KEY에 대해 좀 더 자세히 언급하기로 한다. 예를 들어 Jetty 기동을 다음과 같이 했다고 하자.

 

$ java -DSTOP.PORT=8037 -DSTOP.KEY=fuhaha -jar start.jar &

$

 

위에서 기동한 Jetty를 정지시키려면, 위 process를 kill하는 방법도 있겠으나 다음과 같은 명령을 내리면 안전하게 위에서 기동한 Jetty를 정지시킬 수 있다.

 

$ java -DSTOP.PORT=8037 -DSTOP.KEY=fuhaha -jar start.jar --stop

 

Jetty에 Java EE Web Application 배포

Jetty를 설치/설정하는 이유는 결국 Jetty에 Web Application을 올리기 위함이다. Jetty에 Web Application을 올리는 방법은 두 가지가 있는데 하나는 Web Application Deployer를 쓰는 방법이고, 다른 하나는 Context Deployer를 쓰는 방법이다.

 

Web Application Deployer

Web Application Deployer는 정적 배포기이다. 여기에서 정적 배포란 hot deploy가 아닌, 변경한 내용을 반영하기 위해서는 Jetty 재기동이 필요한 배포를 말하며, Jetty를 이루는 class 중 org.mortbay.jetty.deployer.WebAppDeployer라는 클래스가 담당한다. 방법이 매우 간단한데, Jetty 기본 설정 상태에서는 $JETTY_HOME/webapps 밑에 JavaEE Web Application을 놓고 재기동하면 바로 그 새로운 Web Application을 인식한다.

 

문제는 default 상태의 Jetty 6.1.20은 Tomcat과 달리 WAR 형태로 묶은 Web Application은 자동으로 인식하지는 않았다는 점이다. 따라서 WAR로 묶은 Java EE Web Application은 압축을 풀어 $JETTY_HOME/webapps 디렉토리에 놓아두고 재기동해야 Jetty가 인식하였다. 이 점은 좀 이상한 점으로 정말 이런 것인지는 좀 더 사용을 해 봐야할 것으로 보인다.

 

Context Deployer

Context Deployer는 hot deploy를 지원하며, Jetty 설정 파일(default는 $JETTY_HOME/etc/jetty.xml)을 보면 org.mortbay.jetty.deployer.ContextDeployer라는 클래스가 Context Deployer임을 알 수 있다. Jetty 기본 설정 상태에서 Hot Deploy는 $JETTY_HOME/contexts 라는 디렉토리에 각 Java EE Web Application에 대한 XML로 된 설정 파일을 가져다 놓아야 한다.

Jetty 설정 파일의 Context Deployer 설정 부분 예시는 다음과 같다.

<Call name="addLifeCycle">
     <!-- Context Deployer class 설정 -->
     <New class="org.mortbay.jetty.deployer.ContextDeployer">
        <Set name="contexts"><Ref id="Contexts"/></Set>
        <!-- Context XML 설정 파일 놓는 위치 지정. 여기서는 $JETTY_HOME/contexts 디렉토리로 설정 -->
        <Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts</Set>
        <Set name="scanInterval">1</Set>
    </New>
  </Arg>
</Call>

각 Java EE Web Application마다 만들어야 할, $JETTY_HOME/contexts에 가져다 놓는 XML 파일 예는 다음과 같다.

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
    "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
      <!-- Web Application에 부여할 context path. 여기서는 /test 로 설정 -->
      <Set name="contextPath">/test</Set>
      <!-- Web Application이 있는 directory. 여기서는 $JETTY_HOME/webapps/test 디렉토리로 설정 -->
      <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/test</Set>    
</Configure>

 

이 글은 스프링노트에서 작성되었습니다.

:
Posted by 하얀 말