기본적으로 JAR, WAR 모두 Java의 jar 옵션 (java -jar)을 이용해 생성된 압축(아카이브) 파일로, 애플리케이션을 쉽게 배포하고 동작시킬 수 있도록 관련 파일(리소스, 속성 파일 등)을 패키징 한 것이다.
Java ARchive
: Java 애플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 .jar 파일
(단점)
: Web application ARchive
: 웹 애플리케이션이 구동되기 위한 자원들을 모아서 배포하는 데 사용되는 .war 파일
: Servlet / JSP 컨테이너에 배치할 수 있는 웹 애플리케이션 압축파일
web.xml 파일을 포함하고 있다. WAS가 동작을 하면 web.xml 파일에서 설정들을 불러온다.+ WAR 파일도 JAVA의 JAR 옵션( java - jar)을 이용해 생성하는 JAR파일의 일종으로 웹 애플리케이션 전체를 패키징하기 위한 JAR파일로 생각하면 되겠다.
(단점)
둘의 차이점을 요약하자면 다음과 같다.
JAR 파일은 독립적인 실행 가능한 애플리케이션을 구성하는 것을 목표로 하고, WAR 파일은 웹 환경에서 실행되는 애플리케이션을 구성하는 것을 목표로 한다.
JAR Java 애플리케이션 패키징
: Java 애플리케이션 패키징은 독립적인 Java 애플리케이션을 구성하는 것을 의미한다. 이러한 애플리케이션은 일반적으로 명령줄에서 실행되거나 특정한 환경에서 독립적으로 실행되며, 클래스 파일, 리소스, 라이브러리 등을 포함한다.
WAR Java 웹 애플리케이션 패키징
: Java 웹 애플리케이션 패키징은 Java 기반의 웹 애플리케이션을 구성하는 것을 의미한다. 웹 애플리케이션은 사용자의 웹 브라우저를 통해 접근되고 실행되며 주로 서블릿, JSP, HTML, CSS, JavaScript 등의 웹 구성 요소와 웹 애플리케이션을 실행하기 위한 서블릿 컨테이너(웹 컨테이너)에서 필요한 설정 파일, 라이브러리, 리소스 등을 포함한다.
- WAR와 JAR 모두 압축된 아카이브 파일이다.
- 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) 같은 별도의 웹서버(WEB) 또는 웹컨테이너(WAS) 환경에서 사용되기 위해 고안되었다.
Spring Boot 프로젝트 생성 시, .jar 또는 .war 로 패키징 방식을 선택할 수 있다.
두 방식 모두 WAS 컨테이너 위에서 동작하게 되는데, 이는 JAR파일에 WAS가 내장되어 있기 때문이다. embedded Tomcat(내장 톰캣)이 jar에 내장된 경우, jar파일로도 빌드가 가능하다.
따라서 Spring Boot는 기존에 Tomcat과 같은 웹 컨테이너(WAS)를 이용해야 했던 Spring 보다 훨씬 간단하게 애플리케이션을 제작/배포할 수 있다.
하지만 필요에 따라 외부 WAS를 이용해야 하는 경우, 이때는 WAR 파일로 패키징을 해야한다.
JAR와 WAR는 리소스들을 하나의 파일로 패키징하는 과정의 차이가 있는것이다.
배포 시 외장 WAS를 사용해야 하는 환경이라면 .war 배포를, 내장 WAS를 써야하는 환경이라면 .jar 배포를 하면 된다.
📝 정리하기
확장자가 .war 인 WAR 파일은 웹 컨테이너에 배치해 사용하도록 웹 관련 리소스를 모아 패키징한 파일이고, 확장자가 .jar인 JAR 파일은 Java 프로그램이 내장 WAS를 통해 독립적으로 실행 가능하도록 패키징한 파일이다.