WAR (파일 포맷)
1. 개요
WAR 파일은 웹 애플리케이션을 배포하기 위한 파일 형식으로, JAR 파일과 유사한 구조를 가지며 디지털 서명이 가능하다. WAR 파일은 `/WEB-INF` 디렉토리를 포함하며, 이 디렉토리 안에는 웹 애플리케이션의 구조를 정의하는 `web.xml` 파일이 있다. WAR 파일은 웹 애플리케이션의 테스트 및 배포를 간편하게 하고, 버전 관리를 용이하게 하며, 모든 Java EE 컨테이너에서 지원된다는 장점이 있다. 그러나 소스 코드 변경 시마다 다시 패키징하고 배포해야 하는 번거로움이 단점으로 지적된다.
이미지 준비중입니다.
| 종류 | 아카이브 |
|---|---|
| 확장자 | .war |
| MIME 형식 | application/java-archive |
| 매직 넘버 | PK (표준 ZIP 파일) |
| 개발 | 선 마이크로시스템즈 |
| 컨테이너 | JSP, Java Servlet |
| 기반 | JAR |
| 설명 | 웹 애플리케이션 배포용 아카이브 파일 형식 |
|---|
-
아카이브 포맷 -
ARJ
ARJ는 다양한 소프트웨어 유틸리티에서 압축 해제가 가능한 파일 포맷으로, macOS에서는 독립 실행형 유틸리티를 통해 압축을 해제할 수 있다. -
아카이브 포맷 -
JAR (파일 포맷)
JAR (Java ARchive)는 자바 런타임 환경에서 애플리케이션 배포를 위해 사용되는 ZIP 기반의 파일 포맷으로, 자바 클래스 파일과 매니페스트 파일을 포함하여 메타데이터와 실행 정보를 관리하며, 압축 및 전자 서명을 지원하고 실행 가능한 JAR 파일을 통해 애플리케이션을 간편하게 실행할 수 있게 한다. -
자바 플랫폼, 엔터프라이즈 에디션 -
IBM 웹스피어
IBM 웹스피어는 IBM에서 출시한 기업용 소프트웨어 제품군 브랜드로, 다양한 애플리케이션 인프라, 비즈니스 프로세스 통합, 정보 통합 및 개발 도구를 포함한다. -
자바 플랫폼, 엔터프라이즈 에디션 -
자카르타 서버 페이지
자카르타 서버 페이지(JSP)는 웹 애플리케이션 개발에 사용되는 서버 측 스크립팅 기술로, 서블릿으로 변환되어 실행되고 HTML 형태로 결과를 반환하며, 지시어, 스크립틀릿, 표현식, 액션 등의 문법 요소, 표현 언어(EL), JSTL을 통해 동적인 웹 페이지를 구현하고 개발 편의성을 높였다.
2. 구조 및 내용
WAR 파일은 JAR 파일과 동일한 방식으로 디지털 서명될 수 있다.
WAR 파일 내에는 특수 파일과 디렉토리가 존재한다. `/WEB-INF` 디렉토리에는 웹 애플리케이션의 구조를 정의하는 web.xml 파일이 있다. 웹 애플리케이션이 JSP 파일만 제공하는 경우 `web.xml` 파일은 필수가 아니지만, 서블릿을 사용하는 경우에는 서블릿 컨테이너가 `web.xml` 파일을 이용하여 URL 요청을 서블릿으로 라우팅한다. 또한, `web.xml`은 서블릿에서 참조 가능한 컨텍스트 변수와 배포자가 설정해야 하는 환경 종속성을 정의하는데 사용된다. 예를 들어, 이메일 전송에 사용되는 메일 세션에 대한 종속성을 정의하고, 서블릿 컨테이너가 이 서비스를 제공하도록 할 수 있다.
2.1. 기본 구조
WAR 파일은 JAR 파일과 동일한 방식으로 디지털 서명될 수 있어 소스 코드의 출처를 확인할 수 있다.
WAR 파일 내에는 특수 파일과 디렉토리가 있다.
* `/WEB-INF` 디렉토리에는 웹 애플리케이션의 구조를 정의하는 web.xml 파일이 있다.
* 웹 애플리케이션이 JSP 파일만 제공하는 경우 `web.xml` 파일은 반드시 필요한 것은 아니다.
* 웹 애플리케이션이 서블릿을 사용하는 경우, 서블릿 컨테이너는 `web.xml`을 사용하여 URL 요청이 서블릿으로 라우팅될지를 확인한다.
* `web.xml` 파일은 서블릿 내에서 참조할 수 있는 컨텍스트 변수를 정의하고, 배포자가 설정해야 하는 환경 종속성을 정의하는 데 사용된다.
* 예를 들어 이메일을 보내는 데 사용되는 메일 세션에 대한 종속성이 있으며, 서블릿 컨테이너는 이 서비스를 제공한다.
2.2. /WEB-INF 디렉토리
WAR 파일의 /WEB-INF 디렉토리에는 웹 애플리케이션의 구조를 정의하는 web.xml 파일이 포함되어 있다. 웹 애플리케이션이 JSP 파일만 제공하는 경우 `web.xml` 파일은 필수적이지 않다. 웹 애플리케이션이 서블릿을 사용하는 경우 서블릿 컨테이너는 `web.xml`을 사용하여 URL 요청을 서블릿에 라우팅한다. `web.xml` 파일은 서블릿 내에서 참조할 수 있는 컨텍스트 변수와 배포자가 설정해야 하는 환경 종속성을 정의하는 데에도 사용된다.
/WEB-INF/classes 디렉터리는 클래스로더의 클래스패스(classpath)에 있으며, 웹 애플리케이션 실행 시 .class 파일들이 호출되는 곳이다. /WEB-INF/lib 디렉터리에 있는 JAR 파일들은 클래스로더의 클래스패스에 포함될 수 있다.
2.2.1. web.xml
`web.xml` 파일은 웹 애플리케이션의 설정을 정의하는 XML 파일이다. 웹 애플리케이션이 서블릿을 사용하는 경우, 서블릿 컨테이너는 `web.xml`을 사용하여 URL 요청이 어떤 서블릿으로 라우팅될지 결정한다. `web.xml`은 서블릿 내에서 참조 가능한 컨텍스트 변수를 정의하고, 배포자가 설정해야 하는 환경 종속성을 정의하는 데에도 사용된다. 예를 들어, 이메일 전송에 사용되는 메일 세션에 대한 종속성을 정의할 수 있다. 서블릿 컨테이너는 이러한 서비스를 제공한다.
다음은 서블릿의 선언 및 연결을 보여주는 `web.xml` 파일의 예시이다.
```xml
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
Resource reference to a factory for javax.mail.Session
instances that may be used for sending electronic mail messages,
preconfigured to connect to the appropriate SMTP server.
```
웹 애플리케이션이 JSP 파일만 제공하는 경우에는 `web.xml` 파일이 반드시 필요하지는 않다.
2.2.2. /WEB-INF/classes
/WEB-INF/classes 디렉터리는 클래스 로더의 클래스패스에 있다. 이 위치는 .class 파일들(Java 클래스 파일)이 웹 애플리케이션 실행 시 호출되는 곳이다. 웹 애플리케이션에서 사용하는 Java 클래스 파일들이 이 디렉터리에 위치하며, 클래스 로더의 클래스패스에 포함되어 웹 애플리케이션 실행 시 참조된다.
2.2.3. /WEB-INF/lib
웹 애플리케이션에서 사용하는 라이브러리(JAR 파일)들이 위치하는 디렉터리이다. 클래스 로더의 클래스패스에 포함되어 웹 애플리케이션 실행 시 참조된다.
3. 장점
WAR 파일은 웹 애플리케이션 개발 및 배포를 단순화하고 효율성을 높이는 여러 장점을 제공한다. 예를 들어, 테스트 환경과 운영 환경의 설정 파일을 분리하여 개발자가 테스트와 검증을 거친 WAR 파일이 운영 환경에 배포되는 파일과 동일하다는 확신을 가질 수 있게 한다.
3.1. 간편한 배포 및 테스트
웹 애플리케이션을 하나의 파일로 묶어(패키징) 테스트 및 배포를 간편하게 할 수 있다. 또한 배포된 애플리케이션 버전 식별이 쉽다. 모든 Java EE 컨테이너에서 WAR 파일을 지원하며, MVC 구조는 WAR 파일을 지원한다.
운영 환경에서는 배포 전에 충분한 테스트를 거치지 않고 수정 사항을 적용하지 않는다고 가정할 때, WAR 파일은 프로퍼티 파일을 사용하여 환경별 변수를 식별할 때 뚜렷한 이점을 가진다. 예를 들어, 테스트 환경의 LDAP 서버는 `ldaps://testauth.example.com:636`과 같을 수 있고, 운영 환경의 LDAP 서버는 `ldaps://auth.example.com:636`과 같을 수 있다. 외부 프로퍼티 파일은 다음과 같이 링크를 정의한다.
LINKED_PAGE=ldaps://testauth.example.com:636
소스 코드는 프로퍼티 파일을 읽어 대상 LDAP 서버를 결정한다. 이러한 방식으로 개발자는 테스트 및 검증된 WAR 파일이 운영 환경으로 승격되는 파일과 정확히 동일하다는 것을 확신할 수 있다.
3.2. 버전 관리 용이
WAR 파일은 배포된 애플리케이션의 버전을 쉽게 식별하고 관리할 수 있게 해준다. 이는 프로퍼티 파일을 사용하여 환경별 변수를 식별할 때 특히 유용하다.
예를 들어, 테스트 환경의 LDAP 서버 주소는 `ldaps://testauth.example.com:636`이고, 프로덕션 환경의 LDAP 서버 주소는 `ldaps://auth.example.com:636`일 수 있다. 이 경우, 외부 프로퍼티 파일에 다음과 같이 링크를 정의할 수 있다.
`LINKED_PAGE=ldaps://testauth.example.com:636`
소스 코드는 이 프로퍼티 파일을 읽어 대상 LDAP 서버를 결정한다. 이러한 방식을 통해 개발자는 테스트 및 검증된 WAR 파일이 프로덕션 환경으로 배포되는 파일과 정확히 동일하다는 것을 확신할 수 있다.
3.4. MVC 구조 지원
MVC 구조는 WAR 파일을 지원한다. 이를 통해 웹 애플리케이션 개발 생산성을 높일 수 있다.
프로덕션 환경에서는 배포 전에 충분한 테스트 없이 수정 사항을 적용하지 않는다고 가정할 때, WAR 파일은 프로퍼티 파일을 사용하여 환경별 변수를 식별할 때 뚜렷한 이점을 갖는다. 예를 들어, 테스트 환경의 LDAP 서버는 `ldaps://testauth.example.com:636`과 같을 수 있고, 프로덕션 환경의 LDAP 서버는 `ldaps://auth.example.com:636`과 같을 수 있다. 외부 프로퍼티 파일은 다음과 같이 링크를 정의한다.
LINKED_PAGE=ldaps://testauth.example.com:636
소스 코드는 프로퍼티 파일을 읽어 대상 LDAP 서버를 결정한다. 이러한 방식으로 개발자는 테스트 및 검증된 WAR 파일이 프로덕션으로 승격되는 파일과 정확히 동일하다는 것을 확신할 수 있다.
3.5. 환경 설정 분리
프로덕션 환경에서는 배포 전에 충분한 테스트 없이 수정 사항을 적용하지 않는다고 가정할 때, WAR 파일은 프로퍼티 파일을 사용하여 환경별 변수를 식별할 때 뚜렷한 이점을 가진다. 예를 들어, 테스트 환경의 LDAP 서버는 `ldaps://testauth.example.com:636`과 같을 수 있고, 프로덕션 환경의 LDAP 서버는 `ldaps://auth.example.com:636`이다. 외부 프로퍼티 파일은 다음과 같이 링크를 정의한다.
LINKED_PAGE=ldaps://testauth.example.com:636
소스 코드는 프로퍼티 파일을 읽어 대상 LDAP 서버를 결정한다. 이러한 방식으로 개발자는 테스트 및 검증된 WAR 파일이 프로덕션으로 승격되는 파일과 정확히 동일하다는 것을 확신할 수 있다.
4.1. 동적 변경의 어려움
소스 코드의 사소한 변경이라도 WAR 파일을 다시 패키징하고 배포해야 한다. 런타임 배포로 구성된 경우 웹 서버를 중지할 필요는 없지만, 변경 사항을 적용하기 위한 절차가 상대적으로 복잡하다.
5. 예제
다음은 `web.xml` 파일을 통해 서블릿을 선언하고 URL과 연결하는 방법을 보여주는 예제이다.
```xml
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
Resource reference to a factory for javax.mail.Session
instances that may be used for sending electronic mail messages,
preconfigured to connect to the appropriate SMTP server.
```
`/WEB-INF/classes` 디렉터리는 클래스로더의 클래스패스에 있다. `.class` 파일들을 이 위치에 두면 웹 애플리케이션 실행 시 호출된다. `/WEB-INF/lib` 디렉터리에 있는 JAR 파일들도 클래스패스에 포함된다.
5.1. web.xml 예제
다음은 서블릿의 선언 및 연결을 보여주는 web.xml 파일의 예시이다.
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
Resource reference to a factory for javax.mail.Session
instances that may be used for sending electronic mail messages,
preconfigured to connect to the appropriate SMTP server.