패키징 방식에 대한 이해(.war & .jar)

Daniel·2023년 9월 26일
0

Back-End

목록 보기
28/42

근무하고있는 회사의 자사 솔루션 서비스들을 이용기관 서버에 배포를 하며 문득 왜 여기는 war로 말아서 배포하고 왜 여기는 jar로 말아서 배포할까?
라는 단순한 물음에서 시작된 궁금증이 이 포스트를 작성하게 된 이유입니다.

막연하게 톰캣쓰면 war 로 말아서 배포하고 안쓰면 jar로 말아서 배포하면 되는거아니야? 또는 스프링부트는 jar로 말아서 배포해야해 스프링부트에서 JSP 사용 못해~ 라고만 알고 있었는데요.
이 포스트를 작성하며 많은 개념? 지식을 좀 더 알게된 것 같아 뿌듯하네요ㅎㅎ

개발하다보면 두 파일 형식을 많이 보고 들어보셨을겁니다.
두 파일형식은 뭐고 차이점은 뭔지 알아보도록 하겠습니다.

.war, .jar 둘 모두 JAVA의 도구를 이용해 생성된 압축(아카이브) 파일이며
애플리케이션을 쉽게 배포하고 동작시킬 수 있도록 관련 파일(리소스, 속성파일 등) 들을 패키징 해주는 것이 주 역할입니다.

.war(Web Application Archive)

  • .war 확장자 파일은 servlet / JSP 컨테이너에 배치 할 수 있는 웹 어플리케이션 압축 파일 포맷 입니다.

  • Servlet Context 관련 파일들로 패키징되어 있습니다.

  • .war 파일에는 일반적으로 서블릿, 필터 및 기타 웹 관련 구성 요소를 구성하는 web.xml 배포 설명자가 포함됩니다.
    (위 파일은 웹 애플리케이션이 클라이언트와 동작하고 상호 작용하는 방식을 정의합니다.)

  • .war 은 웹 애플리케이션을 위한 포맷이기 때문에 웹 관련 Resource(HTML, JSP, JS, CSS, ...)만 포함하고 있습니다.

  • 원하는 구성을 할 수 있는 jar 포맷과 달리 war 은 WEB-INF 및 META-INF 디렉토리로 사전 정의 된 구조를 사용하며
    .war 파일을 실행하려면 Tomcat, Weblogic, Websphere 등의 웹 서버 또는 웹 컨테이너가 필요합니다.

  • JRE(JAVA Runtime Environment)만 있어도 실행이 가능합니다. (java -jar [프로젝트명].jar)

war 파일은 프론트엔드와 백엔드 구성 요소가 혼합되어 있습니다.
즉, 프론트엔드와 백엔드 모두를 포함하는 웹 애플리케이션 개발에 중점을 둡니다.

.jar(Java Archive)

  • . jar 확장자 파일은 Class와 같은 java 리소스와 속성파일, 라이브러리 파일이 포함되어 있습니다.

  • 독립형 JAVA 애플리케이션이 동작할 수 있는 자바 프로젝트를 압축한 파일입니다.

  • 서블릿 컨테이너가 필요하지 않습니다. HTTP 요청을 처리하거나 웹 서비스를 제공하지 않습니다.

  • 사용예 : 데스크톱 애플리케이션, 백엔드 서비스 등 다양한 애플리케이션에 적합합니다. 웹 관련 기능에만 국한되지 않습니다.

jar 파일은 일반적으로 애플리케이션의 백엔드 로직에 더 중점을 둡니다.

웹 애플리케이션과 독립형 애플리케이션?

필자는 궁금했습니다. 그래 war/jar 의 개념들? 알겠어 근데 웹 애플리케이션과 독립형 애플리케이션의 차이가 뭐야?
둘다 사용자 입장에서는 똑같은거아니야?

사용자 입장에서는 두 애플리케이션 모두 웹 서버로 간주될 수 있는데요.
하지만 미묘한 차이가 있습니다.

웹 애플리케이션은 웹 요청과 웹 콘텐츠 응답에 특화 되어있습니다.

뭔가 느낌이 오시나요? 웹 애플리케이션은 이름에 웹이라는 단어가 들어있는 만큼 웹 쪽에서는 전문적인 놈입니다.
사용자가 인터넷을 통해 웹브라우저에 접근하고 사용할 수 있도록 전문적으로 설계된 녀석이죠

데스크톱 애플리케이션, 기본 애플리케이션이로고도 하는 독립형 애플리케이션은
지금 보고계신 여러분들의 PC에 설치된 응용프로그램 같은 녀석인데요. (웹과는 크게 상관없는 녀석들...)
웹 쪽인 측면에서 보자면 보잘것 없는 녀석입니다. 하지만 Sping Boot와 같은 웹 프레임워크 또는 라이브러리를 만난다면?

아래와 같이 웹 관련 의존성을 설정해준다면?
Ex.

compile('org.springframework.boot:spring-boot-starter-web')

독립형 애플리케이션에서 웹 애플리케이션까지 기능이 확장된다는 말이죠...!

웹 프레임워크가 결합된 독립형 애플리케이션

그래서 확장되면 뭐가좋은데?? 하실텐데요.

여러가지가 있지만 제가 생각하는 가장 큰 이유는 유연성 이라고 생각합니다.

위 글에서 웹 애플리케이션은 프론트와 백엔드의 구성요소가 혼합되어있고,
독립형 애플리케이션은 백엔드에 좀더 집중했다고 했습니다.

웹 애플리케이션은 HTML, CSS, JSP, 등을 통해 화면을 구성하도록 되어있는데요.
웹 프레임워크가 결합된 독립형 애플리케이션은 React, Angular 또는 Vue.js와 같은 웹 프레임워크들과 통합하면 사용자 인터페이스(UI)를 디자인할 때 더 큰 유연성을 얻을 수 있습니다.
이러한 프레임워크는 대화형 및 반응형 UI를 구축하기 위한 강력한 도구를 제공할 수 있지 않을까요?

필자가 중요하게 생각하는 유연성 말고도 여러가지 이점들을 간략하게 설명하겠습니다.

  • 단일코드, 다중플랫폼
  • 웹 서비스와의 통합
  • 실시간 업데이트
  • 확장성
  • 브라우저 간 호환성
  • 개발 속도
  • 테스트 및 디버깅

요약하자면, 웹 프레임워크를 독립 실행형 애플리케이션과 통합하면 향상된 UI 개발부터 풍부한 도구 및 라이브러리 생태계에 대한 액세스에 이르기까지 광범위한 이점을 제공한다고 볼 수 있겠네요ㅎㅎ

정리

Spring Boot에서 가이드 하기를 표준은 jar로 패키징 하는 방식이라고 하네요.

위 이미지에서 설명하고자 하는 말을 간략하게 추려보면

우리는 REST_API 웹 서비스 뿐만아니라 Spirng MVC를 통해 동적 HTML 콘텐츠도 제공한다. (FreeMarker, Groovy, Thymeleaf, Mustache 를 통해...)
하지만 JSP는 피해야한다.

위와 같은데요.
종합해보면 JSP가 설정된 프로젝트를 jar 로 패키징하면 오류가 날 수 있다는 말이네요. ㅠㅠ

이제는 .war or .jar 두 가지의 패키징 방식을 상황에 맞게 사용하는 개발자가 될 수 있을것 같습니다...!

profile
응애 나 애기 개발자

0개의 댓글