독립 실행형 애플리케이션: 데스크톱 애플리케이션이나 콘솔 애플리케이션처럼 웹 서버 없이 자체적으로 실행되는 프로그램을 패키징 (예: java -jar MyProgram.jar 명령어로 실행)
재사용 가능한 라이브러리: 여러 프로젝트에서 공통적으로 사용되는 클래스 파일이나 리소스를 묶어서 라이브러리 형태로 배포할 때 사용 (예: 로깅 라이브러리, 데이터베이스 연결 라이브러리 등)
컴파일된 Java 클래스 파일(.class)
관련 리소스 파일 (이미지, 설정 파일 등)
META-INF/MANIFEST.MF 파일 (패키지에 대한 메타데이터)
구조: 특정 표준화된 디렉터리 구조를 강제하지 않으며, 개발자가 원하는 대로 구성할 수 있음
배포 및 실행: JRE(Java Runtime Environment)만 있다면 단독으로 실행하거나 다른 Java 애플리케이션의 클래스 경로에 추가하여 사용할 수 있음, Spring Boot 같은 프레임워크는 내장 웹 서버를 포함하여 JAR 파일을 웹 애플리케이션처럼 실행할 수 있게 해주기도 함
WAR 파일은 .war 확장자를 가지며, 웹 애플리케이션을 패키징할 때 사용
웹 서버(예: Tomcat, Jetty) 또는 WAS(Web Application Server)에 배포되어 실행
웹 애플리케이션 배포: 서블릿, JSP, HTML, CSS, JavaScript 파일 등 웹 애플리케이션의 모든 구성 요소를 하나의 파일로 묶어 웹 서버에 쉽게 배포
Java 클래스 파일 (WEB-INF/classes 디렉터리)
외부 라이브러리 JAR 파일 (WEB-INF/lib 디렉터리)
JSP 파일
HTML, CSS, JavaScript 등 정적 웹 리소스
web.xml (웹 애플리케이션 배포 설명자)
구조: 웹 애플리케이션 표준에 따라 미리 정의된 특정 디렉터리 구조를 따름
루트 디렉터리: HTML, JSP, CSS, JavaScript 등 클라이언트가 직접 접근하는 정적 웹 리소스
WEB-INF/: 웹 애플리케이션의 보안 및 설정 정보, 클래스 파일, 라이브러리 등을 포함. 클라이언트가 직접 접근할 수 없음
WEB-INF/web.xml: 웹 애플리케이션의 구성 정보를 담는 배포 설명자
WEB-INF/classes/: 컴파일된 서블릿 및 기타 Java 클래스 파일
WEB-INF/lib/: 웹 애플리케이션이 사용하는 외부 라이브러리 JAR 파일
배포 및 실행: 반드시 서블릿 컨테이너(웹 서버 또는 WAS)에 배포되어야 함. 컨테이너가 WAR 파일을 해석하고 웹 애플리케이션을 실행
| 구분 | JAR (Java ARchive) | WAR (Web Application Archive) |
|---|---|---|
| 용도 | 독립 실행형 Java 애플리케이션, 라이브러리 | 웹 애플리케이션 |
| 실행 환경 | JRE (Java Runtime Environment) | 서블릿 컨테이너 / WAS (예: Tomcat, Jetty) |
| 실행 방식 | java -jar app.jar | WAS에 배포 후 실행 |
| 포함 내용 | Java 클래스, 리소스, MANIFEST.MF | Java 클래스, JSP, 서블릿, HTML, CSS, JS, web.xml, 외부 라이브러리 |
| 디렉터리 구조 | 자유로운 구조 | 웹 표준 구조 고정 (WEB-INF, META-INF 등) |
| 대표 예시 | 콘솔 앱, 배치 프로그램, 유틸리티, Spring Boot 단일 실행 파일 | 웹 사이트, REST API 서버, 전통적인 웹 애플리케이션 |