Java 프로젝트를 배포할 때 가장 많이 사용되는 두 가지 형식이 JAR(Java ARchive) 와 WAR(Web Application Archive) 입니다. 이번 포스팅에서는 이 JAR와 WAR에 대해 알아 보고 두 형식의 차이를 정리해 보겠습니다.
JAR란
특징
실행 방법
java -jar myapp.jar
파일 구조
myapp.jar
├── com/example/Main.class
├── com/example/utils/Helper.class
├── resources/config.properties
├── META-INF/MANIFEST.MF
└── lib/dependency1.jar
WAR란
특징
실행 방법
WAR 파일은 웹 애플리케이션 서버(WAS, Web Application Server) 가 있어야 실행할 수 있습니다. 즉, JAR처럼 java -jar로 바로 실행할 수는 없지만, 다음과 같은 방법으로 실행할 수 있습니다.
> WAR 파일 배포하여 실행
파일 구조
mywebapp.war
├── index.html
├── styles.css
├── images/logo.png
├── WEB-INF/
│ ├── web.xml
│ ├── classes/
│ │ ├── com/example/controller/HomeController.class
│ │ ├── com/example/service/UserService.class
│ ├── lib/
│ │ ├── spring-core.jar
│ │ ├── mysql-connector.jar
│ ├── views/
│ │ ├── home.jsp
│ │ ├── login.jsp
└── META-INF/
Spring Boot처럼 자체 WAS를 포함하는 경우 JAR 형식으로 배포하는 것이 일반적이지만, 기업 환경에서는 기존 WAS(Tomcat 등)에 배포하기 위해 WAR 형식을 사용하기도 합니다.
| 구분 | JAR | WAR |
|---|---|---|
| 용도 | 일반 Java 애플리케이션 | 웹 애플리케이션 |
| 포함 내용 | .class 파일, 리소스, 라이브러리 등 | 웹 관련 파일 (HTML, JSP, 서블릿, 정적 리소스 등) |
| 실행 방식 | java -jar 로 실행 가능 | 웹 서버(WAS)에 배포 후 실행 |
| 라이브러리 포함 방식 | JAR 파일 내부에 라이브러리 포함 가능 | /WEB-INF/lib/ 폴더에 JAR 파일 포함 가능 |
| 주로 사용되는 환경 | Java SE, JavaFX, Spring Boot (Standalone) | Java EE, Spring MVC, JSP 기반 프로젝트 |