passion and relax

[JAVA] 17. 코드를 배포합시다 (패키지 제작과 배포) 본문

프로그래밍

[JAVA] 17. 코드를 배포합시다 (패키지 제작과 배포)

Grab Java 2024. 6. 4. 11:56

애플리케이션 배포 종류

로컬
. 애플리케이션 전체가 최종 사용자의 컴퓨터에서 실행 가능한 JAR(Java ARchive)로 배포
. 독립적인 프로그램
. 예) GUI 프로그램인 경우가 많다.
로컬 - 원격 혼합형
. 서버와 클라이언트로 나뉘어 처리
. 예) 웹스타트, RMI 애플리케이션
원격
. 애플리케이션 전체가 서버에서 돌고, 클라이언트는 non-자바인 경우
. 예) 웹 애플리케이션

로컬 : 컴파일 및 실행

소스코드가 저장될 위치와 클래스 파일이 컴파일 되어 저장될 위치를 분리 시켜야 한다.
. 컴파일된 class 파일을 ../classes 디렉토리에 저장하라
    javac -d ../classes *.java
실행
. main이 있는 클래스명을 지정해 준다.
    java MyProject/classes/클래스명

로컬 : 실행 가능한 JAR 만들기

클래스 파일이 모두 classes 디렉토리에 있는지 확인
main()이 어디 있는지를 minifest.txt 파일에 기록하고, 이 파일을 classes 디렉토리에 생성
    Main-Class: MyApp  (엔터)  => 확장자 .class 가 없다. 마지막에 엔터를 넣어라
jar 명령어를 이용하여 JAR 파일 생성
    classes 디렉토리로 이동
    jar -cvmf manifest.txt app1.jar *.class
    또는
    jar -cvmf manifest.txt app1.jar MyApp.class

로컬 :  JAR 실행 시키기

    java -jar app1.jar
    또는 OS에 따라 더블클릭만 해도 되기도 한다.

로컬 : 클래스를 패키지에 넣기

유사한 성격의 클래스들 끼리 그룹화 하기 위함
이름 충돌을 막기 위함
역 도메인명을 포함하여 패키지를 구조화 하는 것을 sun에서 추천하고 있음.
각 클래스들의 첫 줄에 패키지를 넣어야 한다. package com.headfirstjava;
역 도메인명의 구조에 따라, 디렉토리 구조를 줘야 한다. 그 위치에 클래스 소스가 있어야 한다.

로컬 : 패키지의 컴파일과 실행

cd MyProject/source
    소스가 담긴 최상위 디렉토리인 source 에서 컴파일 해야 한다.
javac -d ../classes com/headfirstjava/*.java
    -d : 컴파일된 클래스 파일을 패키지 구조에 맞게 ../classes 하위에 올바르게 저장하라는 플래그
cd MyProject/classes
    실행도 classes 에서 해야 한다.
java com.headfirstjava.PackageExercise
    패키지명이 포함된 클래스의 전체 이름을 적어야 한다.

로컬 : 패키지를 가지고 실행 가능한 JAR 만들기

1. 클래스 파일이 classes 하위에 제대로된 패키지 구조로 저장되어 있는지 확인
2. classes 디렉토리에 manifest.txt 작성
    Main-Class: com.headfirstjava.PackageExercise (엔터)
3. jar 도구로 JAR 파일 생성
    cd MyProject/classes
    jar -cvmf manifest.txt packEx.jar com     //com만 지정해야 함.
4. 실행
    java -jar packEx.jar

로컬 : jar 도구 더 활용

jar -tf packEx.jar
    -tf : Table File의 의미로 JAR 안에 있는 목록을 출력 시키라는 태그
jar -xf packEx.jar
    -xf : Extract File의 의미로 묶인 것을 풀라는 태그

로컬 : MANIFEST.MF

1. classes에 manifest.txt 작성
2. jar -cvmf manifest.txt packEx.jar com   실행
3. jar 도구가 알아서 META-INF 디렉토리에 minifest.txt를 가지고 MANIFEST.MF를 만든다.

JWS : 자바 웹 스타트 (Java Web Start)

사용자가 웹을 통해 내려 받을 수 있는 로컬로 실행 가능한 파일
작동 원리
. 클라이언트에서 요청
    <a href = "MyApp.jnlp">클릭</a>
. 서버에서
    jnlp 전송 (jnlp : 애플리케이션의 실행 가능한 JAR의 이름을 지정해 주는 XML 문서)
. 클라이언트에서
    JWS 실행 (클릭 되면서 자동으로 시작 된다)
    전송 받은 jnlp 읽기
    서버에 MyApp.jar
. 서버에서
    MyApp.jar
. 클라이언트에서
    JWS가 JAR의 main() 실행
. 이후, 인터넷 없이도 JWS 실행으로 JAR를 시작할 수 있다.

 


JWS : jnlp 파일

jnlp : Java Network Launch Protocol = 자바 네트워크 구동 규약
JWS에서 읽혀져 JAR 파일을 찾아내고, main()을 실행하여 App를 시작하는 용도로 쓰이는 파일
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="0.2.1.0" codebase="http://127.0.0.1/~kathy" href="MyApp.jnlp">
    <information>
        <title>kathy App</title>
        <vendor>Wickedly Smart</vendor>
        <homepage href="index.html/>
        <description>Head First WebStart demo</description>
        <icon href="kathys.gif"/>
        <offline-allowed/>
    </information>

    <resources>
        <j2se version="1.3+"/>
        <jar href="MyApp.jar"/>     <====== 확인
    </resources>

    <application-desc main-class="HelloWebStart"/>        <======= 확인
</jnlp>

 


JWS : 배포하는 방법

1. JAR를 만든다
2. jnlp를 만든다
3. JAR, jnlp를 웹서버에 저장한다.
4. 웹 서버에 jnlp 다운로드를 위한 mime 유형을 추가한다.
    application/x-java-jnlp-file
5. 링크 만들기
    <a href="MyApp.jnlp">haha</a>