EAR, WAR 및 JAR: Java 파일 형식
Source: Dev.to

이러한 포맷은 무엇인가요?
JAR (Java Archive)
JAR는 Java에서 가장 기본적이고 근본적인 포맷입니다. Java Archive의 약자로, 본질적으로 ZIP 형식으로 압축된 파일이며 컴파일된 클래스, 라이브러리 및 Java 애플리케이션의 리소스를 포함합니다.
주요 특징
- 컴파일된
.class파일을 포함 - 재사용 가능한 라이브러리를 포함
- 애플리케이션 설정을 정의하는
META-INF/MANIFEST.MF파일을 포함할 수 있음 - standalone 애플리케이션(데스크톱 또는 커맨드 라인)용으로 사용
- 매니페스트에
main()메서드가 정의되어 있으면 직접 실행 가능
일반적인 구조
minha-aplicacao.jar
├── com/
│ └── exemplo/
│ ├── Principal.class
│ └── Utilitario.class
├── recursos/
│ └── config.properties
└── META-INF/
└── MANIFEST.MF
사용 예시
java -jar minha-aplicacao.jar
WAR (Web Archive)
WAR는 Web Archive의 약자로, Java 웹 애플리케이션 전용 포맷입니다. Tomcat, JBoss, GlassFish와 같은 웹 애플리케이션 서버에 배포하도록 설계되었습니다.
주요 특징
- 서블릿, JSP, 웹 컨트롤러를 포함
- 웹 애플리케이션 전용 디렉터리 구조를 포함
- 배포 서술자 파일인
WEB-INF/web.xml을 포함 - 정적 리소스(HTML, CSS, JavaScript, 이미지)를 저장
- 웹 애플리케이션에 필요한 라이브러리(JAR)들을 포함
- 직접 실행되지 않고 애플리케이션 서버에 배포됨
일반적인 구조
minha-aplicacao-web.war
├── index.html
├── css/
│ └── estilo.css
├── js/
│ └── script.js
├── WEB-INF/
│ ├── web.xml
│ ├── classes/
│ │ └── com/exemplo/servlets/MeuServlet.class
│ └── lib/
│ ├── spring-core.jar
│ └── hibernate.jar
└── META-INF/
└── MANIFEST.MF
배포 예시
WAR 파일을 Tomcat의 webapps 폴더(또는 해당 서버의 동일 폴더)로 복사하면 서버가 자동으로 압축을 풀고 실행합니다.
EAR (Enterprise Archive)
EAR는 Enterprise Archive의 약자로, 세 포맷 중 가장 복잡한 형태입니다. 여러 모듈(웹, EJB, 공유 라이브러리 등)을 포함할 수 있는 엔터프라이즈 애플리케이션을 위해 설계되었습니다.
주요 특징
- 여러 모듈(WAR, 비즈니스 JAR 등)을 포함
- 애플리케이션 구조를 정의하는
META-INF/application.xml파일을 포함 - 여러 모듈 간에 공통 라이브러리를 공유할 수 있음
- 엔터프라이즈 애플리케이션 서버(JBoss, WebSphere, GlassFish 등)에 배포됨
- 다계층 복잡 애플리케이션의 조직을 용이하게 함
일반적인 구조
minha-aplicacao-enterprise.ear
├── minha-web.war
├── minha-logica-negocio.jar
├── minha-integracao.jar
├── lib/
│ ├── commons-lang.jar
│ └── log4j.jar
└── META-INF/
├── application.xml
└── MANIFEST.MF
실용 비교
| 항목 | JAR | WAR | EAR |
|---|---|---|---|
| 목적 | 독립 실행 애플리케이션, 라이브러리 | 웹 애플리케이션 | 엔터프라이즈 애플리케이션 |
| 실행 | 직접: java -jar … | 웹 서버를 통해 | 엔터프라이즈 서버를 통해 |
| 구성 파일 | MANIFEST.MF | WEB-INF/web.xml | META-INF/application.xml |
| 정적 리소스 | 선택 사항 | 기대됨 (HTML, CSS 등) | 모듈 내부 (WAR) |
| 모듈 | 단일 모듈 | 단일 모듈 | 다중 모듈 |
| 필요 서버 | 없음 | Tomcat, Jetty 등 | JBoss, WebSphere, GlassFish 등 |
| 일반적인 사용 | API, CLI 도구 | 포털, 웹 시스템 | 은행 시스템, ERP 등 |
컴파일 및 패키징 프로세스
아티팩트 유형에 관계없이 일반적인 흐름은 다음과 같습니다:
- 컴파일 – Java 컴파일러가
.java파일을.class파일로 변환합니다. - 패키징 – Maven이나 Gradle과 같은 도구가 이러한 파일들을 적절한 형식(JAR, WAR 또는 EAR)으로 묶습니다.
- 배포 – 결과 아티팩트가 실행 또는 배포를 위해 전달됩니다.
Maven 예시 (pom.xml)
jar
war
ear
실용적인 예시
시나리오 1 – 데스크톱 애플리케이션
JAR로 패키징된 이미지 처리 도구:
mvn clean package
# Gera: imagem-processor-1.0.jar
java -jar imagem-processor-1.0.jar
시나리오 2 – 동적 웹사이트
WAR로 패키징된 블로그 또는 전자상거래:
mvn clean package
# Gera: meu-blog-1.0.war
# Copiado para: /tomcat/webapps/
# Acesso: http://localhost:8080/meu-blog
시나리오 3 – 복합 시스템
EAR로 패키징된 다중 서비스 은행 시스템:
mvn clean package
# Gera: banco-sistema-1.0.ear
# Implantado em: JBoss Application Server
결론
JAR, WAR, EAR 중 선택은 개발 중인 애플리케이션 유형에 따라 달라집니다:
- JAR – 다목적이며, 라이브러리 및 독립 실행형 애플리케이션에 이상적입니다.
- WAR – 서블릿 서버에서 실행되는 웹 애플리케이션에 특화되었습니다.
- EAR – 다중 모듈 및 고급 관리 기능이 필요한 기업용 솔루션을 위해 설계되었습니다.
차이를 이해하면 프로젝트를 더 잘 구성하고, 올바른 도구를 선택하며, 보다 효율적인 배포를 보장할 수 있습니다.
WAR é para aplicações web, enquanto EAR é para arquiteturas empresariais complexas. Compreender essas diferenças é essencial para qualquer desenvolvedor Java, pois garante que sua aplicação seja empacotada e implantada corretamente.