2016년 4월 4일 월요일

[java] jar, war, ear

jar, war, ear 이 압축방식들은 압축의 해제없이 JDK에서 각 파일들을 접근하여 사용할 수 있도록 설계되어 있다.
jar, war, ear 파일들은 java jar tool을 이용하여 압축된 파일이다.
이 파일들은 각각 다른 목적을 가지고 사용된다.

단위: class < jar < war < ear

  • jar (java archive)
    • 라이브러리, 리소스, property 파일들을 포함한다.
    • JDK에서 제공하는 Java Archive Tool을 이용하여 jar 파일에 대한 작업을 할 수 있다. (Jar tool)
      • JAR 파일 생성
        jar cf jar-file input-file(s)
      • JAR 파일 콘텐츠 보기
        jar tf jar-file
      • JAR 파일 콘텐츠 추출
        jar xf jar-file
      • JAR 파일에서 특정 콘텐츠 추출
        jar xf jar-file archive-file(s)
      • JAR 파일의 애플리케이션 실행 (version 1.1)
        jre -cp app.jar MainClass
      • JAR 파일의 애플리케이션 실행
        (version 1.2 -- requires Main-Class manifest header)
        java -jar app.jar
      • java sun jar basics
        https://web.archive.org/web/20120626012843/http://java.sun.com/developer/Books/javaprogramming/JAR/basics

  • war (web archive)
    • Web container는 서블릿, jar파일과 WEB-INF폴더에 있는 web.xml 파일을 가지고 있는 war 파일로 패키징된 웹 모듈을 필요로 한다. (패키지 개념)
    • war 파일로 올리면 tomcat(was)이 알아서 압축을 해제해서 배포해준다.
    • 사용법
      • war 파일 만드는 방법
        • jar cvf 파일명.확장자(jar or war) ./상대경로
      • 만들어진 war를 tomcat에 등록하기
        • server.xml docBase 에 등록
        • war 를 등록시 확장자는 생략해도 되며, docBase에는 war 파일의 경로를 기입하고 path는 반드시 기입해야 한다.
  • ear (enterprise archive)
    • 하나의 웹 어플리케이션 단위를 넘어서 실제 서버에서 배포하기 위한 단위를 말한다.
    • 이를 위해서 jar와 war를 묶어서 각각의 기능을 지원한다.
      • jar 는 어플리케이션 레벨(business layer)
      • war는 웹어플리케이션 레벨(web layer)
    • Standalone web container(such as Tomcat, Jetty)는 EAR 파일을 지원하지 않는다.
      • 완전한 어플리케이션 서버가 아니기 때문이다.
      • 이러한 웹 어플리케이션은 war 파일로 deploy
* WAR에 대한  추가 설명
WAR는 자바 기반의 웹 프로젝트의 최종 결과 포맷이다. 이것은 기본적인 내용이지만 웹 프로젝트에서 배포를 위한 최소한의 단위가 되므로 매우 중요하다.

WAS(Web Application Server)마다 배포 방식과 설정이 조금씩 다르지만 기본적으로 WAR파일에 대한 규격은 동일하다. WAR 파일과 JAR 파일 모두 파일 시스템 측면에서는 ZIP 파일과 유사하며 JVM 위에서 실행할 수 있도록 메타 정보가 추가되어 있다. 

JAR의 경우에는 실행될 클래스(main)를 명시하며, WAR 파일의 경우에는 단독으로 실행할 수 없고 서버 컨테이너에 의해서 실행되므로 배포에 대한 메타 정보가 담겨 있다. 그래서 web.xml을 배포 서술자(DD, Deploy Description)라고 부르며, 이 파일에는 웹 프로젝트에 대한 설정 정보가 담겨 있다.

서버에서는 배포 서술자 정보를 읽어 컨텍스트를 생성한다. 컨텍스트는 기본적으로 WAR 파일명과 동일한 이름으로 생성되고, 사용자가 웹 디렉터리에 있는 자원에 접근할 수 있게 한다.

(최근에는 보안상의 이유로 사용자가 JSP에 직접적인 접근을 할 수 없게 WEB-INF 하위에 디렉터리를 만들어 사용한다.)

(엔터프라이즈 빌드 자동화를 위한 Gradle, 윤석진, 84p 참고)

댓글 없음:

댓글 쓰기