[ 개념정리 ] War 와 Jar 비교하기
💡 JAR 와 WAR 의 개념과 특징에 대해서 알아보자 !!
✅ WAR 와 JAR
▶️ War ( Web Application Archive ) 패키징
- 외부 서블릿 컨테이너
• 톰캣 , 제티 등 외부 서블릿 컨테이너에 배포
• 내장서버를 미포함 하기 때문에 외부 서블릿 컨테이너 설정에 의존
- 웹 애플리케이션 표준
• WAR 파일은 웹 애플리케이션 위한 표준 패키징 형식
- 일반적인 WAR 파일 디렉터리 구조
• .war 확장자를 가진 파일
• META-INF , WEB-INF 을 가지고 있다.
• Local 에서 정적 리소스 ( css , js , img ) 및 mybatis xml 파일들은 WEB-INF/classes 안으로 들어가게 된다.
• JSP 를 사용한 프로젝트의 경우 일반적으로 WAR 배포를 자주 사용한다.
❗ 정적 리소스가 WEB-INF 안에 있기 때문에 브라우저가 직접 접근 불가능
( 스프링 부트 또는 서블릿 설정을 통해 정적 리소스를 제공할 필요성이 있다. )
▶️ Jar ( Java Archive ) 패키징
- 내장 서버
• 스프링 부트의 내장 서버( 톰캣, 네티 등 ) 을 포함하여 단독 실행이 가능
- 간편한 배포
• 별도의 외부 서블릿 컨테이너 설치 없이 JAR 파일 하나로 실행이 가능
- 일반적인 JAR 파일 디렉터리 구조
• .jar 확장자를 가진 파일
• META-INF , BOOT-INF 을 가지고 있다. ( BOOT-INF 는 스프링부트 기준의 파일이다. )
• Jar 파일은 단독 실행이 가능토록 의존성 라이브러리를 모두 포함하여 크기가 war에 비해 더 크다.
▶️ War 와 Jar 의 장단점 비교
구분 | 장점 | 단점 |
WAR | • 기존에 WAR 배포 환경을 갖춘 시스템에 손쉽게 통합 가능 • 다양한 서블릿 컨테이너에서 사용 가능 |
• 외부 서블릿 컨테이너를 별도로 설치해야 함 • JAR 파일에 비해 배포과정이 좀 더 복잡 |
JAR | • 배포 과정이 빠르고 간편함 • 외부 의존성 없이 단독적으로 실행 가능 |
• 내장 서버에 제한되어 유연성 부족 • 특정 서블릿 컨테이너를 사용해야 하는 경우 WAR 배포가 더 낫다. |
👉 WAR 배포는 기존 시스템과의 호환성이 중요하거나, 다양한 서블릿 컨테이너 기능을 활용해야할 때
적합하다. JAR 배포는 빠르고 간편한 배포, 클라우드 환경에서 컨테이너 기반 배포시 적합하며
요즘은 왠만한 레거시 환경이 아닌 이상 빠르고 간편한 Jar 로 배포를 하는 추세인걸로 보여진다.