JAR vs. WAR

이도형·2025년 12월 2일

JAR

JAR (Java ARchive)는 Java 애플리케이션 이나 라이브러리를 배포할 때 사용되는 압축 파일 형식

특징

  • Java 클래스 파일 (.class), 리소스(이미지, 속성 파일 등), 메타데이터(MANIFEST.MF 등)을 하나로 묶어 배포 및 관리 단순화
  • JAR는 Main-Class 속성이 포함된 MANIFEST 파일을 정의해 바로 실행 가능한 애플리케이션을 만듦
  • JVM과 JRE만 있으면 별도의 웹 서버 없이 명령어(java -jar)를 통해 실행 가능

WAR

WAR (Web Application Archive)는 Java 웹 애플리켕션을 패키징해서 웹 서버나 WAS에 배포할 때 사용하는 파일 형식

특징

  • WAR 파일은 사전 정의된 디렉터리 구조 (WEB-INF, META-INF 등)을 가짐
  • 서블릿, JSP, 정적 리소스, web.xml 같은 배포 설명자 포함
  • WAR 파일 자체 직접 실행할 수 없고, Tomcat, WebLogic, WebSphere 등 웹 컨테이너에서 배포하여 실행
  • 다양한 웹 서버 환경과의 호환성, 대규모 웹 시스템 통합 등에서 활용도가 높음

비교

결론

JAR는 단독 실행, 빠른 배포가 장점이고,
WAR는 대규모시스템과 호환, 표준 웹 앱 구조 제공이 장점이다.
실무에서는 Spring Boot 처럼 내장 WAS를 사용하는 경우 JAR로 단일 실행 파일 배포가 쉽고,
전통적인 웹 시스템 및 WAS와 연동을 위해서라면 WAR가 적합하다.

부록

JVM (Java Virtual Machine) : 바이트코드 실행 엔진

  • 자바 바이트코드(.class 파일)을 각 운영체제에서 실행할 수 있도록 해석하고 실행하는 가상 머신
  • 운영체제에 맞게 Java 애플리케이션 실행
  • 메모리 관리, 가비지 컬렉션, 스레드 관리, 보안 등 담당
  • JVM 덕분에 자바는 WORA (Write Once, Run Anywhere) 즉, 플랫폼 독립적으로 동작

JRE (Java Runtime Environment) : 실행 환경 패키지

  • 자바 프로그램을 실행하기 위한 환경(런타임 환경)
  • JVM과 자바 표준 라이브러리 , 기타 리소스 파일을 포함한 패키지
  • 개발자가 아닌 일반 사용자는 프로그램 실행만 필요하므로, JRE만 설치하면 됨
  • JRE는 JDK에 포함되어 있지만, 개발 도구 는 포함하지 않음

MANIFEST 파일 : 클래스 경로 및 메타정보

  • JAR 또는 WAR 내부에 META-INF/ 폴더에 위치하며, 아카이브에 대한 여러 메타 정보 기술하는 텍스트 파일
  • 주요 용도는 애플리케이션의 진입점, 클래스 패스 정의, 버전 정보 등 설정에 사용

Servlet

  • 자바로 작성된 서버 측 프로그램
  • 클라이언트의 HTTP 요청을 받아 처리하고 동적 웹 페이지를 생성하여 응답 반환
  • HttpServletRequest와 HttpServletResponse 객체를 통해 요청과 응답 관리
  • 웹 서버가 WAS에 요청 전달 시, WAS가 해당 서블릿을 실행해 필요한 로직 수행 후 결과를 웹 브라우저에 전송

JSP (Java Server Pages) : 웹 페이지 생성 기술

  • HTML 내에 자바 코드를 삽입하여 서버에서 동적으로 웹 페이지 생성하는 기술
  • 실행 시 Servlet으로 변환되어 컴파일되고 실행, Servlet 쉽게 작성할 수 있는 템플릿 역할
  • 복잡한 웹 페이지를 쉽게 만들 수 있게 돕고, DB 연동, 세션 관리 등 가능
  • WAS에서 실행 가능

WAS (Web Application Server) : 웹 앱 실행환경 제공 미들웨어

  • 웁 애플리케이션의 실행 환경을 제공하는 미들웨어
  • 동적인 웹 컨텐츠 처리
  • 웹 서버가 정적인 리소스(HTML, 이미지 등) 처리하는 반면, WAS는 DB 연동, 세션 관리, 비즈니스 로직 처리 같은 동적 요청 담당
  • 대표적인 WAS : Tomcat, IBM WebSphere, Jeus
profile
열심히 살고 싶습니다! 일하고 싶습니다 :)

0개의 댓글