ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WAR & JAR 차이
    프로젝트/영화예매 프로젝트 2024. 11. 25. 23:38

    WAR 란?

    웹 애플리케이션에 필요한 코드, 구성파일, 정적리소스, 라이브러리등을 패키징한 배포 파일.
    단, 내부의 tomcat이 없기에 WAR파일은 WAS에서 실행시켜야함 (독립적으로 실행 불가능)

    특징으로는, WEB-INF의 내부의 파일들의 경우 외부에서 직접적으로 접근하는 것을 차단할 수 있다. JAR파일의 경우 웹서버가 아닌 JVM에서 실행하는 것이어서 따로 spring security나 다른 방식으로 보완해야하지만 WAR의 경우 웹서버를 이용하므로 WEB-INF에 포함된 파일들의 외부 접근을 막을 수 있다.

     

     

     

    WAR 파일 내부구조

    WEB-INF
    - classes : 자바파일 및 클래스 파일
    - lib : 프로젝트에서 사용된 모든 jar 파일 위치

    META-INF
    - MANIFAST.MF : 메인 클래스 정보 및 스프링부트 버전 , 자바 버전등 메타데이터 정보

    static
    - css, javascript, 이미지 정적 파일들

    templates
    - thymeleaf와 같은 템플릿 엔진 파일

     

    WAR 파일 빌드 설정

    • build.gradle 수정
      • 플러그인 추가
      • bootWar 작성
      • tomcat 설정
    • MainClass 설정
      • SpringBootServletInitializer 상속
    • application properties
      • 컨텍스트 경로 설정
    1. [Build.gradle]
    plugins {
        id 'java'
        id 'war'
        ..
    }
    
    bootWar {
        mainClass = 'XXX'
        archiveFileName = "ROOT.war"
    }
    
    //...
    
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    //implementation...
    
    
    2. [Main.class]
    @SpringBootApplication
    public class MainApplication extends SpringBootServletInitializer {
    
    	public static void main(String[] args) {
    		SpringApplication.run(MainApplication.class, args);
    	}
    
    	@Override
    	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    		return application.sources(MainApplication.class);
    	}
    
    
    }
    
    
    3. [application.properties] 
    
    (WAR 배포시 기본 URL 경로)
    server.servlet.context-path=/

     

     

    WAR 빌드 방법

    1. 기존 파일 삭제 후 bootWar 빌드
    ./gradlew clean bootWar

    2. 일반적인 빌드
    ./gradlew build

    3. 테스트 없이 빌드
    ./gradlew build -x test

     

    war 실행방법)

    ex) Tomcat일경우, tomcat에 해당하는 위치에 war파일 넣기 ( /path/to/tomcat/webapps/ROOT.war )

    JAR 란?

    모든 파일을 압축하여 단일 파일로 제공하고, 플랫폼의 영향에 상관없이 독립적으로 실행이 가능한 특징을 지니고 있다.
    스프링 부트에서의 tomcat또한 내장을 하고 있어서 JAR파일 하나라도 충분히 application을 실행시킬 수 있는 특징이 있다.

    또한, 모든 파일을 관리하고 있으며 zip 파일로 만들어서 손쉽게 내부에 있는 파일 내용들을 확인할 수 있는 장점이 존재한다.

    하지만 파일이 의존성 규모에 따라 비대해질 수 있으며, 업데이트시마다 애플리케이션을 다시 로딩하는데에 시간 소요가 있을 수 있으며, zip파일로 디컴파일이 손쉽기 때문에 보안상의 이슈가 존재할 수 있다
    (대규모 프로젝트의 경우 적합하지 않을 수 있음)

     

     

    JAR 파일 내부구조

    BOOT-INF
    - classes : 자바파일 및 클래스 파일
    - lib : 애플리케이션이 의존하는 모든 jar 라이브러리 파일 모음

    META-INF
    - MANIFAST.MF : 메인 클래스 정보 및 스프링부트 버전 , 자바 버전등 메타데이터 정보

    org 
    - springframework : 스프링 부트 로더 클래스 포함

     

    JAR 파일 빌드 설정

    • build.gradle
      • bootJar 추가
      • tomcat 내장 설정
    1. [build.gradle]
    
    bootJar {
        mainClass = 'XXX'
        archiveFileName = 'application.jar'
    }
    
    //...
    implementation 'org.springframework.boot:spring-boot-starter-tomcat'
    //...

     

    JAR 빌드방법

    1. bootJar 빌드
    ./gradlew bootJar

    2. test 없이 빌드
    ./gradlew build -x test

    3. 기존파일 삭제후 빌드 .
    /gradlew clean build

    4. 일반적인 빌드
    ./gradlew build

     

    JAR 실행)

    java -jar [jar파일 이름].jar

     

     


    결론

    JAR VS WAR
    - 자체적으로 웹서버를 두어서 애플리케이션을 구동하고 싶다 (WAR)
    - JVM위에서 애플리케이션을 구동해도 상관없다 (JAR)
    - JSP를 사용해야할 경우 (WAR)
    (TOMCAT 표준은 JSP를 지원하지만, spring boot의 tomcat의 경우 추가적인 설정이 필요하며 WAR파일로 배포해야 jsp처리를 할 수 있다)
Designed by Tistory.