≣ 목차
JAR란?
JAR(Java ARchive) 파일은 자바 애플리케이션을 패키징하기 위한 포맷으로, 클래스 파일, 메타데이터, 리소스 파일 등을 하나의 파일로 묶어 사용합니다. JAR 파일은 모든 의존성을 내장하고 있어 독립 실행이 가능하며, 이를 통해 어디서나 동일한 환경에서 애플리케이션을 실행할 수 있습니다. JAR 파일을 실행하기 위해서는 JRE(Java Runtime Environment)만 있으면 충분합니다. 즉, JRE가 설치된 환경이라면, 추가적인 설정 없이도 JAR 파일을 손쉽게 실행할 수 있습니다.
스프링 부트의 경우, 톰캣이 내장되어 있습니다. 이는 애플리케이션 코드 안에 톰캣과 같은 웹 애플리케이션 서버가 라이브러리 형태로 포함되어 있다는 의미입니다. 이렇게 함으로써, 개발자는 별도의 서버 설정 없이도 손쉽게 웹 애플리케이션을 배포하고 실행할 수 있습니다.
예시 코드: 스프링 부트 JAR 설정
build.gradle에서 JAR 패키징을 설정하는 예시
plugins {
id 'org.springframework.boot' version '3.1.0'
id 'io.spring.dependency-management' version '1.1.0'
id 'java'
}
jar {
enabled = true
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
참고로 스프링에서는 JAR를 사용하는 것을 권장하며, Jsp를 사용하는 것을 좋지 않게 생각합니다.
WAR란?
WAR(Web application ARchive) 파일은 서블릿, HTML, CSS, JavaScript 등 웹 애플리케이션을 구성하는 자원을 한데 모아 배포하는데 사용되는 자바 아카이브 포맷입니다. 즉, JAR(Java Archive)파일의 일종으로 웹 애플리케이션 전체를 패키징 하기 위한 JAR 파일입니다.
예시 코드: WAR 파일 설정
pom.xml에서 WAR 패키징을 설정하는 예시
<packaging>war</packaging>
<dependencies>
<!-- 스프링 프레임워크 관련 의존성 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.20</version>
</dependency>
<!-- 톰캣 서버 의존성 (제공) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
JAR와 WAR의 구동 방식 차이점
- JAR는 JRE( Java Runtime Environment )만 존재하면 프로젝트 구동이 가능합니다.
- WAR는 별도의 웹서버 또는 WAS ( 웹 컨테이너 )가 있어야 프로젝트 구동이 가능합니다.
JAR와 WAR의 차이는 리소스들을 하나의 파일로 패키징 하는 과정의 차이가 있는 것 입니다.
WAR vs JAR 차이점 비교
배포의 유연성
WAR: 서버에 종속적이어서 서버의 기능과 환경을 최대한 활용할 수 있다. 대규모 및 복잡한 애플리케이션에 유리
JAR: 어디서나 실행 가능한 구조라서 빠른 개발과 테스트, 배포에 좋다. 특히 마이크로서비스 아키텍처에 적합
프로젝트의 복잡성
WAR: 서버의 고급 기능(보안, 세션 관리 등)을 활용할 수 있어서 복잡한 웹 애플리케이션 운영에 효과적
JAR: 간단하고 독립적인 서비스에 적합해. 빠른 개발과 배포가 가능
결론
JAR, WAR 파일 애플리케이션 리소스를 패키징 하는 방법에 차이가 있을 뿐, 뭘 사용해야 하느냐는 개발자의 판단에 따를 뿐이다. 꼭 WAR를 사용해야만 하는 이유(꼭 JSP를 사용하여 화면을 구성해야 한다 / 외장 WAS를 이용할 만큼 대규모 프로젝트 계획이 있다)가 아니라면 뭘 사용할지에 대한 완벽한 해답은 없는 듯하다. Sprinag boot에서 가이드하는 표준은 JAR이니까 JAR를 사용하여 서비스하는 것도 괜찮은 선택이라고 본다.
참고
'Spring' 카테고리의 다른 글
[Spring Boot] 다양한 외부 설정 방법 #1 (2) | 2024.10.13 |
---|---|
[Sprign Boot] Auto Configuration 정리 - @Conditaional (2) | 2024.10.10 |
[Spring] Spring AOP의 한계 (0) | 2024.10.04 |
[Spring] Spring AOP 사용 시 내부 호출 문제 해결 방법 (0) | 2024.10.03 |
[Spring] 스프링 포인트컷 지시자 정리 (0) | 2024.10.01 |