스프링 프로젝트를 생성하던 중 Jar, War에 대한 설정이 궁금해져서 공부해보게 되었다. 대부분의 경우 Jar를 선택하는 데 이 둘은 어떤 차이점이 있을까?
Jar, War
Jar(Java Archive), War(Web Application Archive)는 둘 다 java jar tool을 사용하여 압축된 아카이브 파일이다. 애플리케이션을 간단히 배포하고 어느 환경에서나 구동시킬 수 있도록 소스들이나 관련 파일들을 하나로 패키징한 것이다.
.jar 파일
- Java ARchive
- path 정보를 유지한 상태로 압축한다.
- 자바 클래스 파일과, 각 클래스들이 사용하는 관련 리소스파일 및 메타데이터을 압축한 파일이다.
- 실제로는 ZIP 파일 포맷으로 압축된 파일이다.
- 그러나 .jar파일은 압축을 따로 해제해주지 않아도 JDK에서 접근해서 사용할 수 있도록 지원한다.
.war파일
- Web application ARchive
- 웹 어플리케이션을 어떻게 설정할 지에 대한 정의가 있는 web.xml 파일이 있다.
- 배포 서술자라고 불리는 web.xml 파일을 통해 path 설정을 따로 해주어야 WAS(웹 애플리케이션 서버)가 이 것을 읽고 실행할 수 있다.
- 자바 서버 페이지, 자바 서블릿, 자바 클래스, XML, 파일, 태그 라이브러리, 정적 웹페이지(HTML 관련 파일) 및 웹 application을 구성할 때 필요한 자원을 압축한 jar 파일이다.
JAR VS WAR
- JAR는 JRE(Java Runtime Environmen)만 존재하면 프로젝트 구동이 가능하다.
- WAR는 별도의 웹서버 또는 WAS(웹 컨테이너)가 있어야 프로젝트 구동이 가능하다.
Spring Boot의 경우 Jar?
JAR, WAR 파일 애플리케이션 리소스를 패키징 하는 방법에 차이가 있을 뿐, 뭘 사용해야 하느냐는 개발자의 판단에 달려있다. 꼭 WAR를 사용해야만 하는 이유(꼭 JSP를 사용하여 화면을 구성해야 한다 / 외장 WAS를 이용할 계획이 있다)가 아니라면 뭘 사용할지에 대한 완벽한 해답은 없다고 볼 수 있다.
하지만 Sprinag boot에서 가이드하는 표준은 JAR(JSP, 외장톰켓을 안사용)이니까 JAR를 사용하여 서비스하는 것이 좋다.
스프링 부트의 경우 기본적으로 내장 톰캣을 가지고 있기 때문에 JAR 배포가 일반적이고 WAR로 배포하려면 약간의 수정이 필요하다.
'백엔드' 카테고리의 다른 글
Jackson 라이브러리를 활용한 (역)직렬화 다형성 - JsonTypeInfo / JsonSubTypes (0) | 2023.05.16 |
---|---|
Kafka-(de)Serialize 에러, ErrorHandlingDeserializer (0) | 2023.03.29 |
REST API (0) | 2021.11.28 |
Maven , Gradle (0) | 2021.11.16 |
Redirect & Forward , Servlet과 JSP 연동 (0) | 2021.08.29 |