IT_Programming/Java

JavaTM Web Start

JJun ™ 2008. 1. 23. 09:24

1.         Applet

1.1. Applet!

애플릿(applet!)이란 혼자 실행되지 못하고 다른 프로그램(보통은 웹 브라우저를 의미한다.)에 삽입(Embedded)되어져서 실행되는 자바 프로그램을 의미한다. 애플릿의 경우 웹 브라우저만 실행된다면, 이 세상 어느 곳에서도 실행되어질 수 있기 때문에 많은 인기를 누렸다. 즉, 프로그램의 설치 없이도 웹과 연결되어 있다면 웹 브라우저를 사용하여 프로그램을 실행시킬 수 있다. 애플릿에 대한 더욱 더 자세한 설명은 이 문서의 목적에 벗어나므로 생략하기로 한다. 애플릿에 대한 자세한 정보를 알고 싶다면, http://java.sun.com/applet!s/index.html를 참고하면 된다.

그러나, 애플릿의 경우에도 문제점을 가지고 있었다.

첫째, 애플릿은 웹 브라우저가 네트웍으로 서버에서 프로그램을 동적으로 다운로드 받기 때문에 보안 관련 문제에 대하여 신경을 써야 했다. 즉, 웹 페이지를 검색하다가 아무 생각 없이 애플릿이 삽입된 페이지를 열었는데, 그 애플릿이 하드 디스크를 포맷하는 애플릿이라면 어떻게 될까? 만약 그렇다면, 애플릿이 많은 사용자를 확보할 수 없었을 것이다. 그래서, 애플릿의 경우 몇 가지 보안 관련 제약 사항을 가진다. 즉, 보안을 위해서 몇 가지 기능을 사용하지 못한다는 것이다. 그 중에서도 가장 많이 알려진 제약 사항으로는 로컬 디스크에 접근하지 못하고, 애플릿이 다운로드된 호스트를 제외한 다른 컴퓨터와 네트웍 연결을 맺을 수 없다는 것일 것이다. 이 외에도 여러 가지 제약 사항들이 존재한다. 관심 있으면 위의 웹 페이지를 찾아보면 된다. 이러한 제약 사항을 해결하기 위해 Signed Applet!이란 기능을 지원한다. Signed Applet!에 대해서는 1.2 Signed Applet!에서 얘기할 것이다.

둘째, 웹 브라우저들이 SUN의 JVM 최신 버전을 지원하지 않는다는 것이다. SUN의 JVM의 경우 Java 2 라 불리는 JDK1.2에 이어서 JDK1.3까지 발표 되었다. 그러나, 가장 많은 사용자를 확보하고 있는 Internet Explorer의 최신 버전인 5.5의 경우에도 Java 2를 지원하지 않고, JDK1.1.X 까지 밖에 지원하지 못한다. Netscape의 경우에는 JDK1.3을 지원한다고 했지만, 아직 정식 제품 발표가 이루어지지 못하고 있다. 이러한 환경이 많은 문제점을 가지는 이유 중 하나는 JDK1.1.X와 Java 2 라 불리는 JDK1.2와 많은 기능상의 차이가 존재한다는 것이다. 예를 들어, Java 2 에서 기본 패키지로 들어있는 Swing의 경우에도 JDK1.1.X에서는 지원되지 않고, Print 관련 기능들도 JDK1.1.X에서는 지원되는 기능이 거의 없다. 이러한 버전 문제 때문에 애플릿의 웹 브라우저의 JVM이 아닌, SUN의 JVM에서 실행되게 할 수 있는 Java Plug-In이란 기술이 발표되었다. Java Plug-In에 대해서는 1.3 Java Plug-in에서 얘기하도록 하자.

1.2. Signed Applet!

Signed Applet!이란 말 그대로 애플릿에 서명을 하여, 애플릿이 악의를 가지고 있지 않다는 것을 증명하는 것이다. 즉, 애플릿에서 로컬 디스크에 접근하고 싶다면 애플릿에 서명을 하여 로컬 디스크에 접근하는 것을 사용자가 허락하게 하는 것이다. 애플릿에 서명을 하는 방법은 대략 3가지 정도가 존재한다.

첫째, SUN에서 제공하는 방법이다. SUN에서는 RSA란 알고리즘을 사용하여 애플릿에 서명을 하게 한다. 이 방식에 대한 자세한 설명 또한 이 문서의 목적에 벗어나므로 생략하기로 하자. 그러나, 문제점을 살펴보면 다음과 같다. RSA 알고리즘의 경우 공개키/비밀키를 쌍으로 가지는 알고리즘이다. 즉, 내가 나만이 알고 있는 비밀키로 서명을 한다면, 이렇게 서명 되어진 것을 풀기 위해서는 나의 공개키가 꼭 필요하다. 물론 나의 공개키를 공개해야 한다. 그러나, 애플릿의 사용자가 애플릿을 만든 사람의 공개키를 가지고 있을 리가 없을 것이다. 즉, SUN에서 제공하는 방법을 사용하려면 한 가지 전제 조건이 붙는다. 애플릿을 만든 사람의 공개키(SUN에서 제공하는 예제에서는 확장자가 cer인 파일이다.)를 애플릿 사용자가 가지고 있어야 한다는 것이다. 이 방법을 사용하려는 사람이 없을 것 같지만, 굳이 사용하는 예제를 알고 싶다면 필자에게 E-mail을 보내면 한글로 잘(?) 정리된 문서를 보내 줄 것이다.

둘째, Microsoft에서 제공하는 Java SDK를 이용하여 애플릿에 서명을 하는 것이다. 이 방법의 경우 서명된 애플릿에 사용자가 접근을 하면, 경고 창을 띄워서 사용자에게 애플릿을 실행할 것인지 아닌지를 물어본다. 사용자가 를 선택하면, 애플릿에게 보안 관련 제약 사항을 해제 시켜주므로 그 때부터 그 애플릿은 사용자의 시스템에 접근할 수 있게 된다. 만약 사용자가 아니요를 선택하면, 애플릿은 실행되지 않는다. 아주 간단해서 좋을 것 같지만, 단점도 있다. 첫째로, Internet Explorer에서만 사용되어 진다는 것이다. 즉, 다른 웹 브라우저에서는 실행되지 않는다. 둘째로, 제대로 사용하려면, 인증 기관에 등록을 해서 인증되었다는 확신을 사용자에게 주어야 한다. 그냥 자기 회사 이름으로만 인증을 한다면, 생각이 있는 사용자라면 그 회사 이름만 보고 애플릿을 믿지 않기 때문이다. (그러나, 요즘 사용자들은 아무 생각 없이 를 클릭하는 것 같다. 이 글을 읽은 순간부터 라도 애플릿을 조심(?)하도록 하자! 그럴 일은 거의 없겠지만, 클릭 한 번의 실수로 애플릿이 당신의 컴퓨터의 하드에 존재하는 데이터를 당신이 모르는 순간에 모두 지워 버릴지도 모른다.)

셋째, Netscape에서 제공하는 Java SDK를 이용하여 애플릿에 서명을 한다. 이 경우도 위의 두 번째의 경우와 거의 동일하다. 즉, 큰 문제점은 Internet Explorer와 같은 다른 웹 브라우저에서는 실행되지 않는다는 것이다.

1.3. Java Plug-in

Java Plug-in 이란 웹 페이지에 삽입되어 있는 애플릿을 웹 브라우저의 JVM이 실행하지 못하게 하고, SUN의 JVM이 실행하도록 하는 프로그램 이다. 또한, 설치하는 것도 쉽다. 사용자가 Java Plug-in이 사용되는 애플릿에 접속을 하면, 먼저 사용자의 컴퓨터에 Java Plug-in이 설치되어 있는지 검사를 한다. 만약 설치 되어 있지 않다면, SUN의 Java Plug-in 페이지로 이동하여 사용자가 클릭 한 번만으로 Java Plug-in을 설치할 수 있도록 해준다. 최신 버전의 Java Plug-in을 설치하면, 최신 버전의 JRE가 컴퓨터에 설치된다. 만약 설치되어 있다면, 애플릿을 실행 하는데 웹 브라우저의 JVM에서 실행되지 않고, Java Plug-in을 설치하면서 설치된 최신 버전의 JRE에서 실행되도록 한다.

이 방법에서는 Java Plug-in을 설치하는 시간이 걸리기는 하지만, 발표될 당시 매우 획기적인(?) 방법이었다. 그러나, 가장 큰 문제가 걸림돌이 되었으니 바로 Signed Applet!과 동시에 사용할 수 없다는 것이었다. 즉, 애플릿에 서명을 하면서 Java Plug-in을 사용하지 못했던 것이다. 그래서, 많은 개발자들이 사용한 방법이 Java Plug-in을 사용하지 않고, Swing 패키지를 다운로드 시켜 주면서 애플릿에 서명을 하는 방법이었다.

2.         Java Web Start

위와 같은 문제점을 해결하기 위해서 드디어(?) Java Web Start라는 기술이 SUN에서 정식 발표되었다. 이 기술이 도입되면서 이제 더 이상 애플릿이란 용어의 사용이 불필요해 졌다. 즉, Java Web Start만 설치되어 있다면 웹 브라우저에 존재하는(삽입이란 단어를 사용하는 것이 뭔가 느낌이 이상해서 단어를 바꾸었다.) 자바 애플리케이션(더 이상 애플릿이 아니다.)을 실행 할 수 있다. 즉, 웹 브라우저에서 사용하기 위해서 자바 애플릿으로 프로그램을 작성할 필요가 없다. 애플리케이션으로 작성한 프로그램을 웹 브라우저에서 실행할 수 있는 것이다. 전제 조건은 오직 하나, Java Web Start가 설치되어 있어야 한다는 것이다. 웹 페이지에 Java Network Launching Protocol을 의미하는 JNLP 파일을 링크함으로써 애플리케이션을 웹 브라우저에서 실행할 수 있게 된 것이다.

Java Web Start의 경우에도 사용자의 컴퓨터에 Java Web Start가 설치되어 있는지 아닌지를 검사할 수 있는 스크립트(자바 스크립트와 비베 스크립트로 이루어져 있다. 그저, 복사해서 사용하면 된다.)를 제공한다.

또한, 보안 문제에 대해서도 쉽게 접근할 수 있도록 했다. 즉, Java Web Start로 실행된 프로그램 역시 자바의 보안 모델인 Sand Box 모델 중에서 Sand Box에 들어가게 된다. 애플릿과 마찬가지로 여러 가지 보안 관련 제약 사항을 가지게 된다. 이러한 보안 관련 제약 사항을 해결하기 위해 jar 파일(뒤에서 설명되겠지만, Java Web Start에서 사용되기 위해서는 꼭 jar 파일로 묶여야 한다.)에 jarsigner를 이용하여 서명을 하도록 하게 했다. Jar 파일에 서명을 한 경우, Java Web Start가 이 jar 파일을 실행하기 전에 사용자에게 메시지 창을 띄워서 프로그램을 Launch 할 것인지 아닌지를 선택하게 한다.

이 문서의 목적은 Java Web Start를 사용하는 방법을 설명하는 것이므로, Java Web Start의 기술적인 부분과 특징들에 대해서는 이만 생략 하기로 하자. 더 많은 자료들을 원한다면 http://java.sun.com/products/javawebstart 페이지를 참고하면 된다.

이제부터 진짜루 Java Web Start를 사용하여 보자!

필요한 준비물은 웹 서버만 있으면 된다. 참고로 이 문서에서 나오는 예제에서 사용된 웹 서버는 Jakarta-Tomcat에 포함되어져 있는 아주 작은 웹 서버이다.

또 하나 참고로 말하자면, 사용자의 컴퓨터에 Java Web Start가 설치되어져 있지 않은 경우 SUN의 Java Web Start 페이지에 존재하는 다운로드 가능한 페이지로 이동시킬 수 도 있다. 그러나, 이 문서의 경우 다운로드 받을 수 있는 페이지를 만들고, Java Web Start 설치 파일을 웹 서버에 위치 시켜서 SUN의 페이지로 이동하지 않고도 가능하게 하였다. 참고로 Java Web Start 설치 파일의 크기는 6메가 정도 되고, http://java.sun.com/products/javawebstart/download-windows.html 페이지에서 다운로드 받을 수 있다.

2.1. 웹 서버 설정하기

우선 맨 처음 해야 할 일이 웹 서버를 설정해야 한다. 즉, Java Web Start 의 MIME type을 웹 서버가 인식하도록 하기 위해서 웹 서버를 설정해야 한다. 이 설정의 경우 너무나도 간단하다. 모든 웹 서버들은 MIME type을 설정할 수 있는 기능을 제공할 것이다. Jakarta-Tomcat의 경우 conf 디렉토리에 존재하는 web.xml 파일에서 설정하면 된다. 다른 웹 서버의 경우 파일이 다르므로 웹 서버에 존재하는 문서를 참고하면 된다. 다음과 같은 MIME type을 추가해 주면 된다 :

 

application/x-java-jnlp-file JNLP

 

Jakarta-Tomcat의 경우 web.xml 파일을 열어서 MIME type을 지정하는 부분에 다음과 같은 내용을 추가하면 된다.

 

<mime-mapping>

        <extension>

            jnlp

        </extension>

        <mime-type>

            application/x-java-jnlp-file

        </mime-type>

</mime-mapping>

 

 

나머지 웹 서버의 경우 웹 서버에서 제공하는 문서를 보면 쉽게 설정할 수 있을 것이다.

2.2. JNLP파일 만들기

서버의 설정이 끝나면, 애플리케이션을 위해서 JNLP 파일을 만들어야 한다. JNLP파일을 만드는 가장 쉬운 방법은 기존의 JNLP파일을 수정을 가해서 만드는 것이다. 다음은 예제에서 사용되는 JNLP 파일이다.

 

<?xml version="1.0" encoding="utf-8"?>

         <!-- JNLP File for Java Web Start Demo Application -->

         <jnlp

           spec="1.0+"

           codebase="http://xxx.xxx.xxx.xxx/JavaWebStart"

           href="JWSDemo.jnlp">

           <information>

            <title>Java Web Start Demo Application</title>

            <vendor>N'ser Community, Inc.</vendor>

              <homepage href="http://www.nser.co.kr"/>

              <description>Java Web Start Demo Application</description>

              <description kind="short">A demo of the capabilities of the Swing JFrame Graphical User Interface.</description>

            <offline-allowed/>

           </information>

           <resources>

             <j2se version="1.3"/>

            <jar href="JWSDemo.jar"/>

          </resources>

          <application-desc main-class="JWSDemo"/>

</jnlp>

 

 

위에서 사용하는 JNLP 파일에서 몇 가지 파일 이름만 바꾸어 주면 사용 가능하다. 그러나, JNLP 파일에서 사용하는 모든 문법과 포맷에 대해 알고 싶다면 http://java.sun.com/products/javawebstart/docs/developersguide.html#jnlp 페이지를 참고하면 된다.

또한 서명된 jar 파일을 사용하는 JNLP 파일에는 <jnlp > 태그 안에 다음과 같은 추가 적인 항목이 들어가야 한다.

 

  <security>

    <all-permissions/>

  </security>

 

예제에서는 JWSDemo.jnlp와 SignedJWSDemo.jnlp 두 개의 파일을 사용하였다.

2.3. 애플리케이션 만들기

이제 웹 서버로 접근하여 사용할 애플리케이션을 만들면 된다. 그냥, 자바 애플리케이션을 작성하듯이 프로그램을 작성하면 된다. 프로그램이 완성되면 컴파일을 하여 class파일들을 생성한 후 다음과 같이 jar 파일을 만든다 :

 

jar cf JWSDemo.jar *.class

 

Jar파일을 만들고, 만들어진 jar파일과 JNLP파일을 웹 서버에 위치시킨다.

예제에서는 스윙으로 사용하고, 버튼을 클릭했을 경우 사용자 컴퓨터의 홈 디렉토리에 파일을 만드는 프로그램을 만들었다.

이 경우 파일에 접근하려면 보안 관련 제약 사항을 해결해야 한다. 즉, SignedJWSdemo.jnlp 파일이 필요로 하는 서명된 jar 파일이 필요한다. 다음은 JWSDemo.jar파일에 서명을 하여 SignedJWSDemo.jar파일을 생성하는 과정이다:

 

1. 먼저 key를 생성해야 한다.

 

keytool -genkey -alias SignedJWSDemo -keystore nserstore -keypass kwangshin -dname "cn=N'ser Community Inc." -storepass 구이뮤

 

2. JWSDemo.jar 파일에 서명을 하여, SignedJWSDemo.jar 파일을 만든다.

 

jarsigner -keystore nserstore -storepass rndlab -keypass kwangshin -signedjar SignedJWSDemo.jar JWSDemo.jar SignedJWSDemo

 

우선 위에서 진하게 되어 있는 부분은 도스 창에서 모두 한 줄에 타이핑 되어야 한다. 그리고, 각 위치에 각자 알맞은 이름들을 넣어주면 된다. 단 꼭 일치하도록 바꿔주도록 하자.

생성된 모든 파일과 필요한 웹 페이지들을 웹 서버의 적당한 위치에 옮겨 놓는다. 나머지 파일들에 대해서는 첨부된 소스 코드와 웹 페이지 파일들을 참고하면 된다. 또한 자동으로 만들기 위해서, 배치 파일도 첨부했으니 명령어에 관해서는 배치 파일을 참고하면 된다.

2.4. 웹 페이지에 링크 만들기

이제 거의 모든 것이 끝났다. 마지막으로 실제 웹 페이지에 JNLP 파일에 대한 링크를 만들어 주면 된다. 링크를 만들어 주는 것은 쉽지만, 그 이전에 먼저 사용자의 컴퓨터에 Java Web Start가 설치되어 있는지 검사해서 설치되어 있지 않다면 Java Web Start를 설치하라는 메시지를 보여주고, 설치되어 있다면 JNLP 파일로 링크가 되어 있는 페이지를 보여주는 스크립트를 만들어서 웹 페이지에 삽입해 보자.

우선 JNLP 파일에 링크를 연결하는 것은 보통 다른 링크와 같이 다음과 같이 작성하면 된다 :

 

<a href="JWSDemo.jnlp">Launch My Application</a>

 

그리고, Java Web Start가 설치 되어 있는지 검사하는 자바 스크립트와 비베 스크립트의 소스는 다음과 같다.

 

<SCRIPT LANGUAGE="Javascript">
          var javawsInstalled = 0;
          isIE = "false";

       if (navigator.mimeTypes && navigator.mimeTypes.length) {
                x = navigator.mimeTypes['application/x-java-jnlp-file'];
                if (x) javawsInstalled = 1;
          } else {
                isIE = "true";
          }

        function insertLink(url, name) {
               if (javawsInstalled) {
                     document.write("<a href=" + url + ">"  + name + "</a>");
                } else {
                     document.write("Need to install Java Web Start");
                }
          }
      </SCRIPT>

    <SCRIPT LANGUAGE="VBScript!">
          on error resume next
          If isIE = "true" Then
            If Not(IsObject(CreateObject("JavaWebStart.IsInstalled"))) Then
                  javawsInstalled = 0
            Else
                  javawsInstalled = 1
            End If
          End If
      </SCRIPT>

 

위의 소스에서 보이듯이 Netscape의 경우 자바 스크립트를 이용하여 체크하고, Explorer의 경우 비베 스크립트를 이용하여 체크한다. 위 소스를 복사하여 사용하면 된다.

위와 같은 소스를 추가한 후 실제 링크가 존재하는 곳에 다음과 같은 자바 스크립트를 사용하면 된다 :

 

 <SCRIPT LANGUAGE="Javascript">
        <!--
        insertLink("http://www.mycompany.com/my-app.jnlp", "My Application");
        // -->
    </SCRIPT>

위에서 사용하는 insertLink에 대해서 간략하게 설명하면 다음과 같다. 우선, 파라미터로 2개가 들어가는데 첫번째는 jnlp의 파일 위치인 URL이 들어가고, 두번째 파라미터로는 이름이 들어가면 된다.

위의 insertLink 함수의 소스를 약간 들여다 보면, Java Web Start가 설치되어 있다면, 두 번째 파라미터로 들어온 이름을 보여주면서 이 이름을 첫번째 파라미터인 jnlp 파일의 URL과 링크 시켜준다. 만약 설치 되어 있지 않다면 Need to install Java Web Start 라는 메시지를 보여 준다. 다른 페이지를 보여주길 원한다면, 쉽게 바꾸어 줄 수 있다.

이와 같은 경우는 아주 기본적인 기능이다.

이 문서에서 사용되는 예제에서는 약간 기능을 추가하여, 버튼을 눌렀을 경우 Java Web Start가 설치되어 있는지 검사하여 설치 되어 있으면 그냥 애플리케이션을 실행하여 주고, 설치 되어 있지 않다면 Java Web Start 설치 파일을 다운 로드 받을 수 있는 페이지로 이동시켜 준다.

예제에서 나오는 소스의 경우에도 자바 스크립트를 약간만 알고 있다면 쉽게 이해할 수 있을 것이다.

예제 프로그램의 초기 화면은 다음과 같다.

 

 

위의 페이지에서 서명을 하지 않은 경우의 버튼을 클릭했을 경우 실행되는 프로그램과

그 프로그램에서 버튼을 클릭했을 경우 파일을 생성하면서 발생하는 에러 상황은 다음과 같다.

 

그러나, 서명을 한 경우를 클릭하면 다음과 같은 Security Warning 창이 뜨면서 보안 관련 제약 사항을 해제할 것인지 물어본다. 프로그램을 모든 권한을 가지면서 실행되기를 원한다면, Launch 버튼을 클릭하면 된다.

 

 

Launch 버튼을 클릭하면, 서명 되어진 프로그램이 뜨고 이 프로그램에서 파일을 생성하는 버튼을 클릭하면, 성공적으로 파일을 사용자의 홈 디렉토리에 생성한다.

 

설명이 부족한 부분은 첨부되어지는 소스 코드와 각종 파일들을 참고하면 쉽게 이해할 수 있을 것이다.

아주 간단한 프로그램이지만, 모든 기본적인 요소는 가지고 있다고 생각한다.

이전에 복잡하게 애플릿을 서명하여 사용하던 사이트에 적용한다면, 아주 깔끔하게 프로그램을

작성할 수 있을 것이라고 생각한다.

java_web_start_강좌.pdf
0.48MB
JavaWebStartDemo.zip
0.02MB
javawebstart.pdf
0.48MB
JavaWebStart_kanaloa.pdf
0.11MB