Java | JAR, WAR 그게 뭔디요?

바다·2024년 4월 19일
0

Java

목록 보기
9/18
post-thumbnail

영한님의 스프링 MVC 강의를 듣던 중...
스프링 초기 세팅을 하는데!

"JSP 써야 하니까 JAR 말고 WAR 를 선택하세요!"

ㄹㅇ 이런 표정으로 영한샘를 바라보게 된 나...
항상 JAR 선택해서 썼지만? 그게 뭔지도 몰랐던 나!

이번 기회에 JAR와 WAR를 간단하게 알아 보려고 한다 🧐


그래서 JAR, WAR 그게 뭔데..?

JAR(Java Archive)
WAR(Web Application Archive)

JAR와 WAR 모두 Java의 jar 툴을 이용하여 생성된 압축(아카이브)파일!
어플리케이션을 쉽게 배포하고 동작시킬 수 있도록 관련 파일(리소스, 속성 파일)을 패키징해주는 것이 주 역할이다

JAR (Java Archive)

  • Class와 같은 Java 리소스, 속성파일, 라이브러리 파일 등이 압축된다
  • 쉽게 말해서 Java 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 것이다
  • .jar확장자를 가진다
  • 플랫폼에 귀속되는 점을 제외하면 .jar 와 .zip은 동일한 구조이다
  • 원하는 구조로 구성이 가능하다
  • JDK에 포함하고 있는 JRE만 가지고도 실행이 가능하다

장점

  • 독립적인 Java 애플리케이션을 패키징할 수 있고, 실행 가능한 JAR 파일로 만들어서 개발자가 쉽게 애플리케이션을 실행할 수 있다
  • 압축된 형식으로 클래스, 리소스, 라이브러리를 포함하기 때문에 배포와 전달에 용이하다
  • Java 애플리케이션의 진입점인 main 메서드를 포함하고 있어 JVM에서 직접 실행하기 때문에 별도의 웹 컨테이너나 서버가 필요하지 않다

단점

  • 웹 애플리케이션을 개발할 때, WAR 파일에 비해 제약사항이 있다
    JSP, 서블릿 컨테이너에 대한 기능을 활용하기 어렵다
  • 웹 애플리케이션에서 동적인 웹 컨텐츠 생성 및 관리가 제한적이다

WAR (Web Application Archive)

  • Servlet / JSP 등을을 WAS 컨테이너 위에서 동작하게끔 빌드된 압축 파일 포맷이다
  • JSP, SERVLET, JAR, CLASS, XML, HTML, JAVASCRIPT 등 Servlet Context 관련 파일들로 패키징되어 있다
  • WAR는 웹 응요 프로그램을 위한 포맷이기 때문에 웹 관련 자원만 포함하고 있으면 이를 사용해서 웹 애플리케이션을 쉽게 배포하고 테스트할 수 있다
  • WEB-INF / META-INF 와 같은 사전 정의된 구조를 사용한다

장점

  • Java 웹 애플리케이션을 패키징하는 데 최적화 되어 있다
  • 웹 구성 요소 (JSP, Servlet, Filter, Listener)와 웹 애플리케이션을 실행하기 위한 서블릿 컨테이너에서 필요한 설정 파일, 라이브러리, 리소스 등을 포함해서 한 번에 배포 및 실행을 할 수 있다
  • 웹 컨테이너(서블릿 컨테이너)를 통해 애플리케이션을 실행하기 때문에 다양한 웹 기능과 서버 환경을 활용할 수 있다

단점

  • 웹 컨테이너나 서버에 종속적이기 때문에 특정한 웹 컨테이너 환경이 필요하다
  • 배포 및 전달에 있어서 JAR 파일에 비해 크고 번거로울 수 있다
  • 원하는 구조로 생성이 불가능하다

JAR, WAR 그래서 뭘 써야 하나요?

SpringBoot를 사용한다면...

  • 스프링부트는 내장 Tomcat 서버를 가지고 있기 때문에 JAR 로 패키징 하는 것이 일반적이다
    스프링부트에서 가이드하는 표준도 JAR 이다..!

  • 하지만 꼭 JSP로 화면을 구성해야 한다, 외장 WAS를 사용해야 한다면 WAR 로 패키징을 하자!

JAR, WAR 선택시 고려 사항

  1. 프로젝트 유형
    JAR : 독립적인 Java 애플리케이션
    WAR : 웹 애플리케이션

  2. 배포 환경
    JAR : 애플리케이션을 서버나 웹 컨테이너 없이 실행
    WAR : 애플리케이션 실행을 위해 특정한 웹 컨테이너에서 호스팅 해야 하면

  3. 기능 요구사항에 따라서
    JAR
    - 일반적인 Java 애플리케이션에 적합
    - 독립 실행 가능한 형태
    - 개발자가 애플리케이션을 실행하고 테스트 가능
    WAR
    - 웹 애플리케이션의 웹 구성요소(Servlet, JSP 등) 포함
    - 웹 애플리케이션 개발에 필요한 기능을 활용

  4. 확장성
    JAR : 독립적인 애플리케이션을 패키징, 특정한 환경에 종속되지 않고 단일 기능을 수행하는 애플리케이션을 개발하는 데 적합
    WAR : 웹 애플리케이션의 구성 요소를 통합하여 패키징하기 때문에, 웹 컨테이너의 다양한 기능과 라이브러리를 활용할 수 있어서 확장성 높음

개발자가 잘 판단해서 사용하자!

JAR, WAR는 애플리케이션 리소스를 패키징 하는 방법에 차이가 있을 뿐!
뭘 사용하느냐는 개발자의 판단에 따른다! 완벽한 답은 없다 :-)

profile
ᴘʜɪʟɪᴘᴘɪᴀɴs 3:14

0개의 댓글