Java 웹앱 만들기
회사에서는 현재 내부 서버에서 여러 Java 웹앱을 실행하고 있습니다. 회사에서는 높은 서버 유지 관리 비용을 절약하기 위해 웹앱을 Azure App Service로 마이그레이션하려고 합니다.
개발 팀은 Maven을 사용하여 데스크톱 앱을 만든 경험이 있으며, 여러분은 이미 Maven을 사용하여 Java 프로젝트의 빌드 프로세스를 자동화하고 있습니다. 여러분은 Maven이 프로젝트에 플러그인을 사용하여 추가 기능을 제공한다는 사실을 알고 있으며, 아키타입을 사용하여 Azure App Service에 배포할 수 있는 웹앱을 만들고자 합니다.
이 단원에서는 Maven과 아키타입이 Java 웹앱을 만드는 데 어떤 도움이 되는지 다시 한번 살펴봅니다. 작은 Java 웹앱을 만들고 로컬에서 실행하는 방법을 알아봅니다. 그런 다음 새 앱에 대한 로컬 테스트를 사용하도록 설정하기 위해 POM(프로젝트 개체 모델) 파일에 무엇을 추가해야 하는지 알아봅니다.
Maven을 사용하여 Java 웹앱 빌드 자동화
Maven은 가장 많이 사용되는 Java 빌드 도구이며 Java 기반 프로젝트를 빌드하고 관리하는 데 사용할 수 있습니다. 이 도구를 통해 프로젝트를 빌드하는 표준 방법으로 Java 프로젝트를 빌드하는 방법, 프로젝트를 구성하는 항목에 대한 명확한 정의, 프로젝트 정보를 게시하는 쉬운 방법, 여러 프로젝트 간에 JAR을 공유하는 방법 등에 대한 프로세스를 간소화할 수 있습니다. Maven의 목표는 다음과 같습니다,
- 빌드 프로세스를 더 쉽게 만듭니다.
- 새 기능으로 투명하게 마이그레이션합니다.
- 일관적인 빌드 시스템을 제공합니다.
- 개발 모범 사례 가이드를 구현합니다.
아키타입이란?
개발자들이 새 프로젝트의 구조를 만들 때 따를 일관적인 모범 사례를 제공할 방법을 모색하던 Maven 창시자들은 다양한 종류의 프로젝트 간에 몇 가지 유사성이 있다는 사실을 발견했습니다. Maven 창시자들은 이 정보를 사용하여 프로젝트 형식을 아키타입이라는 템플릿으로 정의했습니다. Maven은 아키타입을 사용하여 새 프로젝트의 골격을 빠르게 만듭니다. 다음은 몇 일반적인 아키타입의 몇 가지 예입니다.
아키타입 | 설명 |
---|---|
maven-archetype-archetype |
아키타입 프로젝트를 생성합니다. |
maven-archetype-mojo |
샘플 Maven 플러그인을 생성합니다. |
maven-archetype-plugin |
Maven 플러그인을 생성합니다. |
maven-archetype-plugin-site |
Maven 플러그인 사이트를 생성합니다. |
maven-archetype-quickstart |
Maven 프로젝트를 생성합니다. |
maven-archetype-simple |
간단한 Maven 프로젝트를 생성합니다. |
maven-archetype-site |
APT, XDoc, FML과 같은 몇 가지 지원되는 문서 형식을 보여 주는 Maven 사이트를 생성합니다. |
maven-archetype-site-simple |
간단한 Maven 사이트를 생성합니다. |
maven-archetype-webapp |
Maven 웹앱 프로젝트를 생성합니다. |
다음 연습에서는 Azure에 배포할 수 있는 웹앱을 만듭니다. 예를 들어, Maven을 사용하여 새 Java 웹앱을 만들려면 다음 구문을 사용합니다.
mvn archetype:generate \
-DgroupId=com.microsoft.example \
-DartifactId=MyWebApp \
-DarchetypeArtifactId=maven-archetype-webapp \
-DarchetypeVersion=1.4 \
-DinteractiveMode=false
앞의 명령을 실행하면 다음 콘텐츠로 프로젝트 디렉터리 구조가 만들어집니다.
POM(프로젝트 개체 모델) 파일이란?
Maven 프로젝트의 핵심 구성 요소 중 하나는 POM(프로젝트 개체 모델) 파일입니다. POM 파일은 프로젝트의 디렉터리 트리 안에 존재하며 이름이 pom.xml
인 XML 문서입니다. POM 파일은 프로젝트의 속성, 종속성, 빌드 단계, 플러그인 및 목표를 포함합니다. 애플리케이션을 빌드하면 Maven이 사용자 대신 종속성 관리 작업을 수행합니다.
Maven은 플러그인 프레임워크를 기반으로 하며, 개발자는 POM 파일에 플러그인을 추가함으로써 프로젝트의 목표를 정의합니다. Maven을 실행할 때는 mvn [plugin-name]:[goal-name]
구문을 사용하여 특정 목표를 실행할 수 있습니다. 이렇게 하면 Maven이 지정된 [goal-name]
까지의 모든 목표를 실행합니다.
다음 예는 이 단원의 이전 섹션에서 나온 maven-archetype-webapp
아키타입을 사용하여 mvn archetype:generate
명령으로 생성된 pom.xml 파일의 콘텐츠를 보여줍니다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.microsoft.example</groupId>
<artifactId>MyWebApp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>MyWebApp Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>MyWebApp</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
...
</pluginManagement>
</build>
</project>
Maven 프로젝트에 플러그인을 추가하는 방법
Maven 프로젝트에 플러그인을 추가하려면 해당 플러그인의 XML을 pom.xml 파일에 추가해야 합니다. 개발자는 Eclipse Jetty와 Apache Tomcat이라는 두 가지의 유용한 플러그인을 사용하여 컴퓨터에서 로컬로 웹앱을 실행할 수 있습니다. Azure App Service 플러그 인은 이러한 웹 서버를 모두 지원합니다. 프로젝트에 이 서버 중 하나를 추가하려면 <plugins>
태그에 해당 플러그인의 XML을 추가합니다.
예를 들어, Tomcat 11 플러그 인을 추가하려면 다음 예와 같은 XML을 추가합니다.
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven3-plugin</artifactId>
<version>1.10.13</version>
<configuration>
<container>
<containerId>tomcat11x</containerId>
</container>
</configuration>
</plugin>
참고 항목
플러그인 및 관련 정보를 찾아보려면 https://search.maven.org/에서 중앙 리포지토리를 검색하세요.
Tomcat 플러그 인에 대한 XML을 추가하면 <build>
요소가 다음 예와 비슷해집니다.
<build>
<finalName>MyWebApp</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven3-plugin</artifactId>
<version>1.10.13</version>
<configuration>
<container>
<containerId>tomcat11x</containerId>
</container>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
프로젝트에 Tomcat 플러그인을 추가했으면 다음 Maven 명령을 사용하여 프로젝트를 빌드하고 Tomcat 서버를 시작하고 웹앱을 테스트할 수 있습니다.
mvn package cargo:run
이 명령은 앱을 빌드하고, 기본 포트 8080에서 Tomcat 서버를 시작하고, Tomcat 서버를 로드합니다. 웹앱을 로드하려면 http://localhost:8080/MyWebApp
으로 이동합니다(MyWebApp은 pom.xml의 <finalName>
요소에 지정됨).
웹앱을 로드하면 프로젝트의 src\webapp 폴더의 기본 index.jsp 페이지가 표시됩니다.
다음 연습에서는 Maven을 사용하여 Java 웹앱을 만듭니다.