dev-sohee 님의 블로그

War(Web Application Archive) 파일 구조 파헤치기 본문

War(Web Application Archive) 파일 구조 파헤치기

dev-sohee 2024. 8. 17. 12:23

웹 어플리케이션 배포는 개발자에게 매우 중요한 단계입니다. 다양한 환경과 서버 구성 요소들, 배포의 자동화, 어플리케이션의 복잡성 등의 영향을 받아 어플리케이션 배포 과정은 복잡할 수 있지만 이를 쉽고 간편하게 처리할 수 있도록 도와주는 도구가 바로 War(Web Application Archive)입니다. 이 글에서는 WAR의 기본 개념과 구조에 대해 자세히 살펴보겠습니다.

* WAR란?
* WAR의 구조

 

# WAR란?

War(Web Application Archive)는 웹 서버 또는 서블릿 컨테이너에서 실행될 수 있도록 어플리케이션의 모든 구성 요소를 하나의 파일로 묶어 제공하는 파일 형식입니다. WAR 파일은 웹 어플리케이션의 클래스 파일, JSP 파일, 서블릿, 정적 리소스(HTML, CSS, JavaScript), 라이브러리(JAR 파일), 설정 파일(web.xml) 등을 포함합니다. 이를 통해 개발자는 웹 어플리케이션을 쉽게 배포하고 관리할 수 있습니다. 

 

장점

  • 배포의 용이성: 모든 어플리케이션 구성 요소를 하나의 파일로 묶어 배포할 수 있어 배포 과정이 간편합니다.
  • 배포의 자동화: 웹 서버가 WAR 파일을 자동으로 추출하고 설정하기 때문에, 배포 과정이 간소화됩니다.
  • 표준화: Java EE 표준을 따르기 때문에 다양한 서버와 호환됩니다.
  • 모듈화: 어플리케이션과 그에 필요한 모든 라이브러리, 리소스가 포함되어 있어 다른 환경에서도 일관된 동작을 보장합니다.

단점

  • 파일 크기: 모든 구성 요소가 포함되므로, 파일 크기가 클 수 있습니다. 이는 네트워크 전송 및 저장 공간에 영향을 줄 수 있습니다.
  • 서버 종속성: WAR 파일은 서블릿 컨테이너나 웹 서버에 의존하므로, 해당 서버에 맞게 최적화되지 않은 경우 성능 저하가 발생할 수 있습니다.
  • 수정의 어려움: WAR 파일을 수정하려면 다시 패키징한 후 재배포해야 하기 때문에 작은 변경 사항에도 배포 과정을 다시 거쳐야 하는 단점이 있습니다.

 

다음은 WAR 파일에 담겨있는 구성 요소들입니다.

# WAR의 구조

출처_https://technet.tmaxsoft.com

 

1. static\

: 'static\' 디렉토리는 웹 어플리케이션에서 별도의 처리 없이 클라이언트로 전송되는 정적 리소스를 관리하는데 사용됩니다. 여기에는 HTML 파일, CSS 파일, JavaScript 파일, image 파일 등이 포함됩니다.

2. jsp\

: JSP(JavaServer Pages)는 서버 측에서 실행되는 동적 웹 페이지를 생성하기 위한 기술입니다. JSP 파일은 HTML 코드 안에 Java 코드를 삽입할 수 있는 기능을 제공하여, 사용자의 요청에 따라 데이터베이스에서 정보를 가져와 처리한 후 동적인 콘텐츠를 클라이언트에게 제공합니다.

3. images\

: 'images\' 디렉토리는 웹 어플리케이션에서 사용하는 이미지 파일들을 저장하는 공간입니다. 이미지 파일들은 주로 정적 리소스이기 때문에 'static\' 디렉토리 하위에 위치하는 경우가 많습니다.

4. META-INF\

: 'META-INF\' 디렉토리는 Java 어플리케이션의 구성 요소에 대한 정보를 제공하고, 배포 및 실행 환경에서 다양한 목적으로 활용되는 특별한 디렉토리입니다.

  • 역할
    1. 메타데이터 저장
      : 어플리케이션이나 모듈의 메타데이터를 포함합니다. 메타데이터는 어플리케이션이 어떻게 구성되어 있는지, 어떤 라이브러리나 클래스를 포함하고 있는지 등의 정보를 제공합니다.
    2. 어플리케이션 구성 정보 제공
      : MANIFEST.MF 파일과 같은 중요한 파일을 통해 어플리케이션의 구성 및 속성을 정의합니다.
    3. 디지털 서명 및 보안
      : 자바 어플리케이션에서 사용하는 JAR 파일의 경우, META-INF 디렉토리 내에 디지털 서명 관련 파일이 포함되어 있어, 파일의 무결성 검증 및 보안을 강화할 수 있습니다.

**메타데이터란? : 데이터에 관한 구조화된 데이터로, 다른 데이터를 설명해주는 데이터입니다. 대량의 정보 가운데에서 확인하고자 하는 정보를 효율적으로 검색하기 위해 원시데이터(Raw data)를 일정한 규칙에 따라 구조화 혹은 표준화한 정보를 의미합니다.

ex) 디지털 카메라는 사진을 찍어 기록할 때마다 카메라 자체의 정보와 촬영 당시의 시간, 노출, 플래시 사용 여부, 해상도, 사진 크기 등의 사진 정보를 화상 데이터와 같이 저장합니다. 

**JAR란? : 자바 어플리케이션이나 라이브러리를 패키징하기 위해 사용하는 파일 형식입니다. JAR 파일은 여러 개의 자바 클래스 파일, 메타데이터, 리소스 파일 등을 하나의 압축된 파일로 묶어 배포할 수 있게 해줍니다. WAR 파일 내의 'WEB-INF/lib' 디렉토리에 어플리케이션이 필요로 하는 다양한 JAR 파일들이 포함될 수 있습니다.

  • 주요 파일
    1. MANIFEST.MF
      JAR, WAR 파일에 대한 메타데이터를 포함하는 텍스트 파일입니다. 이 파일은 key-value 형식으로 이루어져 있으며, 어플리케이션의 버전 정보, 메인 클래스, Class Path 등을 정의할 수 있습니다.
    2. 디지털 서명 파일
      JAR 파일이 디지털 서명되었을 경우, *.SF, *.RSA, *.DSA와 같은 파일이 포함될 수 있습니다. 이 파일들은 JAR 파일의 콘텐츠가 원본에서 변경되지 않았음을 보증하기 위해 사용됩니다. *.SF 파일은 서명된 데이터의 해시를 포함하고, *.RSA 또는 *.DSA 파일은 서명 인증서를 포함합니다.
    3. persistence.xml
      : 이 파일은 데이터베이스 연결 설정 및 엔티티 매핑 정보를 포함하여, JPA(Java Persistence API)의 동작을 정의합니다.

**Java Persistence API(JPA)란? : Java 어플리케이션에서 데이터베이스와의 상호작용을 보다 쉽게 하고, 객체 지향적인 접근 방식을 지원하기 위한 표준 API입니다. ORM(Object-Relational Mapping)을 통해 객체와 관계형 데이터베이스 간의 매핑을 자동으로 처리하고, 데이터베이스에 대한 의존성을 줄이며, 유지보수를 용이하게 만듭니다.

 

5. WEB-INF\
: 'WEB-INF\' 디렉토리는 웹 어플리케이션의 보안 및 구조를 관리하는 데 중요한 역할을 합니다. 이 디렉토리에 어플리케이션 서버는 접근할 수 있지만, 외부 클라이언트(웹 브라우저 등)에서는 접근할 수 없습니다.

  • 구성 요소
    • web.xml
      웹 어플리케이션의 배포 설명자(Deployment Descriptor)로, 어플리케이션의 서블릿, 필터, 리스너, 세션 구성 등을 정의합니다. 'web.xml' 파일에서 서블릿 매핑, 필터 설정, 오류 페이지 매핑 등 웹 어플리케이션의 전반적인 동작을 설정할 수 있습니다.
    • jeus-web-dd.xml
      : 'jeus-web-dd.xml' 파일은 JEUS라는 Java EE 어플리케이션 서버에서 사용되는 웹 배포 설명자(Deployment Descriptor) 파일로, JEUS 서버에서 웹 어플리케이션의 배포와 구성을 정의하는 데 사용됩니다. JEUS는 TmaxSoft에서 제공하는 Java EE 어플리케이션 서버로, 자바 웹 어플리케이션을 배포하고 관리하는 데 사용됩니다.
    • classes\
      : 'classes\' 디렉토리는 컴파일된 Java 클래스 파일을 저장하는 장소이며 이 디렉토리 내의 클래스 파일들은 웹 어플리케이션의 런타임 동안 실행됩니다. 이 디렉토리에는 서블릿, 필터, 리스너 등 웹 애플리케이션의 서버 측 로직을 처리하는 Java 클래스들이 포함됩니다. 이러한 클래스들은 web.xml 파일에서 정의된 매핑과 설정에 따라 웹 요청을 처리합니다.
    • lib\
      : 'lib\' 디렉토리는 웹 어플리케이션에서 사용하는 모든 JAR 파일을 포함합니다. 그 중 Library JAR는 특정 기능을 제공하는 JAR 파일입니다. 예를 들어, JSON 파싱, 데이터베이스 연결, 로깅, 웹 서비스 호출 등의 기능을 제공하는 JAR 파일이 이에 해당합니다.
    • tlds\
      : 'tlds(Tag Library Descriptors)\' 디렉토리는 JSP에서 사용자 정의 태그를 정의하는 XML 파일입니다. tld 파일은 JSP 페이지에서 사용할 수 있는 태그 라이브러리를 설명하며, 커스텀 태그를 정의하고 사용할 수 있게 해줍니다.

**서블릿이란? : 서블릿은 Java 클래스로, 웹 애플리케이션의 요청을 처리하고 응답을 생성하는 데 사용됩니다. 서블릿은 'HttpServlet' 클래스를 확장하여 구현하며, 클라이언트의 요청을 받아서 처리한 후 응답을 반환합니다.

**필터란? : 필터는 서블릿의 요청 및 응답을 전처리 하거나 후처리 할 수 있는 컴포넌트입니다. 필터는 Filter 인터페이스를 구현하며, 서블릿 호출 전에 또는 후에 특정 작업을 수행하는 데 사용됩니다.

**리스너란? : 리스너는 웹 어플리케이션의 이벤트를 감지하고 처리하는 컴포넌트입니다. 리스너는 'ServletContextListener', 'HttpSessionListener', 'ServletRequestListener' 등과 같은 다양한 이벤트 리스너 인터페이스를 구현할 수 있습니다.

 

 

WAR 파일을 깊이 이해하게 되니 웹 어플리케이션의 구조와 동작 방식을 보다 명확히 파악할 수 있게 됐습니다. WAR 파일의 표준화된 패키징 방식 덕분에 어플리케이션의 배포 과정이 간소화되고, 모듈화된 접근 덕분에 각 구성 요소의 유지보수가 용이합니다. 그렇기 때문에 WAR 파일의 구조와 구성 요소를 이해하는 것은 웹 어플리케이션의 배포와 관리를 효율적으로 하는 데 필수적입니다.