WAR / JAR

niireymik·2024년 4월 8일

🍀 JAR / WAR

기본적으로 JAR, WAR 모두 Java의 jar 옵션 (java -jar)을 이용해 생성된 압축(아카이브) 파일로, 애플리케이션을 쉽게 배포하고 동작시킬 수 있도록 관련 파일(리소스, 속성 파일 등)을 패키징 한 것이다.

JAR

Java ARchive
: Java 애플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 .jar 파일

  • 독립적인 Java 애플리케이션을 패키징할 수 있고, 실행 가능한 JAR 파일로 만들어서 개발자가 쉽게 애플리케이션을 실행할 수 있다.
  • 압축된 형식으로 클래스, 리소스, 라이브러리 등을 포함하므로 배포와 전달이 용이하다.
  • JAR 파일은 원하는 구조로 구성이 가능하다.
  • JDK(Java Development Kit)에 포함된 JRE(Java Runtime Environment)만 있어도 실행 가능하다 : Java 애플리케이션의 진입점인 main 메서드를 포함하고 있어 JVM에서 직접 실행하기 때문에 별도의 웹 컨테이너나 서버가 필요하지 않다.

(단점)

  • 웹 애플리케이션을 개발할 때는 WAR 파일에 비해 제약사항이 있다. 예를 들어, JSP나 서블릿 컨테이너에 대한 표준 기능을 활용하기 어렵다.
  • 동적인 웹 컨텐츠 생성 및 관리가 제한적이다.

WAR

: Web application ARchive
: 웹 애플리케이션이 구동되기 위한 자원들을 모아서 배포하는 데 사용되는 .war 파일
: Servlet / JSP 컨테이너에 배치할 수 있는 웹 애플리케이션 압축파일

  • Java 웹 애플리케이션을 패키징하는 데 최적화되어있다.
  • 웹 관련 자원을 포함 (JSP, Servlet, JAR, Class, XML, HTML, Javascript) 하기 때문에 한 번에 배포 및 실행할 수 있다.
  • 웹 애플리케이션을 어떻게 설정할지에 대한 정의가 있는 web.xml 파일을 포함하고 있다. WAS가 동작을 하면 web.xml 파일에서 설정들을 불러온다.
  • Tomcat과 같은 별도의 웹 서버(WEB) 또는 웹 컨테이너 환경(WAS)이 필요하며, 이렇게 웹 컨테이너를 통해 실행하므로 다양한 웹 기능과 서버 환경을 활용할 수 있다.
  • 원하는 구성을 할 수 있는 JAR과 달리, 사전 정의된 구조 (WEB-INF 및 META-INF) 를 사용한다.

+ WAR 파일도 JAVA의 JAR 옵션( java - jar)을 이용해 생성하는 JAR파일의 일종으로 웹 애플리케이션 전체를 패키징하기 위한 JAR파일로 생각하면 되겠다.

(단점)

  • 웹 컨테이너나 서버에 종속적이기 때문에 특정한 웹 컨테이너 환경이 필요하다.
  • 배포 및 전달에 있어서 JAR 파일에 비해 크기가 크고 번거로울 수 있다.


🌵 JAR / WAR 비교하기

둘의 차이점을 요약하자면 다음과 같다.

JAR 파일은 독립적인 실행 가능한 애플리케이션을 구성하는 것을 목표로 하고, WAR 파일은 웹 환경에서 실행되는 애플리케이션을 구성하는 것을 목표로 한다.

패키징

JAR Java 애플리케이션 패키징
: Java 애플리케이션 패키징은 독립적인 Java 애플리케이션을 구성하는 것을 의미한다. 이러한 애플리케이션은 일반적으로 명령줄에서 실행되거나 특정한 환경에서 독립적으로 실행되며, 클래스 파일, 리소스, 라이브러리 등을 포함한다.

WAR Java 웹 애플리케이션 패키징
: Java 웹 애플리케이션 패키징은 Java 기반의 웹 애플리케이션을 구성하는 것을 의미한다. 웹 애플리케이션은 사용자의 웹 브라우저를 통해 접근되고 실행되며 주로 서블릿, JSP, HTML, CSS, JavaScript 등의 웹 구성 요소와 웹 애플리케이션을 실행하기 위한 서블릿 컨테이너(웹 컨테이너)에서 필요한 설정 파일, 라이브러리, 리소스 등을 포함한다.

구동 방식

  • JAR 파일은 JRE(Java Runtime Environment)만 존재하면 프로젝트 구동이 가능하다.
  • WAR 파일은 별도의 웹서버 또는 WAS가 있어야 프로젝트 구동이 가능하다.
  • 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

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를 통해 독립적으로 실행 가능하도록 패키징한 파일이다.

0개의 댓글