배경
그동안 스프링 부트 프로젝트 생성 시 패키지 생성 부분에서 무작정 Jar를 선택해왔다. 갑자기 가만 보니 저 둘은 무슨 차이가 있는지 잘 모르고 있다는 것을 알았다.
그래서 각 용어의 개념들을 보고 Spring Boot 기반의 프로젝트는 어떤 걸 선택하는지 알아보겠다.
개념
JAR(Java ARchive, 자바 아카이브)
- 여러 개의 자바 클래스 파일과 클래스들이 이용하는 관련 리소스(텍스트, 그림 등) 및 메타데이터를 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷
- 데스크톱 애플리케이션에서 구동
WAR(Web application ARchive, 웹 애플리케이션 아카이브)
- JSP, Servlet, Class, XML, 태그 라이브러리, 정적 웹 페이지 및 웹 애플리케이션을 함께 이루는 기타 자원을 한데 모아 배포하는 데 사용되는 파일 포맷
- 애플리케이션 서버에서 구동
Spring Boot에서 JAR
Spring Boot에서는 JAR가 디폴트인데 그 이유는 JSP에 있다.
아래는 Spring Boot 공식 문서의 내용이다.
- JSP는 executable jar을 사용할 때는 지원하지 않는다.
- Undertow는 JSP를 지원하지 않는다.
- 커스텀 error.jsp 는 에러 핸들링을 위한 디폴드 뷰를 오버라이드 하지 않는다.
위와 같은 이유로 Spring Boot는 jar를 권장하는 것처럼 보인다.
<참고>
https://ko.wikipedia.org/wiki/JAR_(%ED%8C%8C%EC%9D%BC_%ED%8F%AC%EB%A7%B7)
https://ko.wikipedia.org/wiki/WAR_(%ED%8C%8C%EC%9D%BC_%ED%8F%AC%EB%A7%B7)
https://stackoverflow.com/questions/5871053/difference-between-jar-and-war-in-java
https://old-developer.tistory.com/m/171