자바 개발을 하다 보면 JAR, WAR, EAR 같은 단어를 많이 듣게 됩니다.
“이게 대체 뭐고 언제 뭘 써야 하지?”
아래 이미지와 함께 구조적 차이와 Spring Boot에서의 선택 기준을 쉽게 설명드릴게요.
📦 JAR / WAR / EAR 구조 한눈에 보기
위 그림을 보면 구조를 직관적으로 알 수 있어요:
- JAR: 클래스 파일과 설정이 들어간 기본 단위
- WAR: 웹 애플리케이션 배포용, WEB-INF, web.xml 포함
- EAR: 여러 WAR + JAR 묶은 엔터프라이즈 통합 패키지
🔍 각 파일의 의미
✅ JAR (Java ARchive)
- 자바 클래스와 메타정보를 하나로 압축한 파일
- 애플리케이션이나 라이브러리를 배포할 때 사용
- .class, META-INF/manifest.mf 포함
✅ WAR (Web Application Archive)
- 웹 애플리케이션을 위한 구조
- JSP, Servlet 기반 웹 프로젝트를 배포하는 데 사용
- WEB-INF/web.xml, classes, lib 등 구조 고정
✅ EAR (Enterprise ARchive)
- 기업용 대규모 시스템 통합 배포에 사용
- 여러 WAR, JAR 모듈을 하나로 묶은 컨테이너
- WebLogic, JBoss 같은 Java EE 서버 환경에 최적화
🚀 Spring Boot에서의 JAR vs WAR
항목 JAR (기본값) WAR
| WAS 포함 |
✅ 내장 Tomcat 내장 |
❌ 외부 WAS 필요 |
| 실행 방식 |
java -jar로 바로 실행 |
Tomcat, WebLogic 등에서 배포 |
| 설정 편의성 |
간단한 구조, 빠른 실행 |
web.xml, 복잡한 디렉토리 구조 |
| JSP 지원 |
❌ JSP 미지원 (공식 비권장) |
✅ JSP 사용 가능 |
| 활용 예시 |
REST API, 간단한 마이크로서비스 |
JSP/Servlet 중심 웹 프로젝트, 전통 웹앱 |
🧩 JSP + Spring Boot = WAR 필요?
Spring Boot에서 JSP를 사용하려면 아래 조건이 필요합니다:
- 프로젝트를 WAR로 패키징
- application.properties에 아래 설정 추가:
properties
spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp
- JSP 파일은 src/main/webapp/WEB-INF/views/에 위치
📌 JAR로 배포할 경우 JSP는 작동하지 않음!
→ Thymeleaf, Mustache 등 템플릿 엔진 사용을 권장합니다.
✅ 정리 요약
구분 JAR WAR EAR
| 내장 Tomcat |
✅ 있음 |
❌ 없음 |
❌ 없음 |
| 실행 |
단독 실행 가능 |
WAS 필요 |
Java EE 서버 필요 |
| JSP |
❌ (제한적) |
✅ |
✅ |
| 구조 |
단순 |
정형화 필요 |
매우 복잡 |
| Spring Boot 기본 |
✅ |
❌ |
❌ |
🏁 마무리
- 개인 프로젝트, 마이크로서비스, REST API → JAR 추천
- JSP, 레거시 웹앱 → WAR 필요
- 대규모 엔터프라이즈 시스템 → EAR (하지만 요즘은 잘 안 씀)
Spring Boot는 기본적으로 JAR 중심 구조이며,
WAR는 외부 WAS와 JSP 기반 웹앱에 한정해서 사용하는 경우가 많습니다.