The pyramid Object

The pyramid object has a rectangular cross section and tapers to a point. The following statement will display a pyramid with the center of the rectangular base at (5,2,0), pointing parallel to the x axis with a base that is 6 high (in y), 4 wide (in z), and with a length 12 from base to tip:

pyramid(pos=(5,2,0), size=(12,6,4))

The pyramid object has the following attributes and default values, like those for cylinders: pos which is the center of the rectangular base (0,0,0), x (0), y(0), z(0), axis (1,0,0), length (1), color (1,1,1) which is color.white, red (1), green (1), blue (1), and up (0,1,0). Additional pyramid attributes:

height In the y direction in the simple case, default is 1

width In the z direction in the simple case, default is 1

size (length, height, width), default is (1,1,1)
mypyramid.size=(20,10,12) sets length=20, height=10, width=12

Note that the pos attribute for cylinder, arrow, cone, and pyramid corresponds to one end of the object, whereas for a box, sphere, or ring it corresponds to the center of the object.

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\comphy>python
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> from visual import *
>>> pyramid(pos=(5,2,0), size = (12,6,4))
<visual.primitives.pyramid object at 0x092CE840>
>>> pyramid(pos=(0,0,0), size = (1,1,1), color = (10,2,8))
<visual.primitives.pyramid object at 0x092CE7E0>
>>> pyramid(pos=(2,4,5), size = (5,14,7), color = (0,4,2))
<visual.primitives.pyramid object at 0x092CE870>
>>>



JavaTM Web Start



1. Applet. 3

1.1. Applet. 3

1.2. Signed Applet. 4

1.3. Java Plug-in. 4

2. Java Web Start. 5

2.1. 웹 서버 설정하기.. 6

2.2. JNLP파일 만들기.. 7

2.3. 애플리케이션 만들기.. 7

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

3. Contact Point. 12


1. Applet

1.1. Applet

애플릿(applet)이란 혼자 실행되지 못하고 다른 프로그램(보통은 웹 브라우저를 의미한다.)에 삽입(Embedded)되어져서 실행되는 자바 프로그램을 의미한다. 애플릿의 경우 웹 브라우저만 실행된다면, 이 세상 어느 곳에서도 실행되어질 수 있기 때문에 많은 인기를 누렸다. 즉, 프로그램의 설치 없이도 웹과 연결되어 있다면 웹 브라우저를 사용하여 프로그램을 실행시킬 수 있다. 애플릿에 대한 더욱 더 자세한 설명은 이 문서의 목적에 벗어나므로 생략하기로 한다. 애플릿에 대한 자세한 정보를 알고 싶다면, http://java.sun.com/applets/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 버튼을 클릭하면, 서명 되어진 프로그램이 뜨고 이 프로그램에서 파일을 생성하는 버튼을 클릭하면, 성공적으로 파일을 사용자의 홈 디렉토리에 생성한다.

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

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

이전에 복잡하게 애플릿을 서명하여 사용하던 사이트에 적용한다면, 아주 깔끔하게 프로그램을 작성할 수 있을 것이라고 생각한다.

3. Contact Point

나름대로 열심히 쓰긴 했는데, 역시 말로 설명하는 일은 어려운 것 같다.

이해가 안 가는 부분은 소스를 보면 더 쉽게 이해할 수 있으리라 생각한다.

이 글 중에 잘못된 부분이 존재하면 언제든지 메일을 보내주길 바란다.

또한, 글의 편의상 존칭을 생략했던 것을 이해해주시길 바랍니다.

또한, 어떤 질문도 환영합니다

Copyright © 2000 N’ser Community Inc.
Oh Kwang Shin. All Rights Reserved.

http://my.dreamwiz.com/raytrust/묻고 답하기 게시판을 이용하시면 됩니다.

김상욱의 웹스타트(webstart) 강좌

기본 : 머리말 | 개요 | 서버설정 | jnlp파일 | jnlp패키지

응용 :

1. 파라미터 동적(dynamically)으로 넘기기

2. 파라미터 한글화(국제화)

...

참고사이트 [설치]

머리말 :

안녕하세요? /^.^_ 애플릿(Applet)의 단점을 극복한 웹스타트 강좌입니다.

애플릿은 웹 브라우저에서 돌아가는 작은 프로그램으로서 인터넷 열풍과 함께, 막강한 기능에 훌륭한 보안모델을 갖추고 있어 큰 인기를 끌었으며, 세계적으로 700만개 사이트에서 이용 중이며, 아직도 많은 국내 학원에서 애플리케이션 제작과 함께 애플릿 제작을 교육하고 있습니다. 애플릿은 분명 인터넷 시대에 Java라는 언어가 대중들에게 큰 인기를 끌게 한 주역임에 틀림없습니다. 각종 브라우저에서도 기본적으로 지원하고 있지요. 음, 오늘 글빨이 조금 되는군요. |O.O|

하지만, 애플릿의 단점도 적지 않습니다. 바로 보안 모델과 브라우저 지원문제인데요.

보안모델 때문에, 애플릿은 sandbox라고 불리우는 영역(임시디렉토리라고 생각하셔도 좋습니다.)에만 접근할 수 있고, 애플릿을 다운로드한 서버 이외의 다른 서버나, 로컬 컴퓨터의 자원에는 접근할 수 없었습니다. 이를 위해서는 번거로운 applet 인증 절차를 받아야 하고, 인증받은 애플릿은 실행시 클라이언트에게 "이거 믿을 만 합니까? 웬만하면 예 하지 마시죠." 라는 메세지 창을 띄워 의심을 사게 하지요.

대부분 아무 생각없이 그냥 예 누르시죠? 제가 제 홈피에 이거 절라 멋찐 채팅입니다. 하고 하드를 포맷해버리는 애플릿을 돌려둔다면, 예 눌렀다가는 큰일나겠지요. ^_^; (그 잘 정리한 야한 것들... 다시 모으려면...음 제 얘기는 아닙니다. 전 그런 거 별로 안 좋아합니다 흠흠.) 그 뿐이 아니라 익스플로러용 인증을 받으면 타 브라우저에서는 통하지 않습니다. 넷스케이프에서 이용하도록 하려면 넷스케이프 인증을 받아야 하지요. 으음...

게다가 브라우저에서 지원하는 가상머신을 사용해야 하기 때문에 브라우저에서 지원하는 버전 이상의 애플릿을 제작할 경우 제대로 보이지 않을 경우가 많습니다. 그 이쁜 스윙(swing)을 놔두고, 한글자 칠 때마다 다시 repaint해서 짜증나는 textField를 사용하는 AWT 패키지를 사용해야 했지요. 뭐, Sun사를 미워하는 MS가 제때제때 자바가상머신을 버전업 해줄 리가 있나요. 2001년 현재 jdk가 1.3.1이 통용되고 있고, 수개월 전 1.4 베타가 나왔는데도 window의 가상머신은 java 1에 머물고 있습니다. 위임형 이벤트 모델도 마음대로 못쓰지요. 일부러 deprecated된 클래스 메소드를 사용해야 하기도 했습니다. 그 뿐입니까? MS가 window XP 부터는 가상머신을 기본지원하지 않기로 결정했답니다. windowXP로 700만 사이트의 애플릿을 보기 위해서는 귀찮게 어차피 플러그인을 설치해야 할 것입니다.

이를 위해서 자바플러그인(plug-in)이 발표되었습니다. os의 가상머신 대신에 다운로드받은 jre를 사용하도록 하는 것입니다. 음, 오광신님의 표현을 빌리면 발표될 당시에는 획기적인 일이었다고 하지만, 인증과 같이 사용할 수 없다는 단점이 있었습니다. 8메가가 넘는 jre도 클라이언트들이 설치해야만 하는 부담이 있었지요. (이건 웹스타트도 마찬가지이긴 합니다만...) 스윙 애플릿이라는 말 한 번쯤 들어보셨지요? 그 배포에 무척 번거로운 점이 있었습니다.

위와 같은 문제점을 해결하고자 Java Web Start라는 기술이 발표되었습니다. 웹에서 애플리케이션을 실행할 수 있게 된 것입니다. 그냥 바로 ASP가 되는군요. (active server page가 아닙니다. ㅡㅡ)클라이언트는 adobe나 flash shockwave처럼 플러그인으로 Java Web Start이 설치되면 됩니다. jre, 프로그램 업데이트, 인증 등이 한 큐에 해결되는 것이죠. jdk1.4에서는 기본으로 포함될 것입니다. 이것도 발표 당시에는 혁명으로 불리었는데, 알고 보면 그 정도까지는 아니고요. Active X처럼 맨 처음 접속시 시간이 다소 걸리고요.(웹스타트가 설치되어있지 않다면 설치하는데에도 시간이 걸리겠지요.) 그 다음부터는 캐시를 이용하기 때문에 매우 빠릅니다.

뭐....."한 큐"에 해결된다는 게 제일 큰 장점이죠. ^_^

개요: Sun사의 한글 문서입니다.

Java Web Start는 Java TM 기술 기반 응용프로그램을 위한 새로운 배포 기술입니다. 사용자가 웹에서 바로 응용프로그램을 시작하고 관리할 수 있도록 컴퓨터와 인터넷 사이를 이어주는 다리 역할을 합니다. Java Web Start는 클릭 한 번으로 응용프로그램을 쉽게 작동하고 복잡한 설치나 업그레이드 절차 없이도 항상 최신 버전을 실행할 수 있도록 해 줍니다.
지금까지는 웹을 통해 소프트웨어를 배포하려면 사용자가 웹에서 설치 관리자를 찾아 다운로드하고, 위치를 지정하여 설치 관리자를 실행해야 했습니다. 설치 관리자를 실행하면 설치 디렉토리와 전체, 일반 또는 최소 등의 설치 옵션을 묻는 메시지가 나타납니다. 이런 방식은 대개 시간이 많이 걸리는 복잡한 작업이며 소프트웨어의 새 버전이 나올 때마다 반복해야 합니다.

이와 반대로, HTML 기반 전자 우편 클라이언트와 일정, 경매 사이트 등의 웹 배포 응용프로그램은 설치와 사용이 매우 쉽습니다. 웹 브라우저는 전체 프로세스를 자동화했습니다. 복잡한 다운로드, 설치 및 구성 단계가 없으며 항상 최신 버전을 실행할 수 있습니다.

Java Web Start는 위에서 HTML 기반 응용프로그램처럼 모든 기능을 갖춘 응용프로그램과 동일한 이점을 제공합니다. Java Web Start는 웹용 응용프로그램 배포 솔루션입니다. HTML 기반 클라이언트 대신 이러한 모든 기능을 갖춘 응용프로그램을 사용하면 다음과 같은 여러 가지 이점이 있습니다.

워드 프로세서 및 스프레드시트와 같은 기존 응용프로그램과 호환되는 대화형 사용자 인터페이스를 사용합니다.
대역폭 요구 수준이 낮습니다. 클릭할 때마다 응용프로그램이 반드시 웹 서버에 연결될 필요가 없으며 이미 다운로드한 정보를 캐시할 수 있습니다. 따라서 연결이 느려도 더 나은 대화형 기능을 제공할 수 있습니다.
오프라인 사용을 지원합니다.
단점은 처음에 응용프로그램을 다운로드해야 한다는 것입니다. HTML 기반 응용프로그램은 최초 작동 비용이 매우 낮습니다. 일반적으로 웹 페이지는 몇 초 안에 볼 수 있습니다. Java TM 기술 기반 응용프로그램은 일반 모뎀 연결로 다운로드할 때 몇 분이 걸립니다. Java Web Start는 컴퓨터에서 로컬로 다운로드한 모든 파일을 캐시합니다. 따라서, 응용프로그램의 최초 작동 비용은 HTML 페이지에 비해 높지만 필요한 모든 자원을 로컬에서 사용할 수 있기 때문에 이후에 응용프로그램을 시작할 때는 거의 즉시 시작됩니다.
시작할 때마다 Java Web Start는 웹 서버를 확인하여 응용프로그램의 새 버전이 있는지 확인하고 자동으로 다운로드하여 시작합니다. 따라서 응용프로그램이 자동으로 업데이트됩니다. 복잡한 업그레이드 절차가 없습니다.

보안
Java Web Start는 Java 2 플랫폼의 최상위에 구축되어 포괄적인 보안 구조를 제공합니다. Java Web Start를 사용하여 시작한 응용프로그램은 기본적으로 파일과 네트워크에 대한 액세스가 제한된 환경("sandbox")에서 실행됩니다. 따라서, Java Web Start를 사용하여 응용프로그램을 시작하면 시스템 보안과 무결성이 유지됩니다.
응용프로그램은 시스템에 대한 무제한 액세스를 요구할 수 있습니다. 이 경우, Java Web Start는 응용프로그램을 처음 시작할 때 보안 경고 대화 상자를 표시합니다. 보안 경고는 응용프로그램을 개발한 공급업체에 대한 정보를 표시합니다. 공급업체를 신뢰하기로 선택하면 응용프로그램이 시작됩니다. 응용프로그램 제공처에 대한 정보는 디지털 코드 서명을 기반으로 합니다.

서버설정:

웹 스타트는 2001년 8월 현재 Windows 95/98/NT/2000, Solaris (SPARC & Intel editions), and Linux (RH6.1/x86) 등에서 지원됩니다. 그리고 서버는 어떤 standard web server라도 가능합니다.

자, 우선 웹 서버를 설정해야겠지요. 음. 확장자가 jnlp인 파일을 다운받으면, 클라이언트의 java 웹스타트를 구동시키도록 해주어야 합니다. 바로 mime type 설정이지요. 여기에

application/x-java-jnlp-file JNLP

항목을 추가시켜주어야 합니다. 웹 서버마다 조금씩 다른데 각 웹서버의 설정을 참고하세요. 몇 가지만 본다면, Apache에서는 mime.types 파일이 따로 있지요. 예를 들어 apache디렉토리가 /usr/local/apache이고, conf밑에 mime.types가 있다면, vi /usr/local/apache/conf/mime.types 를 보시면

# MIME type Extension
application/EDI-Consent
application/EDI-X12
application/EDIFACT
application/activemessage
application/andrew-inset ez
....

뭐 이런 항목이 있을 겁니다. 여기에

application/x-java-jnlp-file JNLP 를 추가하시면 되는 겁니다. 혹은 mime파일 건드릴 거 없이 httpd.conf 파일에 AddType하는 방법도 있습니다. 저장하시고서, apache를 재구동 시켜주어야 겠지요.

tomcat은 web.xml을 열어서 MIME type 지정하는 부분에 아래처럼

<mime-mapping>

<extension>

jnlp

</extension>

<mime-type>

application/x-java-jnlp-file

</mime-type>

</mime-mapping>

추가시켜주시면 되고요. 확장자 jnlp에 application/x-java-jnlp-file을 붙이고 있지요?

resin은 http://www.caucho.com에 가보시면 아시듯이.(co.kr이 아닙니다...co.kr누르면 무슨 중대부속초등학교 1회 동창회가 나옵니다....ㅡㅡ) 아래처럼 바꾸시고.

<web-app id='/'>

<mime-mapping extension='.jnlp'
mime-type='application/x-java-jnlp-file'/>

</web-app>

물론, tomcat 혹은 resin과 apache를 연동시키셨으면, 그냥 apache만 설정해두셨으면 됩니다. 끝.

jnlp파일:

전체 문법입니다.

<?xml version="1.0" encoding="utf-8"?>
<!-- JNLP File for SwingSet2 Demo Application -->
<jnlp
spec="1.0+"
codebase="http://javaweb.eng.com/jaws/apps"
href="swingset2.jnlp">
<information>
<title>SwingSet2 Demo Application</title>
<vendor>Sun Microsystems, Inc.</vendor>
<homepage href="docs/help.html"/>
<description>SwingSet2 Demo Application</description>
<description kind="short">A demo of the capabilities of the Swing Graphical User Interface.</description>
<icon href="images/swingset2.jpg"/>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.3"/>
<jar href="lib/SwingSet2.jar"/>
</resources>
<application-desc main-class="SwingSet2"/>
</jnlp>

아이구 많군요. 음 저걸 다 치실 필요는 없고요. 복사하신 다음에 몇몇 부분만 고쳐주시면 됩니다. 뭐... title이라든지... vendor 이런 거 알아서 고치시고요. (안고치면 화면에 뜹니다. -_- )

음 맨 처음에 jnlp의 spec이 1.0+로 되어있군요. 1.0 버전 이상의 jnlp 스펙이군요. 글쿤.

codebase 어엇 중요하지요. application이 실행되는 url이고요.

href 음 브라우저 url에서 jnlp파일을 읽었다면? 얘는 필요 없겠습니다만... 나중에 cgi나 jsp 등을 이용해서 jnlp파일을 동적으로 생성해줄 때에는 이 href를 빼주셔야 되겠습니다. mimeType을 jsp쪽이 아니라 웹스타트쪽으로 바꾸어 주려는데 도로 jnlp파일로 읽으면 안되겠지요.

음음 죽죽 필요없고. icon은 에, 웹스타트는 한 번 다운로드 받으면, 브라우저 없이도 바로 실행할 수 있습니다. 웹 스타트 설치할 때 작업표시줄이랑 바탕화면에 바로가기 아이콘이 남거든요. 그렇게 실행했을 때,(offline 실행) 거기에 뜨게 할 아이콘입니다. 지정 안하시면....... 안하시면...... 뻘건 동그라미(웹스타트 아이콘)이 설정됩니다... 그 밑에 offline-allowed는 설명할 필요 없겠군요.

그리고.....information 끝나고...

security 오호. 이건 인증걸 때 필요한 부분으로 일반적으로 그냥 위처럼 all-permissions(모든 권한)로 놓습니다.

full access to the client machine and local network라는 거지요. 파일접근만 되게 하라! 등 개별적으로 지정할 수도 있나보지요?

히야. 그 다음이 가장 중요한 resource부분입니다. 많은 초보님들이 의외로 이 부분을 정확히 지정을 안해서 resource를 찾지 못하는 에러 메시지를 보시더군요. 보시면 j2se의 버전을 지정하고 있는데요. 음, 웹스타트는 사용자 시스템에 jre가 깔려있지 않을 경우 자동으로 다운로드 받아서 자바애플리케이션을 실행합니다. 1.3 으로 되어 있으면, 1.3이 깔려있으면 다운로드 받지 않고 1.3으로 실행하겠지요. 음 +키나 *키가 쓰일 수 있습니다.

<j2se version="1.2.2 1.3.*">

이정도로 되어있으면 되겠군요.

<j2se version="1.3" initial-heap-size="64m"/>

<j2se version="1.2"/>

<j2se version="1.4-beta" href="http://java.sun.com/products/autodl/j2se"/>

등도 가능합니다.

그 밑에 jar 파일 위치 자알 지정해주시고요. nativelib를 포함하는 jar파일은 아래처럼.

<nativelib href="lib/windows/corelib.jar"/>

혹은

<resources os="SunOS" arch="sparc">
<nativelib href="lib/solaris/corelibs.jar"/>
</resource>

그 다음은 메인클래스와, 애플리케이션의 인자나 애플릿의 파라미터 지정부분입니다.

위에서는

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

이렇게 끝났지만,

만약 SwingSet2에 argument들을 주고 싶다면. (아시죠? main메소드의 인자 String[] args)

<application-desc main-class="Main">
<argument>arg1</argument>
<argument>arg2</argument>
</application-desc>
이렇게 해주시고.

애플릿의 경우는

<applet-desc
documentBase="http://..."
name="TimePilot"
main-class="TimePilot.TimePilotApp"
width="527"
height="428">
<param name="key1" value="value1"/>
<param name="key2" value="value2"/>
</applet-desc>

이렇게 하시면 됩니다. 메인 클래스에 .class 확장자가 없지요?

xml이니까. / 조심해서 쓰시고요. 쩝. / 잘못 붙여서 저 하루 삽질했습니다.

jnlp문법 끝났군요.

jnlp패키지:

음 자바웹스타트 까시면 그 디렉토리에 javaws.jar파일이 있습니다. 그 안에 jnlp 패키지가 있지요.

유용한 클래스들이 있는데 아직 사용은 못해봤군요. 이번 프로젝트에서 사용해 봐야겠습니다. Sun사의 문서에 따르면,

애플릿의 AppletContext 처럼 이용하게 해주는 BasicService 클래스,

시스템의 클립보드를 이용하는 ClipboardService 클래스.

캐쉬여부를 결정하는 DownloadService 클래스.

File[Open/Save]Service클래스.

PrintService 클래스.

등등 유용한 클래스가 많네요.

패키지 다운로드 : http://java.sun.com/products/javawebstart/download-jnlp.html

1. 파라미터 동적(dynamically)으로 넘기기

2. 파라미터 한글화(국제화)

참고 사이트 :

Sun사 공식 페이지 - 웹스타트 다운로드 및 개발자 정보 페이지 (영문)

개발자 가이드 페이지

jnlp 파일 전체 문법 anchor

Sun사 웹스타트 포럼 - 개발자들의 각종 질답을 볼 수 있는 페이지 (영문)

Venus Application Publisher for JNLP - jnlp 제작 툴

광신님 홈페이지 - 거의 국내 유일의 webstart정보를 담고 있지요.

RIA(Rich Internet Application)를 알려주다!

RIA란 데스크톱 응용 프로그램의 특징과 기능을 가지는 웹 응용 프로그램
일반적으로 페이지의 새로 고침 없이 한 페이지에서 동작하는 웹 응용 프로그램

웹 2.0이 인터넷 기술의 새로운 이슈로 등장하고 있다. 웹 2.0과 관련된 여러 기술들 중 RIA는 웹 2.0을 완성하기 위한 사용자와의 접점으로서 많은 주목을 받고 있다.

백문이 불여일견! 우선 RIA로 구현된 사이트를 간단히 살펴보도록 하자.
RIA가 적용된 첫 번째 사례는 2002년 TravelClick(
http://www.travelclick.net)에 의해 제작된 BroadMoor 호텔(http://www.broadmoor.com)의 OneScreen이라는 예약 시스템이다.


[브로드무어 호텔의 OneScreen 예약 시스템]

플래시와 콜드퓨전(CFML)로 만들어진 이 시스템은 기존의 5단계 페이지를 거쳐서 진행되었던 예약 업무를 플래시의 화려한 그래픽 사용자 인터페이스를 이용하여 한 페이지로 구현한 것이었다. 이것은 그 당시까지의 여러 페이지를 거쳐 시스템을 구현하던 웹 사용자 인터페이스의 새로운 전환을 가져오게 한 사건이었다.

국내 사례를 한번 살펴보자. Adobe의 플래시(flash)를 이용하여 구현된 CGV 영화관(http://www.cgv.co.kr)의 예매 서비스로 페이지의 전환 없이 한 페이지에서 영화 정보 확인 및 예매를 할 수 있다.


[CGV 극장 영화 예매 시스템]

사용자 인터페이스의 향상과 더불어 사용의 편리성까지 제공할 수 있는 것이 바로 RIA의 가장 강력한 힘인 것이다.


RIA를 구현하려면
RIA를 구현하기 위해 다양한 웹 브라우저에서 동작하면서 개발자의 편의를 제공하려는 시도는 여러 업체들에 의해 지금도 계속 중이다. RIA를 구현할 수 있는 기술들을 살펴보면 다음과 같다.

  • AJAX/DHTML: 자바 스크립트와 XML을 이용한 비동기 호출을 사용하는 방식으로 웹 2.0에서 많은 주목을 받고 있는 기술의 조합이다. 현재 많은 업체에 의해 AJAX를 쉽게 개발할 수 있도록 툴 킷들이 공개되고 있다.
  • 플래시(Flash): Adobe(이전 Macromedia)의 대표적인 벡터 방식의 그래픽 환경으로 현재 대부분의 브라우저에서 동작한다. 화려한 사용자 인터페이스를 구현하고, 액션스크립트(ActionScript)를 이용하여 비즈니스 로직을 구성할 수 있다.
  • 플렉스(Flex): Adobe가 소개한 엔터프라이즈 개발을 위한 플랫폼으로 플래시의 SWF로 그 결과물을 출력하나 플래시와는 완전히 다른 새로운 기술이다.
  • 오픈라즐로(OpenLaszlo): Laszlo System에 의해 시작된 오픈소스 플랫폼으로 RIA 구현을 위해 사용할 수 있으며, LZX라는 새로운 인터페이스 언어를 사용한다. 그 결과물은 플래시 플레이어에서 동작하는 SWF 파일로 출력된다.
  • WPF: Microsoft에서 새롭게 소개하는 차세대 벡터 방식의 그래픽 환경으로WPF/E를 활용하여 RIA를 구현할 수 있으며, XAML과 Jscript의 기반한 프로그래밍 모델을 가진다. 
  • XUL: XML 기반의 사용자 인터페이스 마크업 언어(User Interface Markup Language)로 모질라(Mozilla) 기반의 웹 브라우저에서 HTML/XHTML을 대신하여 사용할 수 있다. 
  • 액티브X(ActiveX): 윈도우 응용 프로그램을 웹 페이지상에 실행할 수 있는 기술로 마이크로소프트에 의해 소개되었다. 인터넷 익스플로러(IE)에만 동작하는 단점을 가지고 있다. 또한 다른 방식의 RIA 구현과는 다르게 일반적으로 클라이언트에 설치되어 실행하기 위해서는 공인 인증서를 발급(유료)받아야 하는 번거로움이 있다. 물론 브라우저 설정에 따라 이런 과정 없이 설치 및 실행할 수 있으나 클라이언트의 자원을 제어할 수 있는 보안의 취약성이 큰 문제를 발생하기도 한다. 
  • 스마트클라이언트(SmartClient): Microsoft의 닷넷(.NET) 기반의 윈도우 프로그램을 웹 상에서 실행할 수 있는 기술이다. 보안설정과 클라이언트에 닷넷 프레임워크의 설치가 필수이다. 
  • 자바 애플릿(Java applet): 자바 응용 프로그램을 웹 페이지 상에서 실행할 수 있는 기술로 오래 전부터 사용되었다. 다양한 클라이언트의 제어를 할 수 있는 장점에도 불구하고, 느린 속도와 대체 가능한 기술들에 의해 그 사용이 점점 줄어들고 있는 상황이다. 
  • 자바 응용프로그램(Java application): 자바 웹 스타트(Java Web Start)는 자바 응용 프로그램 자체를 웹을 통해 클라이언트에서 실행할 수 있도록 허용한다. 웹을 통해 자바 응용 프로그램을 실행하는 방식으로 RIA를 구현할 수 있다.

이들 중 현재 주류를 이루는 RIA 기술로는 HTML 기반의 RIA 구현에 주로 사용하고 있는 AJAX/DHTML과 화려한 사용자 인터페이스를 구현할 수 있는 플래시가 있다. 새로운 RIA 시장을 선도하기 위해 경쟁적으로 펼치고 있는 새로운 개발 툴의 출시는 정말 흥미진진하게 보인다. 어떤 RIA 기술이 일반 사용자들에게 매력을 줄 것인지, 어떤 개발 툴이 가장 많이 선택 받을지 관심을 가지고 지켜보도록 하자.


RIA(Rich Internet Application)란?
Rich Internet Application(RIA)이란 전통적인 데스크톱 응용 프로그램의 특징과 기능을 가지는 웹 응용 프로그램이다. 웹 응용 프로그램의 많은 장점에도 불구하고 웹 초창기부터 서버/클라이언트 환경의 윈도우 프로그램에 비해 사용자 인터페이스가 부족하다고 지적되어왔다. 이런 단점을 극복하기 위해 Macromedia(현재 Adobe)는 2002년 리치 인터넷 애플리케이션(RIA)을 처음으로 소개하였다.

RIA를 한 마디로 표현한다면 ‘한 페이지로 구현된 웹 응용 프로그램’이라 할 수 있다. 실제 많은 비즈니스 로직이 존재하지만 사용자는 한 페이지를 이용하여 모든 기능을 이용하게 된다. 일반적인 웹 페이지의 페이지 이동과 새로 고침의 깜박임 없이 모든 내용의 확인과 기능을 이용할 수 있는 RIA. 매력적이지 않은가?


왜 RIA인가?
그러면 RIA를 왜 사용하는 것일까? 그 첫 번째로 우리는 웹 응용 프로그램이 가지는 한계점에 대해서 먼저 이해해야 한다. 전통적인 웹 응용 프로그램의 모델은 서버를 중심으로 모든 처리가 수행되고, 사용자의 웹 브라우저를 통해 그 결과를 출력하는 구조로 이루어진다. 우리는 이를 씬 클라이언트(thin client)라 부른다. 즉 클라이언트는 단순히 결과의 디스플레이에만 사용하는 것이다. 그렇기 때문에 서버에서 많은 작업 프로세스가 있는 경우 사용자는 결과가 처리될 때 무작정 기다려야만 하고, 서버의 처리시간이 길어지는 경우 서버와의 통신이 끊어져 더 이상 프로그램을 이용할 수 없는 상황이 발생할 수 있다. 이런 단점을 보안하고, 사용자 인터페이스를 향상하기 위한 시도가 바로 RIA인 것이다.

그렇다면 RIA를 사용하여 얻을 수 있는 장점이 과연 무엇일까?

대표적으로 리치(rich)한 클라이언트 사용자 인터페이스 제공이 있다. RIA 방식으로 구현하면 사용자에게 HTML 위젯(widget)을 사용하는 효과 이상의 보다 그래픽적인 사용자 인터페이스를 공급할 수 있다. 예를 들어, 웹 페이지에서 드래그 & 드롭(drag & drop)이 가능하고, 슬라이드 바를 이용하여 데이터 변경이 가능하게 된다. 또한 클라이언트에 비즈니스 로직 부분을 구현하여 복잡한 계산을 서버가 아닌 클라이언트에서 수행할 수 있다. 그렇기 때문에 일반적으로 보다 향상된 서버의 응답을 구현.할 수 있는 것이다.

이처럼 RIA를 사용하면 사용자 인터페이스의 향상뿐만 아니라 성능 향상의 장점을 가질 수 있다. 즉 RIA에서는 서버와 클라이언트 사이의 부하의 분산이 가능하게 되어 서버의 성능 향상에 도움을 주는 것이다. 또한 비동기 통신(asynchronous communication)을 이용하여 사용자에게 보다 빠른 응답속도를 보이는 것처럼 구현할 수 있다. 사용자가 클릭 하였을 때 그 결과를 미리 비동기 통신으로 저장한 뒤 바로 보여줄 수 있으므로 사용자가 느끼는 체감 속도는 상당히 빨라지고, 서버의 응답 이전에 다른 작업을 수행할 수 있다. 이는 구글 맵(Google Maps)에서 쉽게 확인할 수 있는 방식으로 사용자가 지도를 드래그하면 바로 처리가 되는 것을 확인할 수 있다.


[구글 맵 서비스 (http://maps.google.com)]


마지막으로 네트워크 효율성이 있다. 전통적인 웹 응용 프로그램의 방식은 새로운 결과를 표현하기 위해 전체 페이지의 정보를 전달하고 그 결과를 클라이언트에 다시 보여준다. 하지만 RIA 방식을 이용하면 해당 페이지에서 실제 필요한 일부분의 데이터만 서버로 전달하고, 그 결과를 클라이언트 페이지의 일부 영역에 반영할 수 있기 때문에 네트워크 자원의 사용량도 감소하는 것이다.

더불어 RIA 방식은 초기 프로그램 구동에 시간이 소요된다는 단점이 있지만, 반면에 프로그램 설치가 필요 없다는 장점을 갖고 있다. 그렇기 때문에 사용자들은 어디에서나 쉽게 사용할 수 있고, 프로그램의 버전이 올라가더라도 쉽게 배포할 수 있는 것이다.

이처럼 RIA는 사용자 인터페이스 개선 및 성능 향상이라는 두 마리의 토끼를 잡을 수 있는 현재 진행형의 기술이다. 물론 개발의 난이도가 높아지는 문제가 있지만 사용자들은 이런 개발자들의 고충은 모른다. 자신들이 사용하기 쉽고, 매력적인 프로그램을 선택할 것은 뻔한 이야기라는 것이다.

RIA의 역사
RIA는 2002년 Macromedia에 의해 소개되었지만 개념적으로 유사한 내용들은 이전에도 있었다. 1998년 Microsoft는 Remote Scripting을 소개하였고, 2000년 Forrester Research는 X Internet을 소개하였다. 더불어 리치 클라이언트, 리치 웹 클라이언트 또한 RIA와 유사한 기술적인 분류로 이야기할 수 있다.

그러던 중 2002년에야 비로서 RIA의 실제 적용사례가 소개된다. 앞서 이야기한 플래시와 콜드퓨전(CFML)을 이용한 TravelClick의 Broadmoor 호텔의 OneScreen이라는 예약 시스템이었다.

2004년에는 Macromedia는 플렉스를 엔터프라이즈 개발자를 위한 새로운 플랫폼으로 소개하였다. 기존 플래시가 가졌던 단점을 해결하고 새로운 RIA 개발 환경을 위해 새로운 서버 제품으로 출시하였다. 현재 2.0 버전까지 출시되었으며, 국내외 여러 적용 사례들이 있다.

이러던 중 RIA는 2005년 구글에 의해 사용자들에게 강렬한 인상을 남기게 된다. 바로 구글 맵(http://maps.google.com) 서비스를 통해 웹 지도에서 드래그, 줌 인/줌 아웃이 구현하였고, 부드러운 화면 전환 및 스크롤을 제공하였다. 이는 마치 윈도우 프로그램을 사용하고 있다는 착각을 가지게 한 아주 충격적인 사건이었다.

이후 웹 2.0에 대한 소개와 실제 구현 사례들을 통해 RIA는 웹 비즈니스의 중요한 요소로 성장하였다. ‘사용자의 눈을 만족시키지 못하는 서비스는 성공하기 힘들다’는 이야기처럼 지금도 사용자들에게 새로운 모습을 보여주기 위하여 여러 웹 사이트들이 RIA를 채택하고 발전을 위한 노력을 계속하고 있는 것이다.

도스 환경에서 윈도우 프로그램을 처음 사용하였을 때의 GUI 변화에 대한 충격을 기억하는가? 내년에는 윈도우 XP에서 윈도우 Vista로의 새로운 GUI 환경 변화가 우리를 기다리고 있다. 또 얼마나 많은 충격과 변화가 일어날지 아직까지는 느낄 수 없을 것이다. 하지만 분명 변화는 이미 시작되었다는 것이다.

사용자에게 보다 멋진 GUI 환경을 제공하려는 시도는 운영체제, 웹의 구분 없이 계속 될 것이다. 이와 함께 사용자 경험에밀접한 관계가 있는 RIA는 향후 웹 비즈니스 구현에 가장 중요한 기술로 거듭 자리매김을 할 것이다. 지금의 RIA는 과도기의 모습이다. AJAX와 같은 기술은 잠시 스쳐 지나가는 하나의 흐름일 뿐이다. 앞으로 웹 환경은 벡터 그래픽 환경이 기본이 되고, 3D를 이용한 실제 체험이 가능한 모습으로 변화할 것으로 필자는 확신한다. 쇼핑몰을 이용하면서 자기의 3D 캐릭터에 직접 옷을 입혀본 뒤 제품 구매를 선택하고, 다양한 각도에서 실제 물건 보듯이 살펴볼 수 있는 서비스가 바로 눈앞에 있는 것이다. 여러분들은 RIA와 웹의 미래 모습이 어떨 것이라 생각하는가?

(작성자: 네오비스)

'기본 카테고리' 카테고리의 다른 글

JavaTM Web Start  (0) 2007.03.02
김상욱의 웹스타트(webstart) 강좌  (0) 2007.03.02
자바 웹 스타트 구축하기  (0) 2007.03.02
자바 웹 스타트에 대한 소개  (0) 2007.03.02
사이버 Web Design 강좌  (0) 2007.03.01

자바 웹 스타트 구축하기

순서는 먼저 배포할 자바 애플리케이션 프로그램을 만들고 이 프로그램을 로딩할 JNLP 파일을 만든다. 마지막으로 JNLP 파일을 링크할 HTML 문서를 작성하면 된다.
 

1. 웹 스타트 응용 애플리케이션 작성

기본적으로 웹 스타트 응용프로그램은 JAVA2 개발 방법론을 사용하여 작성된다. 하지만 이러한 응용프로그램을 웹 스타트와 같이 네트워크를 통한 배포환경에서 사용하려면 보안 및 공유환경으로 인해 다음과 같은 몇가지 고려할 사항이 있다.

  • 자바 class 파일들은 다운로드가 용이하도록 모두 JAR 파일로 묶어야 한다.
  • 그림 파일이나 추가적인 파일 및 자원을 사용한다면 이 모든 것 역시 JAR 파일로 묶어야 한다.
  • SandBox 보안 모델을 사용함으로써 다음과 같이 Local 시스템 자원을 사용하지 못한다.
    - local Disk를 사용하지 못한다.
    - Network 자원은 자신이 다운로드된 서버만이 사용가능하다.
    - Security Manager를 설치할 수 없으며 시스템 프로퍼티를 제한적으로 사용한다.
  • 이러한 보안상 제약점을 넘으려면 signedJAR 파일을 이용하여야 한다.

1.1 JAR 파일 생성

먼저 소스파일을 컴파일 한후 해당 클래스 파일들을 jar 파일로 생성한다.

prompt> jar cvf Calculator.jar Calculator.class
위와 같은 형태로 JAR 커맨드를 이용하여 .jar 파일로 묶게 되면 배포할수 있는 .jar 파일이 생성이 되는데 이러한 프로그램이 클라이언트 시스템에 접근할수 있도록 서명을 해줘야 한다.

J2SE가 설치된 디렉토리의 bin 폴더를 살펴보면 keytool 과 jarsigner 라는 프로그램이 있다. 이 두개의 프로그램은 JDK 1.2 이상 버젼에는 포함되어있는 툴이다.
keytool 은 공개키 생성 프로그램이다. 여기에 지정된 옵션은 다음과 같다.

- genkey : 키생성 , alias : 키별칭 , keystore : 저장할 키, keypass : 키의 비밀번호 ,dname :키 문자열 ,storepass :저장 비밀번호

[root@s2clinux JavaWebStart]# keytool -genkey -keystore notepad -alias SignedNotepad
Enter keystore password: ***** What is your first and last name? [Unknown]: juhui park What is the name of your organizational unit? [Unknown]: s2clinux
What is the name of your organization? [Unknown]: s2clinux
What is the name of your City or Locality? [Unknown]: chonju
What is the name of your State or Province? [Unknown]: chonbuk
What is the two-letter country code for this unit? [Unknown]: kr
Is CN=juhui park, OU=s2clinux, O=s2clinux, L=chonju, ST=chonbuk, C=kr correct? [no]: y
Enter key password for <SignedNotepad>
(RETURN if same as keystore password):
[root@s2clinux JavaWebStart]#
 
그럼 생성된 keystore 파일과 그 파일에 생성된 키를 통해 자체 signed 인증서를 생성하고 확인한다.
  [root@s2clinux JavaWebStart]# keytool -selfcert -alias SignedNotepad -keystore notepad
Enter keystore password: *****
[root@s2clinux JavaWebStart]# keytool -list -keystore notepad
Enter keystore password: *****
Keystore type: jks
Keystore provider: SUN
Your keystore contains 1 entry
signednotepad, Jul 28, 2003, keyEntry,
Certificate fingerprint (MD5): *6:5A:AF:78:CD:49:D3:F4:24:BB:EC:90:2E:E8:C3:1*
[root@s2clinux JavaWebStart]# 

최종적으로 만들어진 인증서를 통해 다음과 같이 jarsigner를 이용하여 jar 파일에 sign한다. 암호를 물으면 notepad 생성시 사용돈 암호를 입력한다.

jarsigner -keystore notepad Notepad.jar SignedNotepad
Enter passphrase for keystore : 

이렇게 하여 만들어진 signed-jar 파일인 Notepad.jar는 최종적으로 웹 스타트를 통해 배포할 수 있는 파일이 되었다. 웹 스타트를 통해 배포되는 파일이 로컬 자원이나 네트워크 자원을 이용하려면 모두 이렇게 singed-jar 를 만들어야 한다.

그럼 이 파일이 어떻게 배포될지를 기술하는 xml 문법으로 이루어진 jnlp 파일을 작성하고 웹서에 올려보도록 한다.

2. JNLP 파일 설정

<?xml version="1.0" encoding="utf-8"?> 
<!-- JNLP File for Calculator Application -->
<jnlp spec="0.2 1.0"
codebase="http://s2clinux.chonbuk.ac.kr/seminar/summer2003/JavaWebStart"
href="SignedNotepad.jnlp">
<information>
<title>s2clinux</title>
<vendor>Sun Microsystems, Inc.</vendor>
<homepage href="http://s2clinux.chonbuk.ac.kr/"/>
<description>Java Web Start Demo Program</description>
<description kind="short">JavaWebStart Calculator Program ver1.0</description>
<offline-allowed/>
</information>
<security> <all-permissions/>
</security>
<resources> <j2se version="1.4+"/>
<jar href="Notepad.jar"/>
</resources>
<application-desc main-class="Notepad"/>
</jnlp> 

- jnlp tag : 이 내용이 jnlp에 관련된 것임을 기술하고 있으며 <jnlp ...> </jnlp>로 닫힌다.
- spec : jnlp 버젼을 나타낸다.
- codebase : 이 문서의 기본 URL을 정의한다.
- href : 이 문서의 이름을 정의한다.
- information : 프로그램에 대한 설명을 정의하고 있다.
- security : 프로그램이 실행될때 로컬 자원에 대한 권한을 기술한다.
- resources : j2se 버젼 및 실행환경에 대한 정보를 담고 있다.
- application-desc : 프로그램 실행시 필요한 사항을 기술하며 main-class 는 반드시 지정되어야 할 속성으로 자바 프로그램의 메인 메소드가 있는 클래스를 지정한다.

이제 jar 파일과 jnlp 파일을 웹 서버의 배포 디렉토리에 위치 시켜 놓는다.

 

 

 

자바 웹 스타트에 대한 소개

자바 웹 스타트는 2001년 초에 소개된 기술로 한번 클릭으로 자바 애플리케이션을 쉽게 수행 시킬수 있는 환경으로 자바가 추가하던 사상 즉 "언제 어디서나 같은 코드로서 쉽게 접근하고 강력한 기능을 발휘하는 언어" 라는 강점을 유감없이 발휘할수 있는 기술이다.
자바 웹 스타트는 기존의 웹 환경의 한계점을 뛰어넘어 네트웍을 통해 자유롭게 풍부하고 강력한 응용프로그램을 실행시킬수 있으며, 버젼 및 배포 관리를 자동으로 수행하는 JNLP(Java Network Lanunching Protocol)을 기반으로 하여 관리함으로써 기존의 자바 애플릿등의 보안상의 단점을 해결하는 새로운 개념의 자바 배포 기술이다.

자바 웹 스타트의 구조


<그림 1 : 자바 웹 스타트 아키텍처>

자바 웹 스타트의 장점

  • 자바 웹 스타트 기술은 자바 플랫폼에서 사용되도록 디자인 되었기 때문에 프로그램이 한 번 만들어지면 웹 서버를 통해 배포되어 윈도우,리눅스,솔라리스등 많은 플랫폼에서 사용할 수 있다.
  • 자바 웹 스타트 기술은 J2SE의 여러 버전을 지원한다. 따라서 J2SE 특정 버전의 플랫폼을 요구하는 프로그램을 따로 실행시킬수 있고 여러 버전의 자바 프로그램을 동시에 실행할수 있다.
  • 자바 웹 스타트 기술은 웹 브라우저와는 별개로 프로그램을 실행할 수 있다. 웹 브라우저를 통해 작동되는 것이 아니기 때문에 오프라인 상태에서도 프로그램을 실행할수 있다.
  • 자바 웹 스타트 기술은 자바 플랫폼의 보안 기능을 그대로 갖고 있다. 이 프로그램은 기본적으로 실행되는 컴퓨터의 디스크와 네트워크 자원에 대해 샌드박스 보호 환경에서 실행된다. 물론 사용자가 원하지 않는 자원에 대해 안전하게 대처한 다음 사용할 수 도 있다.
  • 자바 웹 스타트 기술은 웹 브라우저와 많은 플랫폼에 독립적인 성격을 갖고 있다. 따라서 모든 브라우저에서 사용 가능하고 짧은 시간안에 J2SE 플랫폼을 지원하는 플랫폼에 이식해 사용할 수 있다.
  • 자바 웹 스타트 기술을 이용한 프로그램은 내부적으로 캐시가 된다. 따라서 한 번 다운로드 된 프로그램은 내 컴퓨터에 설치된 프로그램과 같이 실행할 수 있다.

Thin Client 와 Rich Client 의 특징을 통해 본 자바 웹 스타트

Thin Client란 Web Browser와 같이 이미 사용자 환경에 Client가 설치되어 있고, 서버로부터 가벼운 HTML과 같은 화면 정보를 받아 화면을 매번 그려주는 체계를 말한다.

- 가벼운 클라이언트 환경 (web browser) 장점

. Browser 만 있으면 언제 어디서나 가볍게 화면을 접속하여 볼 수 있다.

. 화면 자체를 간단히 HTML 로 구성할 수 있다.

. Hyper link 를 이용하여 화면 Navigation을 할 수 있다.

. SessionLess 처리를 이용하여 짧은 트렌젝션을 많이 처리하는데 적합하다.

. 문서 등을 보여주는것에 (Browsing) 효과적이다.

- 가벼운 클라이언트 환경 (web browser) 단점

. HTML의 한계 때문에 복잡한 UI 또는 기능성 있는 입출력 구조를 처리하기 어렵다.

. JavaScript 나 Dynamic HTML은 Language 자체가 유동성이 많고 환경 오류의 가능성이 높다.

. JavaScript 또는 Dynamic HTML은 완전한 Language 또는 객체 지향적 Language가 아니라 유지 보수성 및 생산성이 떨어진다.

. 전송된 자료가 쉽게 Browser를 통하여 노출되기 때문에 보안성이 떨어진다.

. HTML의 한계 때문에 다량의 자료 처리가 쉽지 않다.

. 옵션 및 환경이 Browser에 의존적이기 때문에 사용자 환경마다 처리될 때도 있고 처리가 안 될 수도 있다.

. 트렌젝션 마다 Image + HTML + Data 가 함께 내려옴으로써 처리 속도가 저하된다.

Rich Client(강력한 기능의 클라이언트) 란 기존의 C/S 시스템 또는 전용 Browser 나 Windows 프로그램과 같이 특정 업무에 맞도록 화면을 개발하고, 메뉴, 아이콘, 테이블, 트리,드래그드랍등 다양하고 강력한 사용자 화면과 인터페이스를 구성하는 것이다.
Browser와 같이 이미지 디자인 같은 작업이 별도로 필요 없는 대신에 Excel 처럼 필드 위주의
강력한 기능을 구현할 수 있는 것이 특징이다.

- Rich Client의 장점

. 강력하고 기능성 있는 GUI 를 제공한다. (Spread Sheet, DeskTop, Tree, Drag and Drop 등등)

. Browser에 의존하지 않고 개인 PC의 화면에서 바로 실행 가능하다.

. Remote 환경 뿐만 아니라 Local 환경, DB, Network 처리, File 처리 등이 자유롭다.

. 서버와 데이타 만 주고 받기 때문에 속도가 빠르다.

. 다량의 데이타를 local 과 서버 작업으로 분산 처리가 가능하기 때문에 다량 처리에 적합하다.

. Browser 의존적이 아니기 때문에 PC 자체의 환경 문제가 적다.

. 객체 지향적 모델로 GUI를 만들기 때문에 유지 보수성이 뛰어 나다.

. 전송되는 자료가 쉽게 노출되지 않으므로 보안성이 우수하다.

- Rich 클라이언트의 단점

. 프로그램 설치가 필요하여 초심자가 설치할 시에 오류가능성이 있다.

. 설치된 프로그램이 다른 요인으로 손상될 수 있다.

. 반드시 모듈이 설치된 PC에서만 작동한다.

. 프로그램 변경 또는 Version Up이 발생하면 다시 배포해야 한다. (Version 문제 가능성)

. 대부분 MicroSoft Windows 환경이기 때문에 Windows 버젼 및 환경 때문에오류 발생 가능성이 있다.

Java Web Start는 Thin Client와 Rich Client의 장점을 동시에 수용하고 각각의 단점을 서로 보완할 수 있도록 통합시킨 기술이다.

- Java Web Start 의 특징 : Java Web Start 는 Thin Client 의 장점과 Rich Client의 장점을 통합한 기술이다.

. web 환경과 같이 언제 어디에서든 손쉽게 사용할 수 있다. (아이콘 클릭으로 시작)

. plug-in 이 자동으로 설치되며 일단 설치되면 다시 설치할 필요 없다. (웹으로 시작 가능)

. Application 모듈이 local 에 cache 되어 자동으로 버젼을 체크하여, download 시간이 대폭 축소된다.

. C/S 환경이 갖고있는 강력하고 다양한 GUI 기술이 Swing을 통하여 구현되며,독립 데스크 탑 환경으로 갈 수 있다.

. Web Version 이나 Client Server 버전을 따로 개발할 필요가 없다. Web Start 가 두개의 환경을 단일 코드로 지원한다.

. JavaScript, DHTML 등에 의존하지 않고, 독립환경의 단일 기술로 이루어짐으로서 오류 가능성이 적다.

. 결국 손쉽게 접근할 수 있는 Thin Client 의 장점과 강력한 GUI 및 작업 기능의Rich Client 의 장점을 동시에 구현하는 것이다.

 

* Web 강좌 * Web 강좌 * Flash 3d * Flash 3d

The cone Object

The cone object has a circular cross section and tapers to a point. The following statement will display a cone with the center of its circular base at (5,2,0), pointing parallel to the x axis with length 12; the wide end of the cone has radius 1:

cone(pos=(5,2,0), axis=(12,0,0), radius=1)

The cone object has the following attributes and default values, like those for cylinders: pos (0,0,0), x (0), y(0), z(0), axis (1,0,0), length (1), color (1,1,1) which is color.white, red (1), green (1), blue (1), and up (0,1,0). As with cylinders, up has a subtle effect on the 3D appearance of a cone. Additional cone attribute:

radius Radius of the wide end of the cone, default = 1

Note that the pos attribute for cylinder, arrow, cone, and pyramid corresponds to one end of the object, whereas for a box, sphere, or ring it corresponds to the center of the object.


C:\Documents and Settings\comphy>python
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> from visual import *
>>> cone(pos = (5,2,0), axis = (12,0,0), radius = 1)
<visual.primitives.cone object at 0x00F4D7E0>
>>> cone(pos = (7,3,1), axis = (45,3,1), radius = 4, up =(0,1,0), color = (4,1,9
))
<visual.primitives.cone object at 0x00F4D840>
>>> cone(pos = (7,3,1), axis = (0,9,0), radius = 4, up =(0,1,1), color = (9,4,3)
)
<visual.primitives.cone object at 0x00F4D870>
>>>



The cylinder Object

Here is an example of how to make a cylinder, naming it "rod" for future reference:

rod = cylinder(pos=(0,2,1), axis=(5,0,0), radius=1)

The center of one end of this cylinder is at x=0, y=2, and z=1. Its axis lies along the x axis, with length 5, so that the other end of the cylinder is at (5,2,1), as shown in the accompanying diagram.

You can modify the position of the cylinder after it has been created, which has the effect of moving it immediately to the new position:

rod.pos = (15,11,9) # change position (x,y,z)

rod.x = 15 # only change pos.x

If you create an object such as a cylinder but without giving it a name such as rod, you can't refer to it later. This doesn't matter if you never intend to modify the object.

Since we didn't specify a color, the cylinder will be the current "foreground" color (see Controlling One or More Visual Display Windows). The default foreground color is white. After creating the cylinder, you can change its color:

rod.color = (0,0,1) # make rod be blue

This will make the cylinder suddenly turn blue, using the so-called RGB system for specifying colors in terms of fractions of red, green, and blue. (For details on choosing colors, see Specifying Colors.) You can set individual amounts of red, green, and blue like this:

rod.red = 0.4

rod.green = 0.7

rod.blue = 0.8

The cylinder object can be created with other, optional attributes, which can be listed in any order. Here is a full list of attributes, most of which also apply to other objects:

pos Position: the center of one end of the cylinder; default = (0,0,0)
A triple, in parentheses, such as (3,2,5)

axis The axis points from pos to the other end of the cylinder, default = (1,0,0)

x, y, z Essentially the same as pos.x, pos.y, pos.z, defaults are all 0

radius The radius of the cylinder, default = 1

length Length of axis; if not specified, axis determines the length, default = 1
If length is specified, it overrides the length given by axis

color Color of object, as a red-green-blue (RGB) triple: (1,0,0) is pure red, default = (1,1,1), which is color.white

red, green, blue (can set these color attributes individually), defaults are all 1

up Which side of the cylinder is "up"; this has only a subtle effect on the 3D appearance of the cylinder, default (0,1,0)

Note that the pos attribute for cylinder, arrow, cone, and pyramid corresponds to one end of the object, whereas for a box, sphere, or ring it corresponds to the center of the object.

When you start a VPython program, for convenience Visual creates a display window and names it scene. By default, objects that you create go into that display window. See Controlling One or More Visual Display Windows later in this reference for how you can create additional display windows and place objects in them.


Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\comphy>python
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> from visual import *
>>> pointer = arrow(pos=(0,2,1), axis = (5,0,0), shaftwidth = 1)
>>>
C:\Documents and Settings\comphy>python
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> from visual import *
>>> pointer = arrow(pos(0,2,1), axis = (5,0,0), shaftwithd = 1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'pos' is not defined
>>> pointer = arrow(pos = (0,2,1), axis = (5,0,0), shaftwidth =1)
>>> pointer = arrow(pos = (0,2,1), axis = (5,0,0), shaftwidth = 1, color = (0,25
5,0))
>>>
C:\Documents and Settings\comphy>python
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> from visual import *
>>> pointer = arrow(pos = (0,4,3), axis = (0,4,2), shaftwidth = 0.5, color = (50
, 128, 50))
>>> pointer = arrow(pos = (0,4,3), axis = (0,4,2), shaftwidth = 0.5, color = (50
, 128, 50))
>>> pointer = arrow(pos = (2,4,3), axis = (0,4,5), shaftwidth = 0.5, color = (1,
0,1))
>>> rod = cylinder(pos=(0,2,1), axis = (5,0,0), radius = 1)
>>> rod = cylinder(pos=(4,3,5), axis = (5,3,4), radius = 2.4, color = (1,0,1))
>>>



The arrow Object

The arrow object has a straight box-shaped shaft with an arrowhead at one end. The following statement will display an arrow pointing parallel to the x axis:

화살표 오프젝트는 직선상장모양의 한쪽 끝쪽에선 화살표머리를 가지지 않는다.

아래에 언급되는 선언문에서는 X축에 평행하게 가르키는 화살표를 생성한다.

pointer = arrow(pos=(0,2,1), axis=(5,0,0), shaftwidth=1)

The arrow object has the following attributes and default values, like those for cylinders:

pos (0,0,0), x (0), y(0), z(0), axis (1,0,0), length (1), color (1,1,1) which is color.white, red (1), green (1), blue (1), and up (0,1,0). The up attribute is significant for arrow because the shaft and head have square cross sections, and setting the up attribute rotates the arrow about its axis. Additional arrow attributes:

shaftwidth By default, shaftwidth = 0.1*(length of arrow)

headwidth By default, headwidth = 2*shaftwidth

headlength By default, headlength = 3*shaftwidth

Assigning any of these attributes to 0 makes it use defaults based on the size of the arrow. If headlength becomes larger than half the length of the arrow, or the shaft becomes thinner than 1/50 the length, the entire arrow is scaled accordingly.

This default behavior makes the widths of very short arrows shrink, and the widths of very long arrows grow (while displaying the correct total length). If you prefer that shaftwidth and headwidth not change as the arrow gets very short or very long, set fixedwidth = 1. In this case the only adjustment that is made is that headlength is adjusted so that it never gets longer than half the total length, so that the total length of the arrow is correct. This means that very short, thick arrows look similar to a thumbtack, with a nearly flat head.

Note that the pos attribute for cylinder, arrow, cone, and pyramid corresponds to one end of the object, whereas for a box, sphere, or ring it corresponds to the center of the object.

http://www.python.org

http://www.vpython.org

Here is a complete VPython program that produces a 3D animation of a red ball bouncing on a blue floor. Note that in the "while" loop there are no graphics commands, just computations to update the position of the ball and check whether it hits the floor. The 3D animation is a side effect of these computations.

여기에 파란 바닥에서 붉은색 공이 튀어오르는 완전한 3D 애니메이션을 작성하는 VPython 프로그램이 있다.

"while"루프안에 그래픽 명령이 없는 것을 주목하라. 단지 공의 위치가 변화하는 것을 적용할 뿐이다. 그리고

어디서 바닥에 부딪치는 지 확인하라. 이 3D 애니메이션은 이 계산의 주변효과일 뿐이다.

from visual import *

floor = box (pos=(0,0,0), length=4, height=0.5, width=4, color=color.blue)

ball = sphere (pos=(0,4,0), radius=1, color=color.red)

ball.velocity = vector(0,-1,0)

dt = 0.01

while 1:

rate (100)

ball.pos = ball.pos + ball.velocity*dt

if ball.y < ball.radius:

ball.velocity.y = -ball.velocity.y

else:

ball.velocity.y = ball.velocity.y - 9.8*dt

The program starts by importing the module "visual" which enables 3D graphics.

A box and a sphere are created and given names "floor" and "ball" in order to be able to refer to these objects.

The ball is given a vector velocity.

In the while loop, "rate(100" has the effect "do no more than 100 iterations per second, no matter how fast the computer."

The ball's velocity is used to update its position, in a single vector statement that updates x, y, and z.

Visual periodically examines the current values of each object's attributes, including ball.pos, and paints a 3D picture.

The program checks for the ball touching the floor and if necessary reverses the y-component of velocity,

otherwise the velocity is updated due to the gravitational force.

이 프로그램은 3D 그래픽을 가능하게 하는 "visual"모듈을 임포트하므로써 시작한다.

박스와 구면체는 "floor"와 "ball"의 이름으로 생성되고 명명된다.

구면체는 주어진 vector 속도를 가진다.

루프안의 "rate"(100 은 초당 반복을 의미하고, 이것은 컴퓨터의 속도에 관계없다)

구면체의 속도는 구면체의 위치의 변화를 적용하는데 사용되고, 간단한 vector의 정의는 그것의 x,y,z로 한다.

각각의 물체들의 속성의 적용시점의 값을 계산하면 주기적으로 운동하는 것이 보이게 되고, 프로그램은

y속도를 체크하면서 구면체가 바닥과 접촉하는지를 체크하고, 다른면에선 그 속도는 중력에 의해서 변화된다.

Java로 3D 그래픽스를 구현하고 간단한 엔진까지 만들어볼라고 합니다.

다음은 테스트입니다.

키보드로 전진/후진/좌/우 로 움직여서 네비게이션 가능합니다.

http://user.chol.com/~comphy/JavaAppletEx/3D/BillboardAppDefault.HTML<= 여기를 클릭하면 볼 수 있습니다.

+ Recent posts