[Java] 웹 애플리케이션 배포 방식: JAR와 WAR의 차이점과 Spring Boot

Woomin Wang ·2025년 5월 13일

[Java]

목록 보기
9/10
post-thumbnail

JAR은 왜 생겼을까?

Java는 JVM만 있으면 OS에 관계없이 .class 파일을 실행할 수있는 독립적인 언어입니다. 하지만 현실에서는 하나의 프로그램이 여러 개의 .class, 설정 파일, 라이브러리로 구성되며, 이를 매번 따로 관리하기엔 너무 번거롭습니다.

그래서 등장한 것이 JAR(Java ARchive)입니다.
JAR은 관련된 파일들을 하나의 압축 파일로 묶어, 다음처럼 실행할 수 있게 해줍니다.

java -jar myapp.jar

이렇게 실행하려면, 내부의 MANIFEST.MF 파일에 Main-Class가 지정되어 있어야 합니다.
JAR은 일반 Java 애플리케이션을 쉽게 배포하고 실행하기 위해 만든 포맷입니다.


WAS와 WAR의 관계: 웹 요청이 처리되는 구조

하지만 웹 애플리케이션은 콘솔 프로그램처럼 단순히 main() 함수에서 시작해 끝나는 구조가 아닙니다. 웹 애플리케이션은 사용자의 요청이 있어야 비로소 동작을 시작하는 이벤트 기반 구조입니다.

이때 사용자의 요청을 받아들이는 것이 바로 WAS(Web Application Server)이며, 대표적으로는 Tomcat, Jetty 등이 있습니다.

클라이언트가 브라우저를 통해 HTTP 요청을 보내면, 이 요청은 먼저 WAS(Web Application Server)에 도달합니다. WAS는 내부의 Servlet Container에게 요청을 전달하고, Servlet Containerweb.xml 설정 파일이나 애노테이션 정보를 참고해 해당 요청에 매핑된 Servlet 클래스를 찾아 실행합니다. 이렇게 실행된 Servlet은 비즈니스 로직을 처리한 후, 응답 데이터를 생성하여 WAS를 통해 다시 클라이언트에게 전달합니다.

이 전체 과정의 핵심에는 WAR(Web Application Archive) 파일이 있습니다. WAR는 하나의 완성된 웹 애플리케이션 배포 단위로, HTTL, CSS, JS, 이미지, .class 파일, 라이브러리, JAR, 설정 파일 등을 포함한 압축 파일입니다. 이 WAR 파일은 개발자가 작성하지만, 실제로는 WAS가 설치된 서버의 지정된 위치에 배포되어 WAS가 소유하고 관리하게 됩니다.

서버가 시작되면 WAS는 WAR 파일을 탐지하고 내부적으로 압축을 해제해 실행 가능한 형태로 준비합니다. 이후 Servlet Container가 이 구조를 기반으로 HTTP 요청을 처리합니다. 즉, WAR는 WAS와 Servlet Container가 웹 애플리케이션을 실행하기 위해 반드시 필요한 표준화된 구조이며, 배포 이후에는 WAS의 통제 하에 동작하는 실행 단위라고 볼 수 있습니다.


WAR 내부 구조 예시

mywebapp.war
├── index.html
├── images/
├── css/
└── WEB-INF/
    ├── web.xml         ← 서블릿 설정 파일
    ├── classes/        ← 컴파일된 서블릿(.class)
    └── lib/            ← 외부 라이브러리(JAR)

WEB-INF웹 애플리케이션의 보안 영역으로, 외부(클라이언트)에서는 직접 접근할 수 없습니다. 이 폴더는 오직 WAS 내부의 Servlet Container만 접근할 수 있도록 설계되어 있으며, 애플리케이션의 동작에 필수적인 설정 파일, 클래스 파일, 외부 라이브러리 등을 담고 있습니다.

그 외의 index.html, css/, images/ 같은 정적 자원들은 클라이언트가 브라우저를 통해 직접 요청하고 확인할 수 있는 영역입니다.


JAR와 WAR의 차이와 용도 정리

JAR (Java ARchive)

  • Java 클래스 파일과 리소스를 하나로 묶은 압축 포맷
  • 주로 라이브러리나 실행 가능한 Java 애플리케이션 형태로 사용됨

WAR (Web Application Archive)

  • 웹 애플리케이션을 구성하는 모든 파일을 묶은 압축 포맷
  • 내부에는 HTML, CSS, JS, 이미지, 클래스 파일, JAR 파일 등 웹 애플리케이션 실행에 필요한 모든 리소스 포함
  • JAR 파일을 포함할 수 있는 웹 애플리케이션 배포 포맷

Spring Boot는 어떻게 JAR을 사용할까?

기존에는 Java 웹 애플리케이션을 만들면 반드시 WAR 파일을 생성하여 Tomcat과 같은 웹 애플리케이션 서버에 배포해야 했습니다. 이 과정은 꽤 번거롭고 설정이 많았습니다. Tomcat 서버를 설치하고, 설정 파일을 수정하며, WAR 파일을 배포하는 등 여러 단계를 거쳐야 했습니다.

이 번거로움을 해결하기 위해 등장한 것이 바로 Spring Boot입니다.
Spring Boot는 내장 Tomcat을 제공하여 서버 설정과 배포 과정을 단순화했습니다. Spring Boot는 JAR 포맷을 사용하여 웹 애플리케이션을 실행 가능한 독립형 애플리케이션으로 만들 수 있게 해줍니다.

Spring Boot의 JAR 파일은 기존의 WAR 파일처럼 서버에 배포할 필요 없이, 애플리케이션 코드 (Controller, Service 등), HTML/JSP 리소스, 의존성 라이브러리, 내장 Tomcat 서버를 모두 포함하여, 단일 JAR 파일로 애플리케이션을 실행할 수 있도록 했습니다.


마무리

JAR과 WAR의 차이점을 알아보면서, JAR 파일은 독립 실행형 애플리케이션을 간편하게 배포하고 실행할 수 있는 포맷인 반면, WAR 파일은 웹 서버에 배포되는 웹 애플리케이션 포맷이라는 점에서 차이가 있음을 알게 되었습니다. 그 과정에서 웹 애플리케이션 서버(WAS)의 동작 방식과 Spring Boot가 JAR 파일 방식을 사용한다는 점도 배우게 되어 흥미로웠습니다. 관련 내용들은 앞으로 Spring을 학습하면서 더 깊이 탐구할 계획입니다.


참고 문서

profile
Backend Developer

0개의 댓글