glog : cupucharm

[Spring Boot] JAR vs WAR 배포를 위한 선택 본문

SpringBoot

[Spring Boot] JAR vs WAR 배포를 위한 선택

오이호박참외 2023. 2. 3. 11:51

JAR? WAR?

WAR, JAR 파일은 Java의 jar명령어를 사용해 생성된 압축파일로, 애플리케이션을 쉽게 배포하고 실행할 수 있도록 필요한 파일들(리소스, 설정 파일 등)을 패키징해주는 것이 주 역할이다.

 

JAR (Java Archive)

  • Java 애플리케이션이 실행될 수 있도록 Java 프로젝트의 파일을 압축한 형식
  • Java 클래스 파일, 리소스 파일(속설 파일 등), 외부 라이브러리(JAR 파일)을 포함
  • JRE(JAVA Runtime Environment)만 있으면 실행 가능 (java -jar 프로젝트네임.jar 명령어로 실행)

 

WAR(Web Application Archive)

  • 웹 애플리케이션을 배포하기 위한 압축 파일 포맷으로, Servlet/JSP 컨테이너에 배치 가능
  • 웹 관련 리소스(JSP, Servlet, JAR, 클래스 파일, XML, HTML, JavaScript 등)를 포함
  • 사전 정의된 구조를 따르며, WEB-INF 및 META-INF 디렉토리를 포함해야 함
  • 별도의 웹 서버(WEB) 또는 웹 애플리케이션 서버(WAS)가 필요

 

차이점

  JAR WAR
용도 일반 Java 애플리케이션 및 라이브러리 웹 애플리케이션
구조 클래스 파일과 리소스만 포함 WEB-INF 디렉토리와 같은 특정 폴더 구조 포함
배포 대상 Java 애플리케이션이나 라이브러리로 사용 웹 서버(예: Tomcat)에서 실행
JAR 파일은 Java 애플리케이션을 패키징한 것이고, WAR 파일은 웹 애플리케이션 전체를 패키징하는 JAR 파일의 일종이다. WAR 파일은 웹 환경에서 실행되기 위해 필요한 모든 리소스를 포함하고, 특정 구조를 따라야 한다.

 

JAR WAR 선택의 기준

  JAR WAR
배포 환경 클라우드, Docker 등 현대적인 배포 환경에서 독립적인 실행을 원할 때 기존의 전통적인 웹 서버나 애플리케이션 서버에 배포할 때
내장 서버 사용 여부 내장 Tomcat 등 웹 서버를 포함하여 별도의 서버 설치 없이 실행할 때 외부 서버에 배포하고자 할 때, 내장 서버를 제외해야 할 경우
아키텍처 및 관리 마이크로서비스 아키텍처에 적합하여 각 서비스의 독립성을 유지하고 싶을 때 기존의 Java EE 환경이나 복잡한 배포 구조가 필요한 경우
특정 요구 사항 간편하고 신속한 배포를 원할 때 특정 보안 요구 사항이나 시스템 호환성 문제로 인해 선택해야 할 경우

 

Spring Boot를 사용한다면 JAR

  • Spring Boot는 내장 톰캣을 포함하고 있기 때문에 JAR 배포만으로 별도의 웹 서버 설치 없이도 실행 가능하다.
  • Spring Initializer에서도 기본 값이 JAR로 되어있다. 이는 Spring Boot의 특성과 배포 방식을 반영한다.
  • JAR 파일은 모든 의존성을 포함하여 단일 파일로 배포할 수 있으므로, 클라우드 환경이나 컨테이너된 환경(Docker 등)에서 쉽게 배포하고 실행할 수 있다.
  • JAR 파일은 JSP와 같은 웹 관련 리소스를 직접 포함할 수는 없지만, Spring Boot에서는 주로 다른 템플릿 엔진을 사용하여 동적 콘텐츠를 생성하는 경우가 많아, JAR 파일로도 충분히 웹 애플리케이션을 구현할 수 있다. (Spring Boot에서 JSP 사용 지양)