[Server] JAR 와 WAR의 차이점

JAVA를 사용하여 만든 소프트웨어를 배포하려면 패키징을 해야 하는데, 보통 jar 또는 war로 배포를 합니다.

회사에서 보통 war파일을 배포한다 라고 말하는데, war파일이 대충 웹프로그램을 압축해 놓은 파일이라고 알기만 하고 지나갔었습니다. 제대로 정리를 하고 가고자 구글링을 했고, 여러 블로그에서 배운 내용을 이 글에 정리하고자 합니다.

자바 파일을 배포하는 방법

자바배포방식

1. JAR

JAR는 Java Archive의 약자입니다. class 및 설정 파일들을 압축해서 만들어진 하나의 어플리케이션 혹은 라이브러리입니다.

2. WAR

WAR는 Web Application Archive의 약자입니다. JSP나 Servlet 등 WAS 컨테이너 위에서 동작하게끔 빌드된 형태입니다.

웹 어플리케이션을 어떻게 설정할 지에 대한 정의가 있는 web.xml파일을 포함하고 있습니다. WAS가 동작을 하면 이 파일에서 설정들을 불러옵니다.

스프링부트에서의 JAR와 WAR

스프링부트 프로젝트를 새로 생성할 때, jar 또는 war 로 패키징 방식을 선택할 수 있습니다.

두 방식 모두 WAS 컨테이너 위에서 동작하게 되는데, 이는 JAR파일에 WAS가 내장되어 있기 때문입니다. embedded tomcat을 jar에 내장해서, jar파일로도 빌드가 가능합니다.

따라서 기존 톰켓과 같은 컨테이너를 이용해야 했던 스프링보다 훨씬 간단하게 어플리케이션을 제작/배포할 수 있는 것입니다.

하지만 필요에 따라 외부 WAS를 이용해야할 경우도 생기는데, (대부분의 실무에서는 그래서 WAR를 쓰나봅니다.) 때문에 이때는 WAR 파일로 패키징을 해야합니다.

JAR 배포 시 JSP 템플릿 프레임워크 작동하지 않음

스프링부트 공식문서에 따르면 JSP 프레임워크는 jar 배포시 작동하지 않는다고 정의되어 있습니다.

If possible, JSPs should be avoided. There are several known limitations when using them with embedded servlet containers.

jsp는 jar로 묶을 때, src/main/webapp/WEB-INF/jsp에 위치하다보니 jar에 포함되지 않습니다.

만약 jar 배포를 하고 싶은데, jsp를 같이 넣고 싶다면 src/main/resources/META-INF/resources/WEB-INF/jsp에 jsp 파일을 두면 jar에 포함되고, view도 잘 찾는다고 합니다.

출처 : https://seongtak-yoon.tistory.com/24

결론

  • 외장 WAS를 쓰셔야하는 환경이라면 war 배포
  • 내장 WAS를 써야하는 환경이라면 jar 배포를 하시면 됩니다.
  • jar와 달리 war는 WEB-INF 및 META-INF 디렉토리로 사전 정의된 구조를 사용하며, WAR 파일을 실행하려면 Tomcat, Weblogic, Websphere 등의 웹서버(WEB) 또는 웹컨테이너(WAS)가 필요합니다.

참고 문서

https://m.blog.naver.com/whdgml1996/221938516145

댓글남기기