참고: 밸로그
JAR?? WAR??
Spring boot 프로젝트를 생성하다보면 하단에 Packaging
으로 JAR
, WAR
을 택하라고 나온다. 이 JAR
하고 WAR
의 차이점은 무엇일까?
우선 이 두 옵션은 Java의 jar
옵션을 이용해 생성된 압축(아카이브) 파일이다.
Java -jar
이는 애플리케이션을 쉽게 배포하고 동작시킬 수 있도e록 관련 파일(리소스, 속성 파일 등)을 패키징한 것이다.
1️⃣ JAR (Java Archive)
- Java 에플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일
- Class(Java 리소스, 속성 파일), 라이브러리 파일 포함
- JRE(Java Runtime Environment)만 있어도 실행 가능
java -jar Project_name.jar
장점
- 독립적인 Java 애플리케이션을 패키징할 수 있고, 실행 가능한 JAR 파일로 만들어서 개발자가 쉽게 애플리케이션을 실행할 수 있다.
- 압축된 형식으로 클래스, 리소스, 라이브러리 등을 포함하므로 배포와 전달이 용이하다.
- Java 애플리케이션의 진입점인 main 메서드를 포함하고 있어 JVM에서 직접 실행하기 때문에 별도의 웹 컨테이너나 서버가 필요하지 않다.
단점
- 웹 애플리케이션을 개발할 때는 WAR 파일에 비해 제약사항이 있다. 예를 들어, JSP나 서블릿 컨테이너에 대한 표준 기능을 활용하기 어렵다.
- 웹 애플리케이션에서 동적인 웹 컨텐츠 생성 및 관리가 제한적이다.
2️⃣ WAR (Web Application Archive)
- Servlet / JSP 컨테이너에 배치할 수 있는 웹 에플리케이션 압축파일 포멧
- 웹 관련 자원을 포함 (JSP, Servlet, JAR, Class, XML, HTML, JavaScript)
- 사전 정의된 구조 사용 (WEB-INF, META-INF)
- 별도의 웹서버(Web) or 웹 컨테이너(WAS) 필요
- 즉, JAR파일의 일종으로 웹 에플리케이션 전체를 패키징하기 위한 JAR 파일
장점
- Java 웹 애플리케이션을 패키징하는 데 최적화되어 있고, 웹 구성 요소인 JSP, 서블릿, 필터, 리스너 등과 웹 애플리케이션을 실행하기 위한 서블릿 컨테이너(웹 컨테이너)에서 필요한 설정 파일, 라이브러리, 리소스 등을 포함하여 한 번에 배포 및 실행할 수 있습니다.
- 웹 컨테이너(서블릿 컨테이너)를 통해 애플리케이션을 실행하므로 다양한 웹 기능과 서버 환경을 활용할 수 있다.
단점
- 웹 컨테이너나 서버에 종속적이기 때문에 특정한 웹 컨테이너 환경이 필요하다.
- 배포 및 전달에 있어서 JAR 파일에 비해 크기가 크고 번거로울 수 있다.