11.14. 여러 부팅 가능한 JAR 인스턴스에 대한 웹 세션 데이터 스토리지 활성화


웹 클러스터 애플리케이션을 부팅 가능한 JAR로 빌드하고 패키징할 수 있습니다.

사전 요구 사항

  • 9.minor.micro.Final-redhat-XXXXX 와 같은 최신 Maven 플러그인 버전을 확인했습니다. 여기서 9 는 주요 버전이며 마이너 버전은 마이크로 마이크로 버전이며 X 는 Red Hat 빌드 번호입니다. 예: 9.0.1.Final-redhat-00009.
  • Maven 프로젝트를 생성하고 웹 클러스터 애플리케이션을 생성하기 위한 종속 항목을 추가했습니다. 부팅 가능한 JAR Maven 프로젝트 생성 을 참조하십시오.

    중요

    Maven 프로젝트를 설정할 때 Maven archetype 구성에 값을 지정해야 합니다. 예를 들면 다음과 같습니다.

    $ mvn archetype:generate \
    -DgroupId=com.example.webclustering \
    -DartifactId=web-clustering \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false
    cd web-clustering
    참고

    절차에 표시된 예제에서는 다음 속성을 지정합니다.

    • ${bootable.jar.maven.plugin.version} 은(는) Maven 플러그인 버전에 해당합니다.

    프로젝트에 이러한 속성을 설정해야 합니다. 예를 들면 다음과 같습니다.

    <properties>
        <bootable.jar.maven.plugin.version>9.0.1.Final-redhat-00009</bootable.jar.maven.plugin.version>
    </properties>

프로세스

  1. pom.xml 파일의 & lt;build > 요소에 다음 내용을 추가합니다. 예를 들면 다음과 같습니다.

    <plugins>
    	<plugin>
    		<groupId>org.wildfly.plugins</groupId>
    		<artifactId>wildfly-jar-maven-plugin</artifactId>
    		<version>${bootable.jar.maven.plugin.version}</version>
    		<configuration>
    			<channels>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-8.0</artifactId>
    					</manifest>
    				</channel>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-xp-5.0</artifactId>
    					</manifest>
    				</channel>
    			</channels>
    			<feature-pack-location>org.jboss.eap.xp:wildfly-galleon-pack</feature-pack-location>
    			<layers>
    				<layer>datasources-web-server</layer>
    				<layer>web-clustering</layer>
    			</layers>
    		</configuration>
    		<executions>
    			<execution>
    				<goals>
    					<goal>package</goal>
    				</goals>
    			</execution>
    		</executions>
    	</plugin>
    </plugins>
    참고

    이 예제에서는 웹 클러스터링 Galleon 계층을 사용하여 웹 세션 공유를 활성화합니다.

  2. src/main/webapp/WEB-INF 디렉토리에서 다음 구성을 사용하여 web.xml 파일을 업데이트합니다.

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app version="4.0"
             xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
        <distributable/>
    </web-app>

    & lt;distributable/& gt; 태그는 이 서블릿이 여러 서버에 분산될 수 있음을 나타냅니다.

  3. Java 파일을 저장할 디렉터리를 만듭니다.

    $ mkdir -p APPLICATION_ROOT
    /src/main/java/com/example/webclustering/

    여기서 APPLICATION_ROOT 는 애플리케이션의 pom.xml 구성 파일이 포함된 디렉터리입니다.

  4. 다음 내용으로 Java 파일 MyServlet.java 를 만들고 파일을 APPLICATION_ROOT/src/main/java/com/example/webclustering/ 디렉터리에 저장합니다.

    package com.example.webclustering;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    @WebServlet(urlPatterns = {"/clustering"})
    public class MyServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws IOException {
            response.setContentType("text/html;charset=UTF-8");
            long t;
            User user = (User) request.getSession().getAttribute("user");
            if (user == null) {
                t = System.currentTimeMillis();
                user = new User(t);
                request.getSession().setAttribute("user", user);
            }
            try (PrintWriter out = response.getWriter()) {
                out.println("<!DOCTYPE html>");
                out.println("<html>");
                out.println("<head>");
                out.println("<title>Web clustering demo</title>");
                out.println("</head>");
                out.println("<body>");
                out.println("<h1>Session id " + request.getSession().getId() + "</h1>");
                out.println("<h1>User Created " + user.getCreated() + "</h1>");
                out.println("<h1>Host Name " + System.getenv("HOSTNAME") + "</h1>");
                out.println("</body>");
                out.println("</html>");
            }
        }
    }

    MyServlet.java 의 콘텐츠는 클라이언트가 HTTP 요청을 보내는 끝점을 정의합니다.

  5. 다음 콘텐츠를 사용하여 Java 파일 User.java 를 생성하고 파일을 APPLICATION_ROOT/src/main/java/com/example/webclustering/ 디렉터리에 저장합니다.

    package com.example.webclustering;
    
    import java.io.Serializable;
    
    public class User implements Serializable {
        private final long created;
    
        User(long created) {
            this.created = created;
        }
        public long getCreated() {
            return created;
        }
    }
  6. 애플리케이션을 패키징합니다.

    $ mvn package
  7. 선택 사항: JBoss EAP 베어 메탈 플랫폼에서 애플리케이션을 실행하려면 JBoss EAP 베어 메탈 플랫폼에서 부팅 가능한 JAR 사용에 설명된 단계를 따르십시오. 그러나 다음과 같은 차이점이 있습니다.

    1. JBoss EAP 베어 메탈 플랫폼에서는 다음 예와 같이 java -jar 명령을 사용하여 여러 부팅 가능한 JAR 인스턴스를 실행할 수 있습니다.

      $ java -jar target/web-clustering-bootable.jar -Djboss.node.name=node1
      
      $ java -jar target/web-clustering-bootable.jar -Djboss.node.name=node2 -Djboss.socket.binding.port-offset=10
    2. 확인: 노드 1 인스턴스에서 애플리케이션에 액세스할 수 있습니다. http://127.0.0.1:8080/clustering. 사용자 세션 ID와 사용자 생성 시간을 확인합니다.

      이 인스턴스를 종료한 후 노드 2 인스턴스에 액세스할 수 있습니다. http://127.0.0.1:8090/clustering. 사용자는 노드 1 인스턴스의 세션 ID 및 사용자 생성 시간과 일치해야 합니다.

  8. 선택 사항: JBoss EAP OpenShift 플랫폼에서 애플리케이션을 실행하려면 JBoss EAP OpenShift 플랫폼에서 부팅 가능한 JAR 사용에 설명된 단계를 수행하되 다음 단계를 완료합니다.

    1. &lt ;cloud/& gt; 요소를 플러그인 구성에 추가합니다. 예를 들면 다음과 같습니다.

      <plugins>
         <plugin>
             ... <!-- You must evolve the existing configuration with the <cloud/> element  -->
             <configuration >
                 ...
                 <cloud/>
              </configuration>
          </plugin>
      </plugins>
    2. 애플리케이션을 다시 빌드합니다.

      $ mvn clean package
    3. oc login 명령을 사용하여 OpenShift 인스턴스에 로그인합니다.
    4. OpenShift에서 새 프로젝트를 생성합니다. 예를 들면 다음과 같습니다.

      $ oc new-project bootable-jar-project
    5. JBoss EAP OpenShift 플랫폼에서 웹 클러스터 애플리케이션을 실행하려면 포드가 실행 중인 서비스 계정에 대한 권한 부여 액세스 권한을 부여해야 합니다. 그러면 서비스 계정이 Kubernetes REST API에 액세스할 수 있습니다. 다음 예제에서는 서비스 계정에 권한 부여 권한을 보여줍니다.

      $ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
    6. 다음 oc 명령을 입력하여 애플리케이션 이미지를 생성합니다.

      $ mkdir target/openshift && cp target/web-clustering-bootable.jar target/openshift 
      1
      
      
      $ oc import-image ubi8/openjdk-17 --from=registry.redhat.io/ubi8/openjdk-17 --confirm 
      2
      
      
      $ oc new-build --strategy source --binary --image-stream openjdk-17 --name web-clustering 
      3
      
      
      $ oc start-build web-clustering --from-dir target/openshift 
      4
      1
      target/openshift 하위 디렉터리를 생성합니다. 패키지된 애플리케이션은 openshift 하위 디렉터리에 복사됩니다.
      2
      최신 OpenJDK 17 이미지 스트림 태그 및 이미지 정보를 OpenShift 프로젝트로 가져옵니다.
      3
      web-clustering 디렉터리 및 OpenJDK 17 이미지 스트림을 기반으로 빌드 구성을 생성합니다.
      4
      target/openshift 하위 디렉터리를 바이너리 입력으로 사용하여 애플리케이션을 빌드합니다.
    7. 애플리케이션을 배포합니다.

      $ oc new-app web-clustering -e KUBERNETES_NAMESPACE=$(oc project -q)
      
      $ oc expose svc/web-clustering
      중요

      KUBERNETES_NAMESPACE 환경 변수를 사용하여 현재 OpenShift 네임 스페이스의 다른 pod를 확인해야 합니다. 그러지 않으면 서버가 default 네임스페이스에서 포드를 검색하려고 합니다.

    8. 경로의 URL을 가져옵니다.

      $ oc get route web-clustering --template='{{ .spec.host }}'
    9. 이전 명령에서 반환된 URL을 사용하여 웹 브라우저의 애플리케이션에 액세스합니다. 예를 들면 다음과 같습니다.

      http://ROUTE_NAME/clustering

      사용자 세션 ID 및 사용자 생성 시간을 확인합니다.

    10. 애플리케이션을 두 개의 Pod로 확장합니다.

      $ oc scale --replicas=2 deployments web-clustering
    11. 다음 명령을 실행하여 사용 가능한 OpenShift Pod 목록을 보고 포드 빌드 상태를 확인합니다.

      $ oc get pods
    12. oc delete pod web-clustering-POD_NAME 명령을 사용하여 가장 오래된 Pod를 종료합니다. 여기서 POD_NAME 은 가장 오래된 Pod의 이름입니다.
    13. 애플리케이션에 다시 액세스합니다.

      http://ROUTE_NAME/clustering

      예상 결과: 새 Pod에서 생성한 세션 ID와 종료된 Pod의 생성 시간과 일치합니다. 이는 웹 세션 데이터 스토리지가 활성화되었음을 나타냅니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동