Back-end/Java Language

JAR와 WAR의 차이점

prden 2022. 12. 10. 20:15

1. JAR와 WAR의 차이점

JAR SpringBoot의 내장톰켓 vs. WAR 외장톰켓, jsp 이용시

 

Maven 등을 통해 내려받는 라이브러리들(External Libraries)은 CLASS 파일들이 묶인 jar파일로 구성되어 있는 것을 확인할 수 있다.

그리고 서비스 배포시에는 프로젝트를 WAR 포맷으로 묶어서 /webapps 등의 지정된 경로에 넣고 Tomcat 등의 웹 컨테이너(Web Contaioner)를 이용하여  deploy하는 식으로 서비스를 많이 올리곤 한다.

 

JAR 과 WAR

.jar 확장자 파일에는 Class와 같은 Java 리소스와 속성 파일,  라이브러리 및 액세서리 파일이 포함되어 있다.
쉽게 JAVA 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일로 생각하면 된다. 실제로 JAR 파일은 플랫폼에 귀속되는 점만 제외하면 WIN ZIP파일과 동일한 구조이다.
JAR 파일은 원하는 구조로 구성이 가능하며 JDK(Java Development Kit)에 포함하고 있는 JRE(Java Runtime Environment)만 가지고도 실행이 가능하다.
원하는 구성을 할 수 있는 JAR 포맷과 달리 WAR은 WEB-INF 및 META-INF 디렉토리로 사전 정의 된 구조를 사용하며 WAR파일을 실행하려면 Tomcat, Weblogic, Websphere 등의 웹 서버 (WEB)또는 웹 컨테이너(WAS)가 필요하다.
WAR 파일도 JAVA의 JAR 옵션( java - jar)을 이용해 생성하는 JAR파일의 일종으로 웹어플리케이션 전체를 패키징하기 위한 JAR파일로 생각하면 된다.

https://ifuwanna.tistory.com/224

 

[Java] JAR WAR 차이점 및 특징 ( + EAR )

JAR (Java Archive) WAR (Web Application Archive) 모두 JAVA의 jar 툴을 이용하여 생성된 압축(아카이브) 파일이며 어플리케이션을 쉽게 배포하고 동작시킬 수 있도록 있도록 관련 파일(리소스, 속성파일 등).

ifuwanna.tistory.com

 

 

* 스프링부트에서의 JAR와 WAR

스프링부트 프로젝트를 새로 생성할 때, JAR(Java Archive) 또는 WAR(Web Application Archive) 로 패키징 방식을 선택할 수 있다.

 

JAR는 class 및 설정 파일들을 압축해서 만들어진 하나의 어플리케이션 혹은 라이브러리다. 

WAR는 JSP나 Servlet 등 WAS 컨테이너 위에서 동작하게끔 빌드된 형태이다. 웹 어플리케이션을 어떻게 설정할 지에 대한 정의가 있는 web.xml 파일을 포함( 반드시는 아님 Web Application Initailizer로 대체 가능하다.)

 

JAR파일에는 WAS가 내장되어 있다.( embedded tomcat을 jar에 내장해서, jar파일로도 빌드가 가능하다.)

따라서 기존 톰켓과 같은 컨테이너를 이용해야 했던 스프링보다 훨씬 간단하게 어플리케이션을 제작/배포할 수 있는 것입니다. 하지만 필요에 따라 외부 WAS를 이용해야할 경우도 생기는데, 이때는 WAR 파일로 패키징을 해야한다. 

 

※ SpringBoot에서 War 로 배포하는 법 : https://prde.tistory.com/330

(출처 : https://mongsil1025.github.io/til/server/warjar/)

https://programmer93.tistory.com/40

 

JAR vs WAR 차이점 - 삽질중인 개발자

JAR & WAR java 기반의 application의 배포 형태이다. JAVA JAR TOOL을 이용하여 압축한 압축 파일이다. ( 즉, 둘이 같은 압축 형태 ) JAR와 WAR는 사용 목적이 다르다. JAR Java ARchive path 정보를 유지한 상태로 압

programmer93.tistory.com

https://hye0-log.tistory.com/27

 

[Spring Boot]배포 방법 비교 (JAR vs WAR)

스프링 부트의 장점 중 하나는 실행 가능한 JAR (Executable Jar)로 빌드하여 프로젝트를 바로 실행시킬 수 있다는 점이다. 실제로 스프링부트 관련 문서를 보다 보면 "Executable Jar"라는 단어를 많이 볼

hye0-log.tistory.com

 

2. JVM, JDK, JRE의 차이점

https://ko.strephonsays.com/what-is-the-difference-between-jdk-and-jre

 

# 컴파일러가 컴파일하고 JVM이 읽어서 OS에게 명령~

1) Java 컴파일러 : java 프로그램을 바이트코드라는 중간 코드로 변환 -> 

2) JVM : Java Virtual Machine 으로 바이트 코드를 기계어 코드로 변환하는 추상 기계

( JVM은 플랫폼에 의존적이다. 즉 리눅스의 JVM과 윈도우의 JVM은 다르다. 단, 컴파일된 바이너리 코드는 어떤 JVM에서 도 동작시킬 수 있다. )

3) 소스코드는 CPU가 이해할 수 없고, 프로그래머만 이해 가능 ( Java Compiler가 소스코드 -> 바이트코드로 변환 

JVM이 바이트 코드 기계어 코드로 변환 따라서 CPU가 프로그램의 주어진 명령에 따라 작업 실행

4) JRE : 자바 런타임 환경으로 JVM, Java 클래스 라이브러리 및 Java 응용 프로그램을 실행하는데 필요한 기타 파일의 조합이다. 따라서 JRE를 설치하면 Java 프로그램만 실행할 수 있다.(프로그램 개발은 불가능)

5) JDK : 자바 개발 킷트 : JRE + 기타 개발도구(컴파일러(javac), 아카이버(jar), 문서생성기(javadoc))로 구성됨.

 

https://wikidocs.net/257

 

A2 JVM, JRE, JDK의 차이

자바에서 사용하는 용어 중 혼동하기 쉬운 JVM, JRE, JDK에 대해서 정리해 보자. ### JVM JVM은 자바 가상머신(Java Virtual Machine)의 ...

wikidocs.net

https://m.blog.naver.com/duqrlwjddns1/221770110714

https://m.blog.naver.com/duqrlwjddns1/221770110714

 

[Java] JDK? JRE? JVM?

자바를 공부하면서 헷갈리는 용어를 발견해 정리하고 넘어가고자 합니다. 설명에 앞서 Java의 철학은 다음...

blog.naver.com

 

'Back-end > Java Language' 카테고리의 다른 글

Exception Handling  (0) 2023.01.01
super()와 super  (0) 2022.12.11
직렬화(Serialization)  (0) 2022.10.12
for 문 자세히 알기  (0) 2022.03.20
Java heap, stack  (0) 2022.03.18