JAR와 WAR는 압축파일의 한 유형(Format)이다.
배경
-
jar, war 모두 어플리케이션 소스들을 배포할 시에 path 등의 설정으로 인한 이슈를 제거하기 위해 탄생한 압축방식이다.
-
이 압축방식들은 압축의 해제없이 JDK에서 각 파일들을 접근하여 사용할 수 있도록 설계되었다.
JAR(Java ARchive)
-
jar 압축은 하나의 application 기능이 가능하도록 java 파일 등을 압축하고 지원한다.
-
path 등의 경로를 유지하기 때문에
배포된 jar 파일을 사용하는 사용자들은 각 파일들에 대한 path 문제에서 벗어날 수 있다.
ex) ojdbc14.jar, servlet-api.jar 등등
WAR(Web ARchive)
-
war는 자바 기반의 웹 프로젝트의 최종 결과 포맷이다.
-
war는 jar와 달리 웹 어플리케이션(Web Application)을 지원하기 위한 압축방식이다.
-
war는 웹 프로젝트에서 배포를 위한 최소한의 단위이다.
-
WAS마다 배포 방식과 설정이 조금씩 다르지만 기본적으로 war파일에 대한 규격은 동일하다.
-
웹 어플리케이션을 지원하기 위해서 war 압축방식은 jsp, servlet, gif, html, jar 등을 압축하고 지원한다.
-
war로 올리면 WAS(Web Application Server)가 압축을 해제하여 배포해준다.
-
war는 단독으로 실행이 안되며
서버컨테이너 WAS에 의해 실행되어야 하므로
배포에 대한 메타 정보(웹 프로젝트에 대한 설정 정보)가 담겨져 있다. -
따라서 배포서술자(DD, Deploy Description)를 의미하는 web.xml이 포함되어 있다.
-
서버에서는 배포 서술자 정보를 읽어 컨텍스트를 생성한다.
-
컨텍스트는 기본적으로 war 파일명과 동일한 이름으로 생성되고
사용자가 웹 디렉터리에 있는 자원에 접근할 수 있게 한다.
JAR vs WAR
-
jar의 경우에는 실행될 클래스(main)를 명시하며 JVM위에서 단독으로 수행이 가능하다.
-
war 파일의 경우에는 단독으로 실행할 수 없고
서버 컨테이너에 의해서 실행되므로
배포에 대한 메타 정보가 담겨 있다. -
만들어진 목적이 다르다.
-
jar : 자바 클래스 파일들이 주이며, EJB 파일들을 포함한다.
-
war : 웹 어플리케이션에 관련된 파일들을 포함한다. (jsp, servlet 파일들)
-
클래스 파일을 압축 : jar
웹 어플리케이션을 통째로 압축 : war
사용 이유(jar, war)
-
평소 압축을 하는 이유는 용량을 줄이며 관리하기 편함을 위해서이다.
-
jar 혹은 war도 같은 이유이다.
압축 파일(.jar, .war) 만들기
-
java를 설치하면 JAVA_HOME(설치 디렉토리의 루트) 하위 bin 폴더에는 여러 실행프로그램들이 존재한다.
-
그 중 jar.exe 파일이 존재하는데
바로 이 파일이 JAVA기반의 파일들을 압축하는 데 사용할수 있는 프로그램이다. -
따라서 cmd창에서 jar의 다양한 옵션을 활용하여 .jar 혹은 .war파일을 만들 수 있다.