백엔드

Jar VS War

쩨이호 2022. 11. 15. 13:50

스프링 프로젝트를 생성하던 중 Jar, War에 대한 설정이 궁금해져서 공부해보게 되었다. 대부분의 경우 Jar를 선택하는 데 이 둘은 어떤 차이점이 있을까?

Jar ? War ?

 

Jar, War

Jar(Java Archive), War(Web Application Archive)는 둘 다 java jar tool을 사용하여 압축된 아카이브 파일이다. 애플리케이션을 간단히 배포하고 어느 환경에서나 구동시킬 수 있도록 소스들이나 관련 파일들을 하나로 패키징한 것이다.

.jar 파일

  • Java ARchive
  • path 정보를 유지한 상태로 압축한다.
  • 자바 클래스 파일과, 각 클래스들이 사용하는 관련 리소스파일 및 메타데이터을 압축한 파일이다.
  • 실제로는 ZIP 파일 포맷으로 압축된 파일이다.
  • 그러나 .jar파일은 압축을 따로 해제해주지 않아도 JDK에서 접근해서 사용할 수 있도록 지원한다.

.war파일

  • Web application ARchive
  • 웹 어플리케이션을 어떻게 설정할 지에 대한 정의가 있는 web.xml 파일이 있다.
  • 배포 서술자라고 불리는 web.xml 파일을 통해 path 설정을 따로 해주어야 WAS(웹 애플리케이션 서버)가 이 것을 읽고 실행할 수 있다.
  • 자바 서버 페이지, 자바 서블릿, 자바 클래스, XML, 파일, 태그 라이브러리, 정적 웹페이지(HTML 관련 파일) 및 웹 application을 구성할 때 필요한 자원을 압축한 jar 파일이다.

JAR VS WAR

  • JAR는 JRE(Java Runtime Environmen)만 존재하면 프로젝트 구동이 가능하다.
  • WAR는 별도의 웹서버 또는 WAS(웹 컨테이너)가 있어야 프로젝트 구동이 가능하다.

Spring Boot의 경우 Jar?

JAR, WAR 파일 애플리케이션 리소스를 패키징 하는 방법에 차이가 있을 뿐, 뭘 사용해야 하느냐는 개발자의 판단에 달려있다. 꼭 WAR를 사용해야만 하는 이유(꼭 JSP를 사용하여 화면을 구성해야 한다 / 외장 WAS를 이용할 계획이 있다)가 아니라면 뭘 사용할지에 대한 완벽한 해답은 없다고 볼 수 있다.

하지만 Sprinag boot에서 가이드하는 표준은 JAR(JSP, 외장톰켓을 안사용)이니까 JAR를 사용하여 서비스하는 것이 좋다.

스프링 부트의 경우 기본적으로 내장 톰캣을 가지고 있기 때문에 JAR 배포가 일반적이고 WAR로 배포하려면 약간의 수정이 필요하다.