dev.jaieve 공부기록

[Java] JAR와 WAR의 차이 본문

Back/Java

[Java] JAR와 WAR의 차이

제이브 2021. 7. 18. 19:43

JAR, WAR, EAR는 모두 Java의 jar 툴을 이용하여 생성된 압축(아카이브)파일이다.

(JDK에서는 각 압축파일들에 접근하여 압축 해제없이 사용할 수 있음.)

압축 파일의 주 역할은 어플리케이션을 쉽게 배포하고 동작시킬 수 있도록 관련 파일(리소스, 속성파일 등)들을 패키징하는 것이다.

Maven 을 이용하여 프로젝트 빌드를 관리했을 경우 다운로드된 라이브러리들은 class파일들이 묶인 jar파일로 구성되어 있는 것을 확인할 수 있다.

그리고 서비스 배포시에는 프로젝트를 WAR 포맷으로 묶어서 /wepapps 등의 지정된 경로에 넣고 Tomcat 등의 웹 컨테이너(Web container)를 이용하여 deploy하는 식으로 서비스를 많이 올린다.

JAR(Java Archive)

.jar 확장자 파일에는 Class 와 같은 Java 리소스와 속성파일, 라이브러리 및 액세서리 파일이 포함되어 있다.

즉, Java 어플리케이션이 동장학 수 있도록 Java 프로젝트를 압축한 파일이 바로 .jar 파일이다.

JAR 파일의 구조는 windows zip 파일과 동일한 구조이지만 플랫폼에 귀속되는 점은 다르다.

JAR파일은 원하는 구조로 구성할 수 있고, JDK(Java Development Kit)가 포함하고 있는 JRE(Java Runtime Environm,ent)만 가지고도 실행이 가능하다.

jar 형태로 구성이 되는 경우 ClassLoader에 의해 로드되는 객체들은 jar의 root에 위치하게 된다.

META-INF의 MANIFEST.MF 파일에는 매니페스트 버전, 빌드한 사용자, 빌드 jdk 버전, 빌드 툴 등의 정보가 포함되어 있다. 즉, jar 파일에 대한 manual이나 spec을 기록하는 폴더이다.

WAR(Web Application Archive)

.war 확장자 파일은 servlet / jsp 컨테이너에 배치할 수 있는 웹 어플리케이션 압축파일 포맷이다.

JSP, SERVLET, JAR, CLASS, XML, HTML, JAVASCRIPT 등 Servlet Context 관련 파일들로 패키징 되어 있다.

WAR파일은 JAR파일의 JAR옵션을 이용해 생성되기 때문에 웹 어플리케이션 전체를 패키징하기 위한 JAR파일이라고 볼 수 있다.

WAR로 패키징하는 경우 META-INF 폴더는 jar와 동일하게 만들어지고, WEB-INF가 하나 더 생긴다. WEB-INF는 외부 라이브러리와 개발된 어플리케이션의 컴파일된 클래스파일(객체_이 위치하는 classes 폴더를 포함한다.(jar는 ClassLoader에 의해 로드된 객체가 root에 위치하게 된다.)

WAR 파일은 JAR포맷과 달리 WEB-INF, META-INF 디렉토리로 구조가 사전 정의되어 있고, 웹 어플리케이션을 어떻게 설정할 지에 대한 정의가 있는 web.xml 파일이 있다. WEB-INF에 속한 web.xml파일은 web application 구성을 결정해준다. 필터, 서블릿, DB source 등 web container가 구동하는데 이용되는 환경 설정 파일인 것이다.

그렇기 때문에WAR파일을 실행하려면 Tomcat, Weblogic, Websphere 등의 웹 서버(WEB) 또는 웹 컨테이너(WAS)가 필요하다.

서버가 처음 로딩될 때 web.xml을 읽어 환경설정에 대한 어플리케이션 배치를 한다. web.xml에 들어가는 환경설정에서 다음과 같은 설정을 줄 수 있다.

  • 필터 정보(매핑 포함), 서블릿 정보(매핑 포함), 웹 어플리케이션 정보, 세션 정보, 세션 정보가 소멸, 생성, 수정되는 것을 알려주는 리스너 정보, MIME 매핑, welcomefile 정보, errorPage 정보, url 보호정보, Enterprise bean 홈 레퍼런스 정보(로컨 레퍼런스 정보 포함)

WAR는 웹 응용 프로그램을 위한 포맷이기 때문에 웹 관련 자원만 포함한다. 이를 사용하면 웹 어플리케이션을 쉽게 배포하고 테스트할 수 있다.

EAR(Enterprise Archive File)

JAVA EE(Enterprise Edition) 에 쓰이는 JAR 파일 형식중 한 종류.

한 개 이상의 모듈을 단일 아카이브로 패키징 하여 어플리케이션 서버에 동시에 일관적으로 올리기 위하여 사용되는 포맷. 즉, 실제 서버에서 배포하기 위한 단위이다.

Enterprise application에 필요한 모든 파일을 포함한다.(jar, war 등등)

요약

  • JAR와 WAR, EAR는 모두 압축파일이고 어플리케이션을 쉽게 배포하고 동작시키기 위해 Java의 jar 툴을 이용해서 압축한 파일이라 구조적 차이가 없고, 확장자를 바꿔도 문제가 없다.
  • JAR와 WAR의 사용목적이 다르다.
    • JAR는 library나 일반 application을 배포할 때
    • WAR는 web application을 배포할 때
  • 파일 규모 : EAR > WAR > JAR

Reference

  1. https://ifuwanna.tistory.com/224
  2. https://programmer93.tistory.com/40
  3. https://www.bubblecat.co.kr/2019/05/jar-war-ear.html
반응형