본문 바로가기

공부 정리/Java

jar war 차이점

728x90
반응형

*개요

spring 프로젝트를 서버에 배포할 때 jar, war 2가지 방법으로 배포 할 수 있습니다. 각 방식의 차이점이 무엇인지, 구조가 어떻게 다른지 확인해봅니다.

 

From Java Tips: Difference between ear jar and war files

둘다 모두 java jar를 사용해서 압축된 것이다. 이 파일들은 다른 목적으로 만들어졌다:

.jar files: libraries, resources, accessories files 처럼 설정파일로 구성되어 있다.

.war files: 
어떠한 servlet/jsp container에도 배포할 수 있는 웹 어플리케이션을 포함한다. jsp, html, javascript 혹은 웹 어플리케이션 개발을 위한 파일들이 포함된다.

 

위 설명에 따르면, 둘다 압축된 알집형태인데, war는 servlet/jsp 환경에 사용하는 웹 어플리케이션 성격이 강합니다. 물론, jar도 웹 어플리케이션으로 배포될 수 있습니다.

 

FROM Wekipedia

WAR file (Web Application Resource or Web application ARchive) : JAR, JSP, servlet, class, xml, tag, library, html이며 웹 어플리케이션을 구성하는 다양한 자원들의 집합체입니다. /WEB-INF 에 web.xml 파일은 웹 어플리케이션 구조를 정의합니다. (JSP 파일들만 있다면, 필수는 아닙니다) 만약에 servlet을 사용한다면, servlet container는 URL 요청을 라우팅하기 위해서 web.xml을 사용합니다. 또한 web.xml은 servlet 내에서 참조되는 문맥 변수들을 정의하기 위해 사용됩니다. 더불어 각종 환경 의존성도 정의합니다. 

 

JAR file (Java ARchive)  : JAR는 metadata와 각종 자원들(텍스트, 이미지 등)이 결합된 자바 class 파일들을 모은 집합체입니다. 자바 manifest 파일을 포함합니다. JAR 파일을 사용하면 Java 런타임에서 클래스 및 관련 리소스를 포함한 전체 애플리케이션을 단일 요청으로 효율적으로 배포할 수 있습니다. META-INF/MANIFEST.MF 아래에 manifest 파일 항목은 JAR 파일을 사용하는 방법을 설명합니다. 예를 들어, classpath 항목을 사용하여 JAR과 함께 로드할 다른 JAR 파일을 지정할 수 있습니다.

 

 

 

 

*결론

여러가지 자료를 비교해 보아 다음과 같은 결론을 내릴 수 있습니다.

 

WAR와 JAR 모두 압축된 아카이브 파일이다.

WAR는 JAR이지만, JAR는 WAR가 아니다.

WAR는 웹 어플리케이션 배포를 위해 JAR보다 특정한 디렉터리와 파일들이 필요하다.

WAR는 'Servlet Container' 에서 사용된다 other jar files (at WEB-INF/lib directory) compiled classes (at WEB-INF/classes (servlet goes there too)) .jsp files images, files 등을 포함한다.

WAR는 Tomcat, Jetty, Java EE server(JBoss or Glassfish) 같은 환경에서 사용되기 위해 고안되었다.

 

 결론적으로 WAR와 JAR는 모두 압축된 아카이블 파일인데, WAR는 웹 어플리케이션을 배포하기 위해 고안되어 특정 구조를 가지고 있습니다. 최근에는 Spring boot로 프로젝트를 jar로 쉽게 배포하고 실행하는데, 오래동안 사용되어온 war가 어떠한 특징을 가지고 있고 차이점은 무엇인지 확인할 수 있었습니다.

 

*출처

https://stackoverflow.com/questions/5871053/difference-between-jar-and-war-in-java

728x90
반응형

'공부 정리 > Java' 카테고리의 다른 글

자바 8에 추가된 Date Time API  (0) 2022.10.28
Java 8에서 개선된 가비지 컬렉터는?  (0) 2022.10.19
자바 비동기  (0) 2021.08.16
RestTemplate  (0) 2021.08.15
Filter vs Interceptor 차이 (Spring)  (0) 2021.08.13