How to Run a Class Within a WAR File Using the Command Line

1. 개요

WAR 파일(Web Application Archive의 약어)은 Java 웹 애플리케이션의 리소스를 저장합니다. WAR는 모든 웹 구성 요소를 단일 단위로 패키징합니다. JAR 파일, JavaServer Pages, Java 서블릿, Java 클래스 파일, XML 파일, HTML 파일 및 웹 애플리케이션에 필요한 기타 리소스를 포함하고 있습니다.

본 튜토리얼에서는 CLI를 사용하여 WAR 파일 내에서 클래스를 호출하는 방법을 보여줍니다.

2. WAR 파일 구조

WAR 파일은 .war 확장자를 사용하며, Servlet/JSP 컨테이너에 배포할 수 있는 웹 애플리케이션을 패키징합니다.

다음은 전형적인 WAR 파일 구조의 예입니다:

META-INF/
    MANIFEST.MF
WEB-INF/
    web.xml
    jsp/
        helloWorld.jsp
    classes/
        com/baeldung/*.class
        application.properties
    static/
    templates/
lib/
    // third party *.jar files as libs
index.html

내부에는 웹 아카이브에 대한 유용한 정보를 담고 있는 MANIFEST.MF가 있는 META-INF 디렉토리가 있습니다. META-INF 디렉토리는 개인적이며 외부에서 접근할 수 없습니다.

WEB-INF 디렉토리는 모든 배포 정보 및 애플리케이션 코드를 포함하는 특별한 디렉토리입니다. WEB-INF/classesWEB-INF/lib 디렉토리에는 각각 Java 클래스 파일 및 JAR 라이브러리가 포함되어 있습니다. WAR 파일은 HTML 페이지, 이미지 및 JS 파일을 포함한 모든 정적 웹 리소스도 가지고 있습니다.

3. WAR 파일 내 클래스 실행하기

명령줄을 통해 WAR 파일에서 클래스를 실행하는 다양한 접근 방식을 살펴봅시다.

3.1. java 명령으로 -classpath 옵션 사용하기

Java 가상 머신(JVM)은 Java 프로그램을 실행할 때 클래스를 찾고 로드하기 위해 클래스패스 환경 변수를 사용합니다. JVM이 클래스 파일을 찾고 로드해야 하는 디렉토리, JAR 및 ZIP 파일 목록을 지정합니다.

아래의 java 명령을 살펴보며 WAR를 실행하는 방법과 그 출력 결과를 확인하겠습니다. -classpath 옵션 대신 -cp를 사용할 수도 있습니다:

java -classpath target/maven-generate-war/WEB-INF/classes:target/maven-generate-war/WEB-INF/lib/* com.baeldung.MavenGenerateWarApplication

위의 명령은 main 메서드를 실행하고 아래의 출력을 생성한 후 완료되면 서버를 종료합니다:

...

3.2. java 명령으로 —jar 옵션 사용하기

Spring Boot를 사용하면 애플리케이션에 직접 내장 서버(예: Tomcat)를 포함한 WAR 파일을 빌드할 수 있습니다. WAR 파일을 외부 서블릿 컨테이너(예: Apache Tomcat)에 배포할 필요가 없습니다. WAR 파일에는 애플리케이션을 실행하는 데 필요한 모든 것이 포함되어 있습니다.

MavenGenerateWarApplication 클래스를 pom.xmlmainClass로 지정했습니다.

이제 아래 명령을 실행하여 WAR 파일을 실행하겠습니다:

java -jar target/war-with-main-class.war

위 명령을 실행하면 MavenGenerateWarApplication 클래스가 실행되고, 서버가 시작되며 계속 실행됩니다. Spring Boot 애플리케이션이 시작되었음을 보여주는 아래 출력을 볼 수 있습니다:

2025-01-26 01:25:19.762  INFO ... : Starting service [Tomcat]
2025-01-26 01:25:19.763  INFO ... : Starting Servlet engine: [Apache Tomcat/9.0.74]
2025-01-26 01:25:20.256  INFO ... : Initializing Spring embedded WebApplicationContext
...

4. 결론

본 기사에서는 Java에서 명령줄을 통해 WAR 파일을 실행하는 다양한 접근 방식을 논의했습니다.

내장 서버를 사용하는 현대 웹 애플리케이션 실행에는 java -jar가 최선의 옵션이며, 반면 java -classpath는 서블릿 컨테이너 없이 비웹 구성 요소를 실행하는 데 더 효과적입니다.

이 기사에 사용된 코드는 GitHub에서 확인할 수 있습니다.

원본 출처

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다