우와한 개발자

[Spring] Spring Boot에서 JAR와 WAR 차이 정리

by 우와한개발자

스프링 부트 프로젝트를 진행하다 보면 빌드 결과물로 JAR 또는 WAR 파일이 생성된다. 무슨 차이일까?

 

1. Archive 아카이브 란?

아카이브는 보관소 또는 묶음 파일을 의미한다. 즉, 여러 개의 파일을 하나로 압축해서 묶어놓은 것이다.

여러 파일을 하나로 묶어 관리하기 편하고 배포가 간단해진다.

 

2. JAR (Java Archive) 란? 

JAR란 자바 어플리케이션(자바로 만든 프로그램)을 하나의 실행 파일로 묶은 파일이다.

 

1) JAR 특징

  • Java 클래스 파일(.class), 리소스(application.yml 등), 메타데이터 포함
  • java -jar app.jar 로 단독 실행 가능
  • Spring Boot는 내장 서버(예: Tomcat embed) 를 함께 패키징할 수 있어, 별도 Tomcat 설치 없이 실행 가능

2) JAR 파일 구조

app.jar
├── META-INF/
│   └── MANIFEST.MF
└── BOOT-INF/
    ├── classes/
    │   ├── com/yourapp/...   (내 코드 .class)
    │   └── application.yml   (리소스)
    └── lib/
        ├── spring-boot-*.jar
        ├── spring-web-*.jar
        ├── tomcat-embed-*.jar   ← 내장 톰캣(서버 라이브러리)
        └── 기타 의존성들...

 

3. WAR ( Web Archive) 란?

WAR란 외부 WAS에 배포되는 웹 어플리케이션(프로그램)을 패키징한 파일이다.

보통 Tomcat 같은 서블릿 컨테이너(실무에선 WAS라고도 부름) 에 배포해서 실행한다.

 

1) WAR 특징

  • 단독 실행이 아니라, 외부 서버(Tomcat 등)가 로딩해서 실행
  • 하나의 Tomcat에 여러 WAR를 올려 운영하는 방식이 흔함

 

2) WAR 파일 구조

app.war
├── META-INF/
└── WEB-INF/
    ├── web.xml (있을 수도/없을 수도)
    ├── classes/
    │   └── com/yourapp/...   (내 코드)
    └── lib/
        ├── spring-web-*.jar
        ├── 기타 의존성...
        └── (보통 tomcat 관련은 없음)

 

4. JAR vs WAR 비교

구분 JAR WAR
의미 Java Archive Web Application Archive
용도 일반 Java 애플리케이션, 라이브러리 웹 애플리케이션
실행 방식 java -jar app.jar 외부 서버에 배포 필요
서버 내장 서버 포함 가능 외부 서블릿 컨테이너 필요
구조 비교적 자유로움 WEB-INF/ 구조 필수
Spring Boot 기본 패키지 방식 (원하면 변경 가능)
독립 실행 가능 불가능 (서버 필요)
배포 편의성 매우 편리 서버 설정 필요

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기