WAR VS JAR
둘 다 Java에서 애플리케이션을 패키징하고 배포하는 데 사용되지만, 용도와 구조에서 차이가 있다.
1. JAR (Java Archive) 파일
Java 애플리케이션, 라이브러리, 또는 다른 자원들을 ZIP 형식으로 하나의 압축된 아카이브로 패키징한 파일.
여러 가지 Java 클래스 파일과 리소스를 포함한다
>> 구조
여러 개의 .class 파일, 이미지, 텍스트 파일 등의 리소스를 포함하며,
이 파일들은 META-INF / MANIFEST.MF 파일에 의해 정의된다.
이를 통해 실행 가능한 JAR로 만들면, java -jar yourfile.jar 명령어로 애플리케이션을 실행할 수 있다.
myApp.jar
├── META-INF/
│ └── MANIFEST.MF
├── com/
│ └── example/
│ ├── MyClass.class
│ └── AnotherClass.class
├── resources/
│ └── config.properties
└── lib/
└── external-library.jar
* META-INF / MANIFEST.MF
JAR 파일의 메타데이터를 포함한 파일.
이 파일에는 JAR의 특성, 의존성, 클래스 경로, 그리고 실행 가능한 메인 클래스를 지정할 수 있다.
예를 들어, Main-Class: com.example.MyClass와 같은 내용을 포함하면 JAR 파일을 실행할 때 이 클래스의 main() 메서드가 실행된다.
* .class 파일
Java 컴파일러가 생성한 바이트코드 파일입니다. 이 파일들이 JAR에 포함되어 실행할 수 있는 애플리케이션이 됩니다.
* 리소스 파일
이미지, 텍스트 파일, 설정 파일 등 애플리케이션에 필요한 리소스를 포함할 수 있습니다.
* 라이브러리
JAR 파일 내에서 다른 라이브러리 JAR 파일을 포함할 수 있습니다. lib/ 디렉토리에 외부 라이브러리를 포함하는 것이 일반적입니다.
>> 주 용도
JAR 파일은 주로 단일 Java 프로그램이나 라이브러리를 배포하는 데 사용된다
* Java 라이브러리
다른 Java 프로젝트에서 참조할 수 있는 재사용 가능한 코드 패키지.
예를 들어, Apache Commons 라이브러리(압축, 네트워킹 등 다양한 기능을 제공)는 JAR 파일로 제공된다.
* 데스크탑 애플리케이션
독립 실행형 애플리케이션을 만들 때 JAR 파일을 사용한다.
GUI 기반 프로그램이거나 CLI(Command Line Interface) 프로그램일 수 있다.
- 장점: 가볍고 단일 파일로 애플리케이션을 배포할 수 있다.
- 배포 및 실행
- JAR 파일은 Java 런타임 환경(JRE)이 설치된 시스템에서 java -jar 명령어로 쉽게 실행할 수 있다.
- 실행 가능한 JAR 파일은 META-INF/MANIFEST.MF 파일에 메인 클래스를 정의하여 배포된다.
예를 들어:
Main-Class: com.example.MyClass
2. WAR (Web ARchive) 파일
WAR 파일은 웹 애플리케이션을 배포하기 위한 패키지 파일.
주로 웹 서버 또는 서블릿 컨테이너에서 실행되는 웹 애플리케이션에 사용된다.
JSP, 서블릿, HTML, CSS, JavaScript 등의 웹 관련 리소스가 포함된다.
>> 구조
WAR 파일은 JAR 파일과 유사하게 압축된 아카이브 파일이지만, 구조가 웹 애플리케이션에 특화되어 있다.
일반적으로 WEB-INF 디렉터리가 있으며, 이 안에 web.xml (배포 설명자) 파일, 클래스 파일 및 라이브러리 JAR 파일들이 포함된다.
myWebApp.war
├── META-INF/
├── WEB-INF/
│ ├── web.xml
│ ├── lib/
│ │ └── some-library.jar
│ ├── classes/
│ │ └── com/
│ │ └── example/
│ │ └── MyServlet.class
│ └── jsp/
│ └── index.jsp
├── images/
│ └── logo.png
├── css/
│ └── styles.css
└── js/
└── script.js
* WEB-INF/
WAR 파일에서 가장 중요한 부분.
이 안에 서블릿 클래스 파일, 라이브러리, 설정 파일 등이 위치한다.
특히 web.xml 파일은 애플리케이션의 배포 설정을 정의한다.
* web.xml
배포 설명자.
서블릿의 URL 매핑, 리스너, 필터 등의 설정을 정의힌다.
예를 들어, MyServlet 클래스를 특정 URL 패턴에 매핑할 수 있다
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>
* lib/
애플리케이션에서 사용하는 외부 라이브러리 JAR 파일이 포함된다.
모든 의존성 라이브러리를 이 디렉토리에 배치하면 애플리케이션에서 사용할 수 있다.
* classes/
컴파일된 서블릿 클래스 파일이 위치하는 디렉토리.
* JSP, HTML, CSS, JS 등
WAR 파일에는 JSP(Java Server Pages), 정적 웹 리소스(HTML, CSS, JavaScript 등)도 포함될 수 있으며, 이를 통해 웹 애플리케이션을 구성한다.
>> 주 용도
WAR 파일은 웹 애플리케이션을 패키징하는 데 사용되며, 주로 서블릿, JSP, HTML 파일, JavaScript, CSS 등 웹 리소스와 Java 코드, 설정 파일을 모두 포함한다.
- 애플리케이션 예시: WAR 파일은 웹 기반 Java 애플리케이션 (예: 서블릿, JSP 기반 웹사이트)을 배포할 때 사용됩니다.
- 서버 배포: WAR 파일은 Tomcat, JBoss, WebLogic 같은 서블릿 컨테이너에 배포하여 실행합니다. 개발자는 war 파일을 서버에 배포하면 서버가 이를 자동으로 해석하고 실행합니다.
WAR와 JAR 파일의 주요 차이점
사용 목적 | Java 애플리케이션 또는 라이브러리를 패키징하고 배포 | Java 웹 애플리케이션을 패키징하고 웹 서버에 배포 |
주로 사용하는 환경 | 데스크탑 애플리케이션, 라이브러리 | 웹 서버에서 실행되는 애플리케이션 (서블릿, JSP 포함) |
구조 | .class 파일, 리소스, META-INF/MANIFEST.MF 파일을 포함 | WEB-INF/ 디렉터리, web.xml 배포 설명자, JSP, 서블릿, 리소스 포함 |
실행 방식 | java -jar 명령어로 실행 가능 | 웹 서버에 배포 후 HTTP 요청을 통해 실행 |
요약
- JAR 파일은 일반적인 Java 애플리케이션이나 라이브러리 파일을 배포할 때 적합하며, 데스크탑 환경에서 주로 사용된다.
- WAR 파일은 웹 애플리케이션을 배포할 때 필수적이며, 웹 서버와 같은 환경에서 실행되기 때문에 웹 기반 프로젝트에 적합하다.