티스토리 뷰

Java

[JAVA] JAR 와 WAR

MAENCO 2021. 8. 23. 20:05
반응형

(참고: 단순히 각 아카이브의 개념을 이해하기 위하여 작성된 글입니다.)

 

스프링 프로젝트를 시작할 때 Jar 와 War를 보고 헷갈려했던 경우가 많았는데

이번 글에서 확실히 짚고 넘어가고자 한다

 

우선 이 파일들이 무엇을 위해 존재하는지부터 살펴보겠다

 

애플리케이션 배포

JAR와 WAR를 기준으로 살펴보자면

근본적으로는 둘다 애플리케이션 배포를 목적으로 사용되는 파일이다

애플리케이션 소스들을 배포할 시에 path등의 설정에서의 애로사항을 제거하기 위해 탄생한 압축(아카이브) 방식으로

이 압축파일들은 압축의 해제 없이 JDK에서 각 파일들을 접근하여 사용할 수 있도록 설계되어 있다

간단하게 말하자면 서버에 리소스, 속성 파일 등이 압축되어 있는 이 파일만 넣어주면 알아서 서비스(개발자가 만든)가 작동하는 것이다

 

JAR(Java Archive)

JAR는 JAVA 애플리케이션이 동작할 수 있도록 여러 개의 자바 클래스 파일과

클래스들이 이용하는 관련 리소스(텍스트, 그림 등) 같은 메타데이터를 하나의 파일로 모은다

여기에 ojdbc.jar , servlet.jar 같은 각 파일들에 대한 path 정보까지 유지하여 패키징 한 것이 바로 JAR이다

 

좀 더 쉽게 이해를 할 수 있도록 예시를 들어보자면

우리가 dependency를 추가할 때 내려받는 jar파일들을 떠올려보자

이 또한 다른 개발자들이 만든 자바 애플리케이션을 JAR 형식으로 압축하고

라이브러리로 또는 애플리케이션으로 배포되어 그 안에 있는 클래스와 리소스들을 우리가 자유롭게 사용하는 것이다

 

이렇게 하나의 파일로 압축하기 때문에 모든 파일을 개별적으로(자바 클래스 A, 자바 클래스 B...)

다운로드하지 않고도 전체 애플리케이션을 단일 파일로 다운로드할 수 있어 매우 편리하다는 장점이 있다

 

또한 JAR 파일의 경우 내장 WAS(톰캣 등의)를 이용한다는 특징이 있는데

이 경우에 이 때문에 WAR와 달리 webapp의 경로도 사용하지 않는다

즉 내장 WAS 사용에 최적화되어 있다는 것이다

JAR의 경우에 JRE(JAVA Runtime Environment)만 있어도 실행이 가능하기 때문에 간단한 애플리케이션의 제작/배포에 유리하다

 

WAR(Web Application Archive)

WAR는 웹 애플리케이션(Web Application Archive) 저장소란 뜻 그대로 웹 애플리케이션을 압축해 저장하는 파일이다

웹 애플리케이션의 구동을 위하여 Servlet, JSP, HTML, xml, servlet context 등을 압축하여 지원한다

 

개인적으로 이러한 설명들이 너무 와닿지 않아 쉽게 풀어보겠다

개발자가 웹 애플리케이션을 만들었다고 생각해보자

여기에는 자바 클래스, JSP, 서블릿, 웹 애플리케이션의 환경설정을 위한 xml 등의 파일, JAR 파일들이 포함되어 있을 것이다

이를 압축한 것이 바로 WAR 파일이다

 

이러한 방식을 통해 웹 애플리케이션의 '프로젝트' 를 폴더째로 전달해주는 것이 아니라

WAR 형식으로 압축된 파일만 건네주어 서버에 배포하면 되는 것이다

 

내장 서버를 사용하는 JAR와 달리 WAR의 경우 jsp 같은 기술을 지원하며

주로 외부 WAS에 배포하는 목적으로 사용한다고 한다

 

JAR와 WAR의 차이

JAR와 WAR는 아래와 같이 상황에 따라서 사용된다

• WAR는 Web Application을 배포할 때 사용한다

• JAR는 Library나 Java Application을 배포할 때 사용한다

 

결국 WAR와 JAR의 차이는 둘의 압축 범위를 구분 짓는 압축 형식이며

WAR 같은 경우 JAR를 같이 포함하고 있다

 

핵심정리

JAR는 자바 클래스 단위와 해당하는 리소스들을 압축한 것이고

WAR는 여기에 더해 외부 WAS에 배포할 경우 웹 애플리케이션의 설정 정보, 서블릿 등의 추가 파일들을 포함하여 압축한 것이다

 

내장 WAS를 사용하는 JAR의 경우 Library 또는 자바 애플리케이션을 배포할 때 사용하고 (내부 WAS -> JAR)

외장 WAS를 사용하는 WAR의 경우 외부 서버에 배포할 시 사용한다 (외부 WAS -> WAR)

 

 

 

반응형
댓글