연습 - 간단한 Tomcat Java 웹앱 만들기

완료됨

웹 애플리케이션은 인벤토리 관리, 온라인 양식 및 고객 관련 포털과 같은 실제 작업을 처리하는 데 널리 사용됩니다. 이 모듈에서는 인기 있는 오픈 소스 서버인 Apache Tomcat을 사용하여 Java 웹 애플리케이션을 만들고 배포하는 방법을 알아봅니다.

사용자가 데이터를 입력하고 플랫폼과 실시간으로 상호 작용할 수 있는 동적 웹 애플리케이션을 빌드하는 프로젝트에서 작업하는 개발자라고 가정합니다. 클라이언트는 쉽게 액세스할 수 있도록 이 앱을 로컬에서 테스트 및 클라우드에서 사용할 수 있기를 원합니다. 이 설정을 사용하면 먼저 로컬 머신에서 테스트한 다음 원활한 전환으로 라이브 환경에 배포할 수 있습니다. 이 설정을 처음부터 빌드하면 향후 업데이트 및 구성을 유연하게 수행할 수 있습니다.

이 모듈에서는 Tomcat을 사용하여 Java 웹앱을 빌드하고 배포하기 위한 필수 단계를 살펴봅합니다. 두 가지 옵션이 있습니다. 즉, 즉시 배포를 위해 기존 프로젝트 리포지토리를 복제하거나 Maven을 사용하여 새 프로젝트를 처음부터 빌드합니다. 이 모듈에서는 Maven 프로젝트 설정, Tomcat 구성, 로컬로 앱 배포 및 Maven과 같은 도구를 사용하여 종속성 및 패키지를 관리하는 방법을 설명합니다.

이 모듈을 마치면 Tomcat에서 Java 기반 웹 애플리케이션을 만들고 배포하여 로컬 및 클라우드 호스팅 환경에서 웹 애플리케이션 배포를 지원할 수 있습니다.

Java Tomcat 웹앱 만들기

이 연습에서는 입력을 받아 화면에 결과를 표시하는 최소 Java 웹 애플리케이션을 만듭니다. 그런 다음 Tomcat을 사용하여 컴퓨터에 로컬로 웹앱을 배포합니다. 다음과 같은 두 가지 옵션이 있습니다.

  • 옵션 1: 샘플 리포지토리를 복제하고 웹앱을 즉시 배포합니다.
  • 옵션 2: Maven Tomcat 프로젝트를 처음부터 만듭니다.

옵션 1: 샘플 리포지토리 복제 및 웹앱 즉시 배포

리포지토리를 복제하려면 다음 단계를 사용합니다.

  1. 다음 명령을 사용하여 샘플 프로젝트 리포지토리를 복제합니다.

    git clone https://github.com/MicrosoftDocs/simple-tomcat-maven-app.git
    
    
  2. 다음 명령을 사용하여 복제된 프로젝트 리포지토리로 이동합니다.

    cd simple-tomcat-app
    

Tomcat에 로컬로 배포할 수 있도록 다음 단계를 사용하여 로컬 Tomcat 서버를 구성합니다.

경고

사용자 이름과 암호를 일반 텍스트로 tomcat-users.xml 및 Maven의 settings.xml 같은 구성 파일에 직접 저장하는 것은 안전한 것으로 간주되지 않으며, 일반적으로 프로덕션 환경에서는 이러한 방법을 권장하지 않습니다. 그러나 다른 대안은 이 학습 모듈의 범위를 벗어납니다. 실제 사용자 이름과 암호를 사용하지 마세요.

  1. Tomcat 구성 파일 conf/tomcat-users.xml 다음 예제와 같이 편집합니다.

    <tomcat-users>
        <user username="your-tomcat-username" password="your-tomcat-password" roles="manager-script"/>
    </tomcat-users>
    
  2. 다음 예제를 사용하여 Maven ~/.m2/settings.xml 파일에 자격 증명을 추가합니다. 여기서 your-tomcat-username 사용자 이름으로 your-tomcat-password 바꾸고 암호를 사용합니다.

    <servers>
        <server>
            <id>TomcatServer</id>
            <username>your-tomcat-username</username>
            <password>your-tomcat-password</password>
        </server>
    </servers>
    
  3. 다음 명령을 사용하여 웹앱을 패키지하고 배포합니다.

    mvn clean package cargo:deploy
    

배포 후에는 http://localhost:8080/simple-tomcat-app에서 앱에 액세스할 수 있습니다.

옵션 2: Maven Tomcat 프로젝트를 처음부터 만들기

Maven Tomcat 프로젝트를 처음부터 만들려면 Maven 프로젝트를 만드는 것부터 시작하여 Tomcat에 웹앱을 배포하는 등 여러 절차를 수행합니다.

Maven 프로젝트 만들기

Java 웹 애플리케이션에 대한 Maven 프로젝트를 만들려면 다음 명령을 사용합니다.

mvn archetype:generate \
    -DgroupId=com.example \
    -DartifactId=simple-tomcat-app \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false

다음과 같은 출력이 일반적입니다.

[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: /home/XXXXXXXX/LearnProjects/simple-tomcat-maven-app
[INFO] Parameter: package, Value: com.microsoft.azure.samples
[INFO] Parameter: groupId, Value: com.microsoft.azure.samples
[INFO] Parameter: artifactId, Value: azure-javaweb-app-simple
[INFO] Parameter: packageName, Value: com.microsoft.azure.samples
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /private/tmp/TMP/azure-javaweb-app
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.657 s
[INFO] Finished at: 2024-10-18T12:39:41-07:00
[INFO] ------------------------------------------------------------------------

이제 simple-tomcat-app이라는 폴더에 새 Maven 웹 프로젝트가 있습니다. 이제 다음 파일과 디렉터리를 사용할 수 있습니다.

└── simple-tomcat-app
    ├── pom.xml
    └── src
        ├── main
        │   ├── java
        │   ├── resources
        │   └── webapp
        │       ├── index.jsp
        │       └── WEB-INF
        │           └── web.xml
        └── test
            ├── java
            └── resources

Maven pom.xml 파일 수정

다음 단계를 사용하여 pom.xml 파일을 수정합니다.

  1. 다음 예제를 사용하여 pom.xml 열고 Java 버전을 21로 설정합니다.

    <java.version>21</java.version>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>
    
  2. 다음 예제를 사용하여 Tomcat 및 Azure 배포 플러그 인을 추가합니다.

    <!-- Tomcat 10 Maven Plugin -->
    <plugin>
      <groupId>org.codehaus.cargo</groupId>
      <artifactId>cargo-maven3-plugin</artifactId>
      <version>1.9.9</version>
      <configuration>
        <!-- Container Configuration -->
        <container>
          <containerId>tomcat10x</containerId>
          <type>remote</type>
        </container>
        <!-- Configuration for Remote Deployment -->
        <configuration>
          <type>runtime</type>
          <properties>
            <cargo.remote.uri>http://localhost:8080/manager/text</cargo.remote.uri>
            <cargo.remote.username>cargo</cargo.remote.username>
            <cargo.remote.password>your-cargo-password</cargo.remote.password>
          </properties>
        </configuration>
        <!-- Deployable Artifact Configuration -->
        <deployables>
          <deployable>
            <groupId>${project.groupId}</groupId>
            <artifactId>${project.artifactId}</artifactId>
            <type>war</type>
            <properties>
              <context>${project.artifactId}</context>
            </properties>
          </deployable>
        </deployables>
      </configuration>
    </plugin>
    

pom.xml 파일의 전체 콘텐츠는 다음과 같습니다.

<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.example</groupId>
  <artifactId>simple-tomcat-app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>simple-tomcat-app</name>
  <properties>
    <java.version>21</java.version>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>jakarta.servlet</groupId>
      <artifactId>jakarta.servlet-api</artifactId>
      <version>6.0.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>simple-tomcat-app</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.10.1</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
        </configuration>
      </plugin>
      <!-- Tomcat 10 Maven Plugin -->
      <plugin>
        <groupId>org.codehaus.cargo</groupId>
        <artifactId>cargo-maven3-plugin</artifactId>
        <version>1.9.9</version>
        <configuration>
          <!-- Container Configuration -->
          <container>
            <containerId>tomcat10x</containerId>
            <type>remote</type>
          </container>
          <!-- Configuration for Remote Deployment -->
          <configuration>
            <type>runtime</type>
            <properties>
              <cargo.remote.uri>http://localhost:8080/manager/text</cargo.remote.uri>
              <cargo.remote.username>cargo</cargo.remote.username>
              <cargo.remote.password>your-cargo-password</cargo.remote.password>
            </properties>
          </configuration>
          <!-- Deployable Artifact Configuration -->
          <deployables>
            <deployable>
              <groupId>${project.groupId}</groupId>
              <artifactId>${project.artifactId}</artifactId>
              <type>war</type>
              <properties>
                <context>${project.artifactId}</context>
              </properties>
            </deployable>
          </deployables>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

웹 인터페이스 만들기

웹 페이지를 추가하려면 다음 예제를 사용하여 src/main/webapp/index.jsp 파일을 편집합니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Simple Tomcat App</title>
</head>
<body>
    <h1>Welcome to the Simple Tomcat App</h1>
    <form action="hello" method="get">
        <label for="name">Enter your name:</label>
        <input type="text" id="name" name="name">
        <button type="submit">Submit</button>
    </form>
</body>
</html>

서블릿 만들기

서블릿은 요청을 처리하고 동적 콘텐츠를 생성하여 서버의 기능을 확장하는 데 사용되는 Java 프로그래밍 클래스입니다. Servlet은 Apache Tomcat과 같은 웹 컨테이너 내의 서버 쪽에서 실행되며 주로 웹 애플리케이션에서 HTTP 요청을 처리하는 데 사용됩니다. 클라이언트(예: 웹 브라우저)가 웹 서버에 요청을 보내면 서블릿이 요청을 처리합니다. 서블릿은 필요한 비즈니스 논리(예: 데이터베이스 액세스 또는 다른 서비스 호출)를 수행한 다음, 응답(종종 HTML 형식)을 생성하여 클라이언트로 다시 보냅니다. Servlet을 사용하면 개발자가 Java를 사용하여 동적 플랫폼 독립적 웹 애플리케이션을 만들 수 있습니다.

서블릿을 만들려면 다음 단계를 사용합니다.

  1. 다음 명령을 사용하여 서블릿을 추가하도록 파일 구조를 업데이트합니다.

    mkdir -p src/main/java/com/example && touch src/main/java/com/example/HelloServlet.java
    
  2. 다음 코드 예제를 사용하여 HelloSeverlet.java 파일의 내용을 업데이트합니다.

    package com.example;
    
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    
    @WebServlet("/hello")
    public class HelloServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String name = request.getParameter("name");
            response.setContentType("text/html");
            response.getWriter().write("<h1>Hello, " + name + "!</h1>");
        }
    }
    

새 파일 구조는 다음과 같습니다.

└── simple-tomcat-app
    ├── pom.xml
    └── src
        ├── main
        │   ├── java
        │   │   └── com
        │   │       └── example
        │   │           └── HelloServlet.java
        │   ├── resources
        │   └── webapp
        │       ├── index.jsp
        │       └── WEB-INF
        │           └── web.xml
        └── test
            ├── java
            └── resources

Tomcat에 로컬로 배포

다음 단계를 사용하여 로컬 Tomcat 서버를 구성하여 배포할 수 있습니다.

경고

사용자 이름과 암호를 tomcat-users.xml 및 Maven의 settings.xml 같은 구성 파일에 직접 저장하는 것은 안전하지 않으며, 특히 프로덕션 환경에서는 일반적으로 권장되지 않습니다. 그러나 다른 대안은 이 학습 모듈의 범위를 벗어납니다. 실제 사용자 이름과 암호를 사용하지 마세요.

  1. 다음 예제를 사용하여 Tomcat 구성 파일 conf/tomcat-users.xml 편집합니다.

    <tomcat-users>
        <user username="your-tomcat-username" password="your-tomcat-password" roles="manager-script"/>
    </tomcat-users>
    
  2. 다음 예제 를 사용하여 Maven의 your-tomcat-username 파일에 자격 증명을 추가하고 사용자 이름과 your-tomcat-password 암호로 바꿉다.

    <servers>
        <server>
            <id>TomcatServer</id>
            <username>your-tomcat-username</username>
            <password>your-tomcat-password</password>
        </server>
    </servers>
    

Tomcat에 웹앱 배포

다음 명령을 사용하여 웹앱을 패키지하고 배포합니다.

mvn clean package cargo:deploy

배포 후에는 http://localhost:8080/simple-tomcat-app에서 앱을 사용할 수 있습니다.