JBoss EAP XP 3.0.0 사용

Red Hat JBoss Enterprise Application Platform 7.4

JBoss EAP XP 3.0.0과 함께 사용

초록

이 문서에서는 JBoss EAP XP 3.0.0에서 MicroProfile 사용에 대한 일반적인 정보를 제공합니다.

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

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

Red Hat 문서에 대한 피드백 제공

문서에 대한 의견을 보내 주셔서 감사합니다. 피드백을 제공하기 위해 문서의 텍스트를 강조 표시하고 주석을 추가할 수 있습니다. Red Hat 설명서에 대한 피드백을 제출하는 방법을 알아보려면 절차의 단계를 따르십시오.

사전 요구 사항

  • Red Hat 고객 포털에 로그인합니다.
  • Red Hat 고객 포털에서 다중 페이지 HTML 형식으로 문서를 봅니다.

절차

  1. 피드백 (Fedback)을 클릭하여 기존 reader 주석을 확인합니다.

    참고

    피드백 기능은 다중 페이지 HTML 형식으로만 활성화됩니다.

  2. 피드백을 제공할 문서의 섹션을 강조 표시합니다.
  3. 선택한 텍스트 옆에 표시되는 프롬프트 메뉴에서 Add Feedback(피드백 추가 )을 클릭합니다.

    텍스트 상자가 페이지 오른쪽에 있는 피드백 섹션에 열립니다.

  4. 텍스트 상자에 피드백을 입력하고 Submit(제출 )을 클릭합니다.

    설명서 문제가 생성되어 있습니다.

  5. 이 문제를 보려면 피드백 보기에서 문제 추적기 링크를 클릭합니다.

1장. 최신 MicroProfile 기능을 위한 JBoss EAP XP

1.1. JBoss EAP XP 정보

MicroProfile 확장 팩(JBoss EAP XP)은 JBoss EAP XP 관리자를 사용하여 제공되는 패치 스트림으로 사용할 수 있습니다.

참고

JBoss EAP XP에는 별도의 지원 및 라이프사이클 정책이 적용됩니다. 자세한 내용은 JBoss Enterprise Application Platform 확장 팩 지원 및 라이프 사이클 정책 페이지를 참조하십시오.

JBoss EAP XP 패치는 다음과 같은 MicroProfile 4.0 구성 요소를 제공합니다.

  • MicroProfile Config
  • MicroProfile 오류 허용 오차
  • MicroProfile Health
  • MicroProfile JWT
  • MicroProfile Metrics
  • MicroProfile OpenAPI
  • MicroProfile OpenTracing
  • MicroProfile REST 클라이언트
  • MicroProfile Reactive Messaging
참고

MicroProfile Reactive Messaging 하위 시스템은 Red Hat AMQ Streams를 지원합니다. 이 기능은 MicroProfile Reactive Messaging 1.0 API를 구현하고 Red Hat은 JBoss EAP XP 3.0.0의 기술 프리뷰로 기능을 제공합니다.

Red Hat은 JBoss EAP에서 Red Hat AMQ Streams 2021.Q2를 테스트했습니다. 그러나 JBoss EAP XP 3.0.0에서 테스트한 최신 Red Hat AMQ Streams 버전에 대한 정보는 Red Hat JBoss Enterprise Application Platform 지원 구성 페이지를 참조하십시오.

1.2. JBoss EAP XP 설치

JBoss EAP XP를 설치할 때 JBoss EAP XP 패치가 사용 중인 JBoss EAP 버전과 호환되는지 확인하십시오. JBoss EAP XP 3.0.x 패치는 JBoss EAP 7.4 릴리스와 호환됩니다.

참고

XP 관리자와 EAP 아카이브를 통해 또는 JBoss EAP XP OpenShift Container 이미지를 사용하여 JBoss EAP XP를 설치할 수 있습니다. EAP RPM 상단에 JBoss EAP XP를 설치할 수 없습니다.

추가 리소스

  • 최신 JBoss EAP 릴리스에 최신 JBoss EAP XP 패치를 설치하는 방법에 대한 자세한 내용은 JBoss EAP XP 3.0.0 on JBoss EAP 7.4.x 를 참조하십시오.

1.3. JBoss EAP XP 관리자

JBoss EAP XP 관리자는 Product Downloads 페이지에서 다운로드할 수 있는 실행 가능한 jar 파일입니다. JBoss EAP XP 패치 스트림에서 JBoss EAP XP 패치를 적용하려면 JBoss EAP XP 관리자를 사용합니다. 패치에는 MicroProfile 4.0 구현 및 이러한 MicroProfile 4.0 구현에 대한 버그 수정이 포함되어 있습니다.

참고

관리 콘솔을 사용하여 JBoss EAP XP 패치를 관리할 수 없습니다.

인수 없이 또는 help 명령을 사용하여 JBoss EAP XP 관리자를 실행하는 경우 어떤 작업을 수행하는지에 대한 설명과 함께 사용 가능한 모든 명령 목록이 표시됩니다.

사용 가능한 인수에 대한 자세한 정보를 얻으려면 help 명령과 함께 관리자를 실행합니다.

참고

대부분의 JBoss EAP XP 관리자 명령은 JBoss EAP XP 패치 스트림을 관리하기 위해 --jboss-home 인수를 사용하여 JBoss EAP XP 서버를 가리킵니다. 이 값을 생략하려는 경우 server 있는 서버 경로를 지정합니다. --jboss-home 이 환경 변수보다 우선합니다.

1.4. JBoss EAP XP manager 3.0 명령

JBoss EAP XP 관리자 3.0은 JBoss EAP XP 패치 스트림을 관리하고 JBoss EAP 7.4.x 기본 패치를 적용하기 위한 다양한 명령을 제공합니다.

다음 명령이 제공됩니다.

patch-apply

이 명령을 사용하여 JBoss EAP 설치에 패치를 적용합니다.

patch-apply 명령은 patch apply 관리 CLI 명령과 유사합니다. patch-apply 명령은 툴을 사용하여 패치를 적용하는 데 필요한 인수만 허용합니다. 다른 패치 적용 관리 CLI 명령 인수에 기본값을 사용합니다.

patch-apply 명령을 사용하여 서버에서 활성화된 패치 스트림에 패치를 적용할 수 있습니다. 또한 명령을 사용하여 기본 서버 패치와 XP 패치를 모두 적용할 수 있습니다.

patch-apply 명령 사용 예:

$ java -jar jboss-eap-xp-manager.jar patch-apply --jboss-home=/PATH/TO/EAP --patch=/PATH/TO/PATCH/jboss-eap-7.3.4-patch.zip

XP 패치를 적용하면 JBoss EAP XP manager 3.0에서 패치 및 패치 스트림이 일치하지 않도록 검증을 수행합니다. 다음 예제에서는 잘못된 조합을 보여줍니다.

  • XP 3.0 패치 스트림이 설정된 서버에 JBoss EAP XP 2.0 패치를 설치하려고 하면 다음과 같은 오류가 발생합니다.

    java.lang.IllegalStateException: The JBoss EAP XP patch stream in the patch 'jboss-eap-xp-2.0' does not match the currently enabled JBoss EAP XP patch stream [jboss-eap-xp-3.0]
    	at org.jboss.eap.util.xp.patch.stream.manager.ManagerPatchApplyAction.doExecute(ManagerPatchApplyAction.java:33)
    	at org.jboss.eap.util.xp.patch.stream.manager.ManagerAction.execute(ManagerAction.java:40)
    	at org.jboss.eap.util.xp.patch.stream.manager.ManagerMain.main(ManagerMain.java:50)
  • JBoss EAP XP 3.0 패치 스트림에 대해 설정되지 않은 서버에 JBoss EAP XP 3.0 패치를 설치하려고 하면 다음과 같은 오류가 발생합니다.

    java.lang.IllegalStateException: You are attempting to install a patch for the 'jboss-eap-xp-3.0' JBoss EAP XP Patch Stream. However this patch stream is not yet set up in the JBoss EAP server. Run the 'setup' command to enable the patch stream.
    	at org.jboss.eap.util.xp.patch.stream.manager.ManagerPatchApplyAction.doExecute(ManagerPatchApplyAction.java:29)
    	at org.jboss.eap.util.xp.patch.stream.manager.ManagerAction.execute(ManagerAction.java:40)
    	at org.jboss.eap.util.xp.patch.stream.manager.ManagerMain.main(ManagerMain.java:50)

    두 경우 모두 서버를 변경하지 않습니다.

remove

JBoss EAP 서버에서 JBoss EAP XP 패치 스트림 설정을 제거하려면 다음 명령을 사용합니다.

remove 명령 사용 예

$ java -jar jboss-eap-xp-manager.jar remove --jboss-home=/PATH/TO/EAP

setup

이 명령을 사용하여 JBoss EAP XP 패치 스트림에 대해 완전한 JBoss EAP 서버를 설정합니다.

setup 명령을 사용하는 경우 JBoss EAP XP 관리자는 다음 작업을 수행합니다.

  • JBoss EAP XP 3.0 패치 스트림을 활성화합니다.
  • --base-patch 및 --xp-patch 특성을 사용하여 지정된 패치를 적용합니다.
  • standalone-microprofile.xmlstandalone-microprofile-ha.xml 구성 파일을 서버 구성 디렉터리에 복사합니다.

    이전 구성 파일이 이미 설치된 경우 새 파일은 standalone-microprofile-yyyyMMdd-HHmmss.xml 과 같은 대상 구성 디렉터리에 타임스탬프 사본으로 저장됩니다.

    jboss -config-directory 인수를 사용하여 대상 디렉터리를 설정할 수 있습니다.

setup 명령 사용 예

$ java -jar jboss-eap-xp-manager.jar setup --jboss-home=/PATH/TO/EAP

status

이 명령을 사용하여 JBoss EAP XP 서버의 현재 상태를 찾습니다. status 명령은 다음 정보를 반환합니다.

  • JBoss EAP XP 스트림의 상태.
  • 현재 상태가 되므로 지원 정책 변경 사항.
  • JBoss EAP XP의 주요 버전.
  • 활성화된 패치 스트림 및 누적 패치 ID.
  • 상태를 변경하는 데 사용 가능한 JBoss EAP XP 관리자 명령.

상태 명령 사용 예

$ java -jar jboss-eap-xp-manager.jar status --jboss-home=/PATH/TO/EAP

upgrade

이 명령을 사용하여 이전 JBoss EAP XP 패치 스트림을 JBoss EAP 서버의 최신 패치 스트림으로 업그레이드합니다.

upgrade 명령을 사용하는 경우 JBoss EAP XP 관리자는 다음 작업을 수행합니다.

  • 서버에서 이전 패치 스트림을 활성화하는 파일의 백업을 생성합니다.
  • JBoss EAP XP 3.0 패치 스트림을 활성화합니다.
  • --base-patch 및 --xp-patch 특성을 사용하여 지정된 패치를 적용합니다.
  • standalone-microprofile.xmlstandalone-microprofile-ha.xml 구성 파일을 서버 구성 디렉터리에 복사합니다. 이전 구성 파일이 이미 설치된 경우 새 파일은 standalone-microprofile-yyyyMMdd-HHmmss.xml 과 같은 대상 구성 디렉터리에 타임스탬프 사본으로 저장됩니다.
  • 문제가 발생하면 JBoss EAP XP 관리자는 생성한 백업에서 이전 패치 스트림을 복원하려고 합니다.

    --jboss-config-directory 인수를 사용하여 대상 디렉터리를 설정할 수 있습니다.

upgrade 명령 사용 예:

$ java -jar jboss-eap-xp-manager.jar upgrade --jboss-home=/PATH/TO/EAP

1.5. JBoss EAP 7.4.x에 JBoss EAP XP 3.0.0 설치

JBoss EAP 7.4 기본 서버에 JBoss EAP XP 3.0.0을 설치합니다.

JBoss EAP XP manager 3.0.0을 사용하여 JBoss EAP XP 3.0.0 패치 스트림을 관리합니다.

참고

JBoss EAP XP 3.0.0은 JBoss EAP 7.4.x에서 인증되었습니다.

사전 요구 사항

  • Product Downloads 페이지에서 다음 파일을 다운로드했습니다.

    • jboss-eap-xp-3.0.0-manager.jar 파일(JBoss EAP XP manager 3.0)
    • JBoss EAP 7.4 서버 아카이브 파일
    • JBoss EAP XP 3.0.0 패치

절차

  1. 다운로드한 JBoss EAP 7.4 서버 아카이브 파일을 JBoss EAP 설치 경로로 추출합니다.
  2. 다음 명령을 사용하여 JBoss EAP XP manager 3.0.0을 설정하여 JBoss EAP XP 3.0 패치 스트림을 관리합니다.

    $ java -jar jboss-eap-xp-manager.jar setup --jboss-home=<path_to_eap>
    참고

    JBoss EAP XP 3.0.0 패치를 동시에 적용할 수 있습니다. --xp-patch 인수를 사용하여 JBoss EAP XP 3.0.0 패치 경로를 포함합니다.

    예제:

    $ java -jar jboss-eap-xp-manager.jar setup --jboss-home=<path_to_eap> --xp-patch <path_to_patch>jboss-eap-xp-3.0.0-patch.zip

    이제 서버가 JBoss EAP XP 3.0.0 패치 스트림을 관리할 준비가 되었습니다.

  3. 선택 사항: --xp-patch 인수를 사용하여 JBoss EAP XP 3.0.0 패치를 JBoss EAP 서버에 적용하지 않은 경우 JBoss EAP XP 3.0.0 patch- apply 명령을 사용하여 JBoss EAP XP 3.0.0 패치를 적용합니다.

    $ java -jar jboss-eap-xp-manager.jar patch-apply --jboss-home=<path_to_eap> --patch=<path_to_patch>jboss-eap-xp-3.0.0-patch.zip

    patch-apply 명령은 patch apply 관리 CLI 명령과 유사합니다. patch apply management CLI 명령을 사용하여 패치를 적용할 수도 있습니다.

이제 JBoss EAP 서버가 JBoss EAP XP 3.0.0 패치와 함께 패치될 때 JBoss EAP XP 3.0.0 패치 스트림을 관리할 준비가 되었습니다.

1.6. JBoss EAP XP 설치 제거

JBoss EAP XP를 설치 제거하면 JBoss EAP XP 3.0.0 패치 스트림 및 MicroProfile 4.0 기능 활성화와 관련된 모든 파일이 제거됩니다. 설치 제거 프로세스는 기본 서버 패치 스트림 또는 기능에 영향을 주지 않습니다.

참고

제거 프로세스는 JBoss EAP XP 패치 스트림을 활성화했을 때 JBoss EAP XP 패치에 추가한 구성 파일을 포함하여 구성 파일이 제거되지 않습니다.

절차

  • 다음 명령을 실행하여 JBoss EAP XP 3.0.0을 설치 제거합니다.

    $ java -jar jboss-eap-xp-manager.jar remove --jboss-home=/PATH/TO/EAP

MicroProfile 4.0 기능을 다시 설치하려면 setup 명령을 다시 실행하여 패치 스트림을 활성화한 다음 JBoss EAP XP 패치를 적용하여 MicroProfile 4.0 모듈을 추가합니다.

1.7. JBoss EAP XP의 상태 보기

상태 명령을 사용하여 다음 정보를 볼 수 있습니다.

  • JBoss EAP XP 스트림의 상태.
  • 현재 상태가 되므로 지원 정책 변경 사항.
  • JBoss EAP XP의 주요 버전.
  • 활성화된 패치 스트림 및 누적 패치 ID.
  • 상태를 변경하는 데 사용 가능한 JBoss EAP XP 관리자 명령.

JBoss EAP XP는 다음 상태 중 하나일 수 있습니다.

설정되지 않음
JBoss EAP는 완전하며 JBoss EAP XP가 설정되어 있지 않습니다.
설정
JBoss EAP에는 JBoss EAP XP가 설정되어 있습니다. 사용자가 CLI를 사용하여 확인할 수 있으므로 XP 패치 스트림의 버전이 표시되지 않습니다.
일치하지 않음
JBoss EAP XP와 관련된 파일은 일관되지 않은 상태입니다. 이는 오류 조건이므로 정상적으로 수행해서는 안 됩니다. 이 오류가 발생하면 Uninstalling JBoss EAP XP 항목에 설명된 대로 JBoss EAP XP 관리자를 제거하고 setup 명령을 사용하여 JBoss EAP XP를 다시 설치합니다.

절차

  • 다음 명령을 실행하여 JBoss EAP XP의 상태를 확인합니다.

    $ java -jar jboss-eap-xp-manager.jar status --jboss-home=<path_to_eap>

1.8. JBoss EAP XP 및 JBoss EAP 7.4.x 기본 패치 롤백

관리 CLI를 사용하여 이전에 적용된 JBoss EAP XP 패치 또는 JBoss EAP 7.4.x 기본 패치를 롤백할 수 있습니다.

추가 리소스

2장. MicroProfile 이해

2.1. MicroProfile Config

2.1.1. JBoss EAP의 MicroProfile 구성

구성 데이터는 동적으로 변경될 수 있으며 애플리케이션은 서버를 다시 시작하지 않고도 최신 구성 정보에 액세스할 수 있어야 합니다.

MicroProfile Config는 구성 데이터의 이식 가능한 외부화를 제공합니다. 즉, 수정이나 재포장 없이 여러 환경에서 실행하도록 애플리케이션 및 마이크로 서비스를 구성할 수 있습니다.

MicroProfile 구성 기능은 SmallRœ Config 구성 요소를 사용하여 JBoss EAP에서 구현되며 microprofile-config-smallrye 하위 시스템에서 제공합니다.

참고

MicroProfile Config는 JBoss EAP XP에서만 지원됩니다. JBoss EAP에서는 지원되지 않습니다.

중요

자체 Config 구현을 추가하는 경우 최신 버전의 Config 인터페이스에서 메서드를 사용해야 합니다.

2.1.2. MicroProfile Config에서 지원되는 MicroProfile 구성 소스

MicroProfile 구성 속성은 다양한 위치에서 가져올 수 있으며 다른 형식일 수 있습니다. 이러한 속성은 ConfigSources에서 제공합니다. ConfigSources는 org.eclipse.microprofile.config.spi.ConfigSource 인터페이스의 구현입니다.

MicroProfile Config 사양은 구성 값을 검색하기 위한 다음과 같은 기본 ConfigSource 구현을 제공합니다.

  • System.getProperties().
  • System.getenv().
  • 클래스 경로의 모든 META-INF/microprofile-config.properties 파일.

microprofile-config-smallrye 하위 시스템은 구성 값을 검색하는 데 필요한 추가 ConfigSource 리소스 유형을 지원합니다. 다음 리소스에서 구성 값을 검색할 수도 있습니다.

  • microprofile-config-smallrye/config-source 관리 리소스의 속성
  • 디렉토리의 파일
  • ConfigSource 클래스
  • ConfigSourceProvider class

2.2. MicroProfile 오류 허용 오차

2.2.1. MicroProfile Fault 허용 오차 사양 정보

MicroProfile Fault Tolerance 사양은 분산 마이크로 서비스에 내재된 오류를 처리하는 전략을 정의합니다.

MicroProfile Fault Tolerance 사양은 오류를 처리하는 다음 전략을 정의합니다.

Timeout
실행이 완료되어야 하는 시간을 정의합니다. 시간 제한을 정의하면 무기한 실행을 기다릴 수 없습니다.
Retry
실패한 실행을 재시도하기 위한 기준을 정의합니다.
폴백
실행 실패의 경우 대체 항목을 제공합니다.
CircuitBreaker
일시적으로 중지하기 전에 실패한 실행 시도 수를 정의합니다. 실행을 다시 시작하기 전에 지연 길이를 정의할 수 있습니다.
Bulkhead
나머지 시스템이 작동할 수 있도록 시스템의 일부에서 오류를 격리합니다.
비동기
별도의 스레드에서 클라이언트 요청을 실행합니다.

2.2.2. JBoss EAP의 MicroProfile Fault 허용 오차

microprofile-fault-tolerance-smallrye 하위 시스템은 JBoss EAP에서 MicroProfile Fault Tolerance를 지원합니다. 하위 시스템은 JBoss EAP XP 스트림에서만 사용할 수 있습니다.

microprofile-fault-tolerance-smallrye 하위 시스템은 인터셉터 바인딩에 다음 주석을 제공합니다.

  • @Timeout
  • @Retry
  • @Fallback
  • @CircuitBreaker
  • @Bulkhead
  • @Asynchronous

이러한 주석은 클래스 수준 또는 메서드 수준에서 바인딩할 수 있습니다. 클래스에 바인딩된 주석은 해당 클래스의 모든 비즈니스 메서드에 적용됩니다.

바인딩 인터셉터에는 다음 규칙이 적용됩니다.

  • 구성 요소 클래스가 클래스 수준의 인터셉터 바인딩을 선언하거나 상속하는 경우 다음 제한 사항이 적용됩니다.

    • 클래스는 최종으로 선언해서는 안 됩니다.
    • 클래스에는 정적, 프라이빗 또는 최종 메서드가 포함되어서는 안 됩니다.
  • 구성 요소 클래스의 정적인 비개인 메서드가 메서드 수준 인터셉터 바인딩을 선언하는 경우 메서드와 구성 요소 클래스를 최종 선언할 수 없습니다.

내결함성 작업에는 다음과 같은 제한 사항이 있습니다.

  • 빈 클래스 또는 빈 클래스 메서드에 내결함성 인터셉터 바인딩을 적용해야 합니다.
  • 호출하는 경우 호출은 Jakarta Contexts 및 Dependency Injection 사양에 정의된 비즈니스 메서드 호출이어야 합니다.
  • 다음 조건이 모두 true이면 작업이 내결함으로 간주되지 않습니다.

    • 이 방법 자체는 내결함성 인터셉터에 바인딩되지 않습니다.
    • 메서드를 포함하는 클래스는 내결함성 인터셉터에 바인딩되지 않습니다.

microprofile-fault-tolerance-smallrye 하위 시스템은 MicroProfile Fault Tolerance에서 제공하는 구성 옵션 외에도 다음과 같은 구성 옵션을 제공합니다.

  • io.smallrye.faulttolerance.globalThreadPoolSize
  • io.smallrye.faulttolerance.timeoutExecutorThreads

2.3. MicroProfile Health

2.3.1. JBoss EAP의 MicroProfile 상태

JBoss EAP에는 JBoss EAP 인스턴스가 예상대로 응답하는지 여부를 결정하는 데 사용할 수 있는 SmallR Health 구성 요소가 포함되어 있습니다. 이 기능은 기본적으로 활성화되어 있습니다.

MicroProfile Health는 JBoss EAP를 독립 실행형 서버로 실행할 때만 사용할 수 있습니다.

MicroProfile Health 사양은 다음과 같은 상태 점검을 정의합니다.

준비
애플리케이션이 요청을 처리할 준비가 되었는지 여부를 결정합니다. 주석 @Readiness 는 이 상태 점검을 제공합니다.
활성
애플리케이션이 실행 중인지 확인합니다. 주석 @Liveness 는 이 상태 점검을 제공합니다.

MicroProfile Health 3.0에서 @Health 주석이 제거되었습니다.

MicroProfile Health 3.0에는 다음과 같은 오류가 있습니다.

  • @Health 한정자 정리
  • HealthCheckResponse 상태 매개 변수의 이름을 state 로 변경하여 직렬화 문제를 해결합니다. 또한 해당 방법의 이름을 변경했습니다.

MicroProfile Health 3.0의 변경 사항 중단에 대한 자세한 내용은 Release Notes for MicroProfile Health 3.0 을 참조하십시오.

중요

:empty-readiness-checks-status:empty-liveness-checks-status 관리 특성은 준비 상태 또는 활성 프로브가 정의되지 않은 경우 글로벌 상태를 지정합니다.

2.4. MicroProfile JWT

2.4.1. JBoss EAP에서 MicroProfile JWT 통합

하위 시스템 microprofile-jwt-smallrye 는 JBoss EAP에서 MicroProfile JWT 통합을 제공합니다.

microprofile-jwt-smallrye 하위 시스템에서 다음 기능을 제공합니다.

  • MicroProfile JWT 보안을 사용하는 배포 탐지.
  • MicroProfile JWT 지원 활성화.

하위 시스템에는 구성 가능한 특성이나 리소스가 포함되어 있지 않습니다.

org.eclipse.micro profile.jwt.auth.api 모듈에서는 microprofile-jwt -smallrye 하위 시스템 외에도 JBoss EAP에서 MicroProfile JWT 통합을 제공합니다.

추가 리소스

2.4.2. 기존 배포와 MicroProfile JWT 배포의 차이점

MicroProfile JWT 배포는 기존 JBoss EAP 배포와 같은 관리형 SecurityDomain 리소스에 의존하지 않습니다. 대신 MicroProfile JWT 배포에서 가상 SecurityDomain이 생성되고 사용됩니다.

MicroProfile JWT 배포는 MicroProfile 구성 속성과 microprofile-jwt-smallrye 하위 시스템에 완전히 구성되므로 가상 SecurityDomain은 배포에 대한 다른 관리 구성이 필요하지 않습니다.

2.4.3. JBoss EAP에서 MicroProfile JWT 활성화

MicroProfile JWT는 애플리케이션에서 인증 방법의 존재를 기반으로 애플리케이션에 대해 활성화됩니다.

MicroProfile JWT 통합은 다음과 같은 방식으로 애플리케이션에 대해 활성화됩니다.

  • 배포 프로세스의 일부로 JBoss EAP는 애플리케이션 아카이브를 검사하여 auth-method 가 있는지 확인합니다.
  • auth-method 가 있고 MP-JWT 로 정의되면 MicroProfile JWT 통합이 활성화됩니다.

auth-method 는 다음 파일 중 하나 또는 둘 다에서 지정할 수 있습니다.

  • @LoginConfig주석이 있는 javax.ws.rs.core.Application 을 확장하는 클래스가 포함된 파일
  • web.xml 구성 파일

auth-method 가 주석을 사용하여 클래스에 정의되어 있고 web.xml 구성 파일에서 정의되는 경우 web.xml 구성 파일의 정의가 사용됩니다.

2.4.4. JBoss EAP에서 MicroProfile JWT의 제한 사항

JBoss EAP의 MicroProfile JWT 구현에는 특정 제한 사항이 있습니다.

MicroProfile JWT 구현의 다음과 같은 제한 사항은 JBoss EAP에 있습니다.

  • MicroProfile JWT 구현은 mp.jwt.verify.publickey 속성에 제공된 JSON 웹 키 집합(JWKS)의 첫 번째 키만 구문 분석합니다. 따라서 두 번째 키 또는 두 번째 키 이후에 두 번째 키로 토큰에 서명을 요청하면 토큰 확인에 실패하고 토큰이 포함된 요청에는 인증되지 않습니다.
  • JWKS의 Base64 인코딩은 지원되지 않습니다.

두 경우 모두, mp.jwt.verify.publickey.location 구성 속성을 사용하는 대신 일반 텍스트 JWKS를 참조할 수 있습니다.

2.5. MicroProfile Metrics

2.5.1. JBoss EAP의 MicroProfile 지표

JBoss EAP에는 SmallRmeters Metrics 구성 요소가 포함되어 있습니다. SmallRœ Metrics 구성 요소는 microprofile-metrics-smallrye 하위 시스템을 사용하여 MicroProfile 지표 기능을 제공합니다.

microprofile-metrics-smallrye 하위 시스템은 JBoss EAP 인스턴스에 대한 모니터링 데이터를 제공합니다. 하위 시스템은 기본적으로 활성화되어 있습니다.

중요

microprofile-metrics-smallrye 하위 시스템은 독립 실행형 구성에서만 활성화됩니다.

2.6. MicroProfile OpenAPI

2.6.1. JBoss EAP의 MicroProfile OpenAPI

MicroProfile OpenAPI는 microprofile-openapi-smallrye 하위 시스템을 사용하여 JBoss EAP에 통합됩니다.

MicroProfile OpenAPI 사양은 OpenAPI 3.0 문서를 제공하는 HTTP 엔드포인트를 정의합니다. OpenAPI 3.0 문서에서는 호스트의 REST 서비스를 설명합니다. OpenAPI 엔드포인트는 구성된 경로(예: http://localhost:8080/openapi) 를 사용하여 배포와 연결된 호스트의 루트로 등록됩니다.

참고

현재 가상 호스트의 OpenAPI 엔드포인트는 단일 배포만 문서화할 수 있습니다. 동일한 가상 호스트에서 서로 다른 컨텍스트 경로에 등록된 여러 배포에서 OpenAPI를 사용하려면 각 배포에서 고유한 엔드포인트 경로를 사용해야 합니다.

OpenAPI 엔드포인트는 기본적으로 YAML 문서를 반환합니다. Accept HTTP 헤더 또는 format 쿼리 매개변수를 사용하여 JSON 문서를 요청할 수도 있습니다.

지정된 애플리케이션의 Undertow 서버 또는 호스트가 HTTPS 리스너를 정의하는 경우 OpenAPI 문서를 HTTPS를 사용하여 사용할 수도 있습니다. 예를 들어 HTTPS의 엔드포인트는 https://localhost:8443/openapi 입니다.

2.7. MicroProfile OpenTracing

2.7.1. MicroProfile OpenTracing

서비스 경계 간에 요청을 추적하는 기능은 특히 요청이 라이프사이클 동안 여러 서비스를 통과할 수 있는 마이크로 서비스 환경에서 중요합니다.

MicroProfile OpenTracing 사양은 CDI 빈 애플리케이션 내에서 OpenTracing 호환 추적기 인터페이스에 액세스하기 위한 동작 및 API를 정의합니다. Tracer 인터페이스는 JAX-RS 애플리케이션을 자동으로 추적합니다.

동작은 들어오고 나가는 요청에 대해 OpenTracing Spans가 자동으로 생성되는 방법을 지정합니다. API는 지정된 엔드포인트에 대한 추적을 명시적으로 비활성화하거나 활성화하는 방법을 정의합니다.

추가 리소스

2.7.2. JBoss EAP에서 MicroProfile OpenTracing

microprofile-opentracing-smallrye 하위 시스템을 사용하여 Jakarta EE 애플리케이션의 분산 추적을 구성할 수 있습니다. 이 하위 시스템은 SmallR OpenTracing 구성 요소를 사용하여 JBoss EAP에 MicroProfile OpenTracing 기능을 제공합니다.

MicroProfile OpenTracing 2.0은 애플리케이션에 대한 요청 추적을 지원합니다. 관리 CLI 또는 관리 콘솔과 함께 JBoss EAP 관리 API를 사용하여 Jakarta EE에 일반적으로 사용되는 구성 요소에 대한 기본 Jaeger Java 클라이언트 추적기 및 계측 라이브러리를 구성할 수 있습니다.

참고

JBoss EAP 서버에 배포된 각 개별 WAR에는 자동으로 고유한 Tracer 인스턴스가 있습니다. EAR 내의 각 WAR는 개별 WAR로 처리되며 각각 고유한 Tracer 인스턴스가 있습니다. 기본적으로 Jaeger 클라이언트와 함께 사용되는 서비스 이름은 배포 이름(일반적으로 WAR 파일 이름)에서 파생됩니다.

microprofile-opentracing-smallrye 하위 시스템에서 시스템 속성 또는 환경 변수를 설정하여 Jaeger Java 클라이언트를 구성할 수 있습니다.

중요

시스템 속성 및 환경 변수를 사용하여 Jeager 클라이언트 추적 프로그램 구성은 기술 프리뷰로 제공됩니다. Jeager Client tracer와 연관된 시스템 속성 및 환경 변수는 향후 릴리스에서 서로 변경되고 호환되지 않을 수 있습니다.

참고

기본적으로 Jaeger Client for Java의 probabilistic 샘플링 전략은 0.001 로 설정되어 있습니다. 즉, 약 1만 개의 추적만 샘플링됩니다. 모든 요청을 샘플링하려면 시스템 속성 JAEGER_SAMPLER_TYPEconst 로 설정하고 JAEGER_SAMPLER_PARAM1 로 설정합니다.

추가 리소스

2.8. MicroProfile REST 클라이언트

2.8.1. MicroProfile REST 클라이언트

JBoss EAP XP 3.0.0은 Jakarta RESTful Web Services 2.1.6 클라이언트 API에서 빌드하는 MicroProfile REST 클라이언트 2.0을 지원하여 HTTP를 통해 RESTful 서비스를 호출하는 안전한 타입 접근 방식을 제공합니다. MicroProfile TypeSafe REST 클라이언트는 Java 인터페이스로 정의됩니다. MicroProfile REST 클라이언트를 사용하면 실행 가능한 코드를 사용하여 클라이언트 애플리케이션을 작성할 수 있습니다.

MicroProfile REST 클라이언트를 사용하여 다음 기능을 사용할 수 있습니다.

  • 직관적인 구문
  • 공급자의 프로그램 등록
  • 공급자의 선언적 등록
  • 헤더 선언 사양
  • 서버에서 헤더 전파
  • ResponseExceptionMapper
  • 자카르타 컨텍스트 및 종속성 주입 통합
  • SSE(server-sent Events)에 액세스

3장. JBoss EAP에서 MicroProfile 관리

3.1. MicroProfile OpenTracing 관리

3.1.1. MicroProfile 열기 추적 활성화

다음 관리 CLI 명령을 사용하여 서버 구성에 하위 시스템을 추가하여 서버 인스턴스에 대해 MicroProfile Open Tracing 기능을 전역적으로 활성화합니다.

절차

  1. 다음 관리 명령을 사용하여 microprofile-opentracing-smallrye 하위 시스템을 활성화합니다.

    /subsystem=microprofile-opentracing-smallrye:add()
  2. 변경 사항을 적용하려면 서버를 다시 로드합니다.

    reload

3.1.2. microprofile-opentracing-smallrye 하위 시스템 제거

microprofile-opentracing-smallrye 하위 시스템은 기본 JBoss EAP 7.4 구성에 포함되어 있습니다. 이 하위 시스템은 JBoss EAP 7.4에 MicroProfile OpenTracing 기능을 제공합니다. MicroProfile OpenTracing을 활성화한 상태에서 시스템 메모리 또는 성능 저하가 발생하는 경우 microprofile-opentracing-smallrye 하위 시스템을 비활성화할 수 있습니다.

관리 CLI에서 remove 작업을 사용하여 지정된 서버에 대해 MicroProfile OpenTracing 기능을 전역적으로 비활성화할 수 있습니다.

절차

  1. microprofile-opentracing-smallrye 하위 시스템을 제거합니다.

    /subsystem=microprofile-opentracing-smallrye:remove()
  2. 변경 사항을 적용하려면 서버를 다시 로드합니다.

    reload

3.1.3. microprofile-opentracing-smallrye 하위 시스템 추가

microprofile-opentracing-smallrye 하위 시스템을 서버 구성에 추가하여 활성화할 수 있습니다. 지정된 서버에 대해 MicroProfile OpenTracing 기능을 전역적으로 활성화하려면 관리 CLI에서 add 작업을 사용합니다.

절차

  1. 하위 시스템을 추가합니다.

    /subsystem=microprofile-opentracing-smallrye:add()
  2. 변경 사항을 적용하려면 서버를 다시 로드합니다.

    reload

3.1.4. Jaeger 설치

docker 를 사용하여 Jaeger를 설치합니다.

사전 요구 사항

  • Docker 가 설치되어 있습니다.

절차

  1. CLI에서 다음 명령을 실행하여 docker 를 사용하여 Jaeger를 설치합니다.

    $ docker run -d --name jaeger   -p 6831:6831/udp   -p 5778:5778   -p 14268:14268   -p 16686:16686   jaegertracing/all-in-one:1.16

3.2. MicroProfile 구성

3.2.1. ConfigSource 관리 리소스에 속성 추가

config-source 하위 시스템에 직접 속성을 관리 리소스로 저장할 수 있습니다.

절차

  • ConfigSource를 생성하고 속성을 추가합니다.

    /subsystem=microprofile-config-smallrye/config-source=props:add(properties={"name" = "jim"})

3.2.2. 디렉터리를 ConfigSources로 구성

속성이 디렉터리에 파일로 저장되면 file-name은 속성의 이름이고 파일 내용은 속성의 값입니다.

절차

  1. 파일을 저장하려는 디렉터리를 생성합니다.

    $ mkdir -p ~/config/prop-files/
  2. 디렉터리로 이동합니다.

    $ cd ~/config/prop-files/
  3. 속성 이름 값을 저장할 파일 이름을 만듭니다.

    $ touch name
  4. 속성 값을 파일에 추가합니다.

    $ echo "jim" > name
  5. 파일 이름이 특성이고 파일에서 속성 값을 포함하는 ConfigSource를 생성합니다.

    /subsystem=microprofile-config-smallrye/config-source=file-props:add(dir={path=~/config/prop-files})

    이렇게 하면 다음과 같은 XML 구성이 생성됩니다.

    <subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0">
        <config-source name="file-props">
            <dir path="/etc/config/prop-files"/>
        </config-source>
    </subsystem>

3.2.3. ConfigSource 클래스에서 ConfigSource 가져오기

사용자 지정 org.eclipse.microprofile.config.spi.ConfigSource 구현 클래스를 생성하고 구성하여 구성 값의 소스를 제공할 수 있습니다.

절차

  • 다음 관리 CLI 명령은 org.example이라는 JBoss 모듈에서 제공하는 org.example.MyConfigSource 라는 구현 클래스에 대한 Config Source를 생성합니다 .

    org.example 모듈에서 ConfigSource 를 사용하려면 path/to/ org/example /main/module.xml 파일에 <module name="org.eclipse.microprofile.config.api"/ > 종속성을 추가합니다.

    /subsystem=microprofile-config-smallrye/config-source=my-config-source:add(class={name=org.example.MyConfigSource, module=org.example})

    이 명령을 실행하면 microprofile-config-smallrye 하위 시스템에 대한 다음 XML 구성이 생성됩니다.

    <subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0">
        <config-source name="my-config-source">
            <class name="org.example.MyConfigSource" module="org.example"/>
        </config-source>
    </subsystem>

사용자 지정 org.eclipse.microprofile.config.spi.ConfigSource 구현 클래스에서 제공하는 속성은 모든 JBoss EAP 배포에서 사용할 수 있습니다.

3.2.4. ConfigSourceProvider 클래스에서 ConfigSource 구성 가져오기

여러 ConfigSource 인스턴스에 대한 구현을 등록하는 사용자 지정 org.eclipse.microprofile.config.spi.ConfigSourceProvider 구현 클래스를 생성하고 구성할 수 있습니다.

절차

  • config-source-provider 를 생성합니다.

    /subsystem=microprofile-config-smallrye/config-source-provider=my-config-source-provider:add(class={name=org.example.MyConfigSourceProvider, module=org.example})

    명령은 org.example이라는 JBoss 모듈에서 제공하는 org.example.MyConfigSourceProvider 라는 구현 클래스에 대해 config-source-provider 를 생성합니다 .

    org.example 모듈에서 config-source-provider 를 사용하려면 <module name="org.eclipse.microprofile.config.api"/> 종속성을 path/to/org/example/main/module.xml 파일에 추가합니다.

    이 명령을 실행하면 microprofile-config-smallrye 하위 시스템에 대한 다음 XML 구성이 생성됩니다.

    <subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0">
        <config-source-provider name="my-config-source-provider">
             <class name="org.example.MyConfigSourceProvider" module="org.example"/>
        </config-source-provider>
    </subsystem>

ConfigSourceProvider 구현에서 제공하는 속성은 모든 JBoss EAP 배포에서 사용할 수 있습니다.

추가 리소스

  • 글로벌 모듈을 JBoss EAP 서버에 추가하는 방법에 대한 자세한 내용은 JBoss EAP의 구성 가이드에서 글로벌 모듈 정의를 참조하십시오.

3.3. MicroProfile 오류 허용 오차 구성

3.3.1. MicroProfile Fault Tolerance 확장 추가

MicroProfile Fault Tolerance 확장 기능은 JBoss EAP XP의 일부로 제공되는 standalone-microprofile.xml 및 standalone-microprofile-ha.xml 구성에 포함되어 있습니다.

확장 기능은 표준 standalone.xml 구성에 포함되지 않습니다. 확장 기능을 사용하려면 수동으로 활성화해야 합니다.

사전 요구 사항

  • EAP XP 팩이 설치되어 있어야 합니다.

절차

  1. 다음 관리 CLI 명령을 사용하여 MicroProfile Fault Tolerance 확장을 추가합니다.

    /extension=org.wildfly.extension.microprofile.fault-tolerance-smallrye:add
  2. 다음 managenent 명령을 사용하여 microprofile-fault-tolerance-smallrye 하위 시스템을 활성화합니다.

    /subsystem=microprofile-fault-tolerance-smallrye:add
  3. 다음 관리 명령으로 서버를 다시 로드합니다.

    reload

3.4. MicroProfile 상태 구성

3.4.1. 관리 CLI를 사용하여 상태 검사

관리 CLI를 사용하여 시스템 상태를 확인할 수 있습니다.

절차

  • 상태를 검사합니다.

    /subsystem=microprofile-health-smallrye:check
    {
        "outcome" => "success",
        "result" => {
            "status" => "UP",
            "checks" => []
        }
    }

3.4.2. 관리 콘솔을 사용하여 상태 검사

관리 콘솔을 사용하여 시스템 상태를 확인할 수 있습니다.

검사 런타임 작업은 상태 점검 및 글로벌 결과를 부울 값으로 표시합니다.

절차

  1. Runtime(런타임 ) 탭으로 이동하여 서버를 선택합니다.
  2. Monitor 열에서 MicroProfile HealthView 를 클릭합니다.

3.4.3. HTTP 끝점을 사용하여 상태 검사

상태 점검은 JBoss EAP의 상태 컨텍스트에 자동으로 배포되므로 HTTP 엔드포인트를 사용하여 현재 상태를 얻을 수 있습니다.

관리 인터페이스에서 액세스할 수 있는 /health 엔드포인트의 기본 주소는 http://127.0.0.1:9990/health 입니다.

절차

  • HTTP 끝점을 사용하여 서버의 현재 상태를 얻으려면 다음 URL을 사용합니다.

    http://<host>:<port>/health

    이 컨텍스트에 액세스하면 서버가 정상인지를 나타내는 상태 점검이 JSON 형식으로 표시됩니다.

3.4.4. MicroProfile 상태에 대한 인증 활성화

액세스에 대한 인증이 필요하도록 상태 컨텍스트를 구성할 수 있습니다.

절차

  1. microprofile -health-smallrye 하위 시스템에서 security- enabled 특성을 true 로 설정합니다.

    /subsystem=microprofile-health-smallrye:write-attribute(name=security-enabled,value=true)
  2. 변경 사항을 적용하려면 서버를 다시 로드합니다.

    reload

/health 엔드포인트에 대한 후속 시도로 인해 인증 프롬프트가 트리거됩니다.

3.4.5. 서버 상태 및 준비 상태를 결정하는 준비 상태 프로브

JBoss EAP XP 3.0.0은 세 가지 준비 프로브를 지원하여 서버 상태 및 준비 상태를 결정합니다.

  • server-status - server-state가 실행 중일 때 UP 을 반환합니다.
  • boot-errors - 프로브에서 부팅 오류를 탐지하지 않으면 UP 을 반환합니다.
  • deployment-status - 모든 배포의 상태가 OK 이면 UP 을 반환합니다.

이러한 준비 상태 프로브는 기본적으로 활성화되어 있습니다. MicroProfile Config 속성 mp.health.disable-default-procedures 를 사용하여 프로브를 비활성화할 수 있습니다.

다음 예제에서는 검사 작업과 함께 세 개의 프로브를 사용하는 방법을 보여줍니다.

[standalone@localhost:9990 /] /subsystem=microprofile-health-smallrye:check
{
    "checks": [
        {
            "name": "empty-readiness-checks",
            "status": "UP"
        },
        {
            "name": "empty-liveness-checks",
            "status": "UP"
        },
        {
            "data": {
                "value": "running"
            },
            "name": "server-state",
            "status": "UP"
        },
        {
            "name": "deployments-status",
            "status": "UP"
        },
        {
            "name": "boot-errors",
            "status": "UP"
        }
    ],
    "status": "UP"
}

3.4.6. 프로브가 정의되지 않은 경우 전역 상태

:empty-readiness-checks-status:empty-liveness-checks-status 관리 특성은 준비 상태 또는 활성 프로브가 정의되지 않은 경우 글로벌 상태를 지정합니다.

이러한 속성을 사용하면 애플리케이션에서 애플리케이션이 준비되었는지 확인할 때까지 'DOWN'을 보고할 수 있습니다. 기본적으로 애플리케이션은 'UP'을 보고합니다.

  • :empty-readiness-checks-status 특성은 준비 프로브가 정의되지 않은 경우 준비 프로브의 글로벌 상태를 지정합니다.

    /subsystem=microprofile-health-smallrye:read-attribute(name=empty-readiness-checks-status)
    {
        "outcome" => "success",
        "result" => expression "${env.MP_HEALTH_EMPTY_READINESS_CHECKS_STATUS:UP}"
    }
  • :empty-liveness-checks-status 특성은 활성 프로브가 정의되지 않은 경우 활성 프로브에 대한 글로벌 상태를 지정합니다.

    /subsystem=microprofile-health-smallrye:read-attribute(name=empty-liveness-checks-status)
    {
        "outcome" => "success",
        "result" => expression "${env.MP_HEALTH_EMPTY_LIVENESS_CHECKS_STATUS:UP}"
    }

    준비활성 프로브를 모두 확인하는 /health HTTP 끝점 및 :check 작업도 이러한 특성을 고려합니다.

다음 예와 같이 이러한 속성을 수정할 수도 있습니다.

/subsystem=microprofile-health-smallrye:write-attribute(name=empty-readiness-checks-status,value=DOWN)
{
    "outcome" => "success",
    "response-headers" => {
        "operation-requires-reload" => true,
        "process-state" => "reload-required"
    }
}

3.5. MicroProfile JWT 구성

3.5.1. microprofile-jwt-smallrye 하위 시스템 활성화

MicroProfile JWT 통합은 microprofile-jwt-smallrye 하위 시스템에서 제공하며 기본 구성에 포함됩니다. 하위 시스템이 기본 구성에 없으면 다음과 같이 추가할 수 있습니다.

사전 요구 사항

  • EAP XP가 설치되어 있어야 합니다.

절차

  1. JBoss EAP에서 MicroProfile JWT smallrye 확장을 활성화합니다.

    /extension=org.wildfly.extension.microprofile.jwt-smallrye:add
  2. microprofile-jwt-smallrye 하위 시스템을 활성화합니다.

    /subsystem=microprofile-jwt-smallrye:add
  3. 서버를 다시 로드합니다.

    reload

microprofile-jwt-smallrye 하위 시스템이 활성화됩니다.

3.6. MicroProfile 지표 관리

3.6.1. 관리 인터페이스에서 사용할 수 있는 지표

JBoss EAP 하위 시스템 지표는 Prometheus 형식으로 노출됩니다.

지표는 다음 컨텍스트와 함께 JBoss EAP 관리 인터페이스에서 자동으로 사용할 수 있습니다.

  • /metrics/ - MicroProfile 3.0 사양에 지정된 메트릭이 포함되어 있습니다.
  • /metrics/vendor - 메모리 풀과 같은 벤더별 지표를 포함합니다.
  • /metrics/application - 배포된 애플리케이션 및 MicroProfile 지표 API를 사용하는 하위 시스템의 지표를 포함합니다.

지표 이름은 하위 시스템 및 속성 이름을 기반으로 합니다. 예를 들어 subsystem undertow 는 애플리케이션 배포의 모든 서블릿에 대해 지표 특성 request-count 를 노출합니다. 이 지표의 이름은 jboss_undertow_request_count 입니다. 접두사 jboss 는 JBoss EAP를 지표의 소스로 식별합니다.

3.6.2. HTTP 끝점을 사용하여 지표 검사

HTTP 엔드포인트를 사용하여 JBoss EAP 관리 인터페이스에서 사용 가능한 지표를 검사합니다.

절차

  • curl 명령을 사용합니다.

    $ curl -v http://localhost:9990/metrics | grep -i type

3.6.3. MicroProfile 지표 HTTP 엔드포인트 인증 활성화

사용자가 컨텍스트에 액세스할 수 있도록 지표 컨텍스트를 구성합니다. 이 구성은 지표 컨텍스트의 모든 하위 컨텍스트로 확장됩니다.

절차

  1. microprofile -metrics-smallrye 하위 시스템에서 security- enabled 특성을 true 로 설정합니다.

    /subsystem=microprofile-metrics-smallrye:write-attribute(name=security-enabled,value=true)
  2. 변경 사항을 적용하려면 서버를 다시 로드합니다.

    reload

지표 엔드포인트에 대한 후속 시도는 인증 프롬프트가 됩니다.

3.6.4. 웹 서비스의 요청 수 얻기

요청 수 지표를 노출하는 웹 서비스의 요청 수를 가져옵니다.

다음 절차에서는 요청 수를 얻기 위해 웹 서비스로 helloworld-rs 빠른 시작을 사용합니다. 빠른 시작은 에서 빠른 시작 다운로드 jboss-eap-quickstarts 에서 사용할 수 있습니다.

사전 명령

  • 웹 서비스는 요청 수를 노출합니다.

절차

  1. undertow 하위 시스템에 대한 통계를 활성화합니다.

    • 통계가 활성화된 독립 실행형 서버를 시작합니다.

      $ ./standalone.sh -Dwildfly.statistics-enabled=true
    • 이미 실행 중인 서버의 경우 undertow 하위 시스템에 대한 통계를 활성화합니다.

      /subsystem=undertow:write-attribute(name=statistics-enabled,value=true)
  2. helloworld-rs 빠른 시작을 배포합니다.

    • 빠른 시작의 루트 디렉터리에서 Maven을 사용하여 웹 애플리케이션을 배포합니다.

      $ mvn clean install wildfly:deploy
  3. curl 명령을 사용하여 CLI에서 HTTP 끝점을 쿼리하고 request_count 를 필터링합니다.

    $ curl -v http://localhost:9990/metrics |  grep request_count

    예상 출력 :

    jboss_undertow_request_count_total{server="default-server",http_listener="default",} 0.0

    반환된 속성 값은 0.0 입니다.

  4. 웹 브라우저에서 http://localhost:8080/helloworld-rs/ 에 있는 빠른 시작에 액세스하고 링크를 클릭합니다.
  5. CLI에서 HTTP 끝점을 다시 쿼리합니다.

    $ curl -v http://localhost:9990/metrics |  grep request_count

    예상 출력 :

    jboss_undertow_request_count_total{server="default-server",http_listener="default",} 1.0

    값이 1.0 으로 업데이트됩니다.

    마지막 두 단계를 반복하여 요청 수가 업데이트되었는지 확인합니다.

3.7. MicroProfile OpenAPI 관리

3.7.1. MicroProfile OpenAPI 활성화

microprofile-openapi-smallrye 하위 시스템은 standalone-microprofile.xml 구성에서 제공됩니다. 그러나 JBoss EAP XP는 기본적으로 standalone.xml 을 사용합니다. 이를 사용하려면 standalone.xml 에 하위 시스템을 포함해야 합니다.

또는 MicroProfile 하위 시스템 및 확장 프로그램을 사용하여 독립 실행형 구성 업데이트 절차를 따라 standalone.xml 구성 파일을 업데이트할 수 있습니다.

절차

  1. JBoss EAP에서 MicroProfile OpenAPI smallrye 확장을 활성화합니다.

    /extension=org.wildfly.extension.microprofile.openapi-smallrye:add()
  2. 다음 관리 명령을 사용하여 microprofile-openapi-smallrye 하위 시스템을 활성화합니다.

    /subsystem=microprofile-openapi-smallrye:add()
  3. 서버를 다시 로드합니다.

    reload

microprofile-openapi-smallrye 하위 시스템이 활성화됩니다.

3.7.2. HTTP 헤더 수락을 사용하여 MicroProfile OpenAPI 문서 요청

Accept HTTP 헤더를 사용한 배포에서 JSON 형식으로 MicroProfile OpenAPI 문서를 요청합니다.

기본적으로 OpenAPI 엔드포인트는 YAML 문서를 반환합니다.

사전 요구 사항

  • 쿼리되는 배포는 MicroProfile OpenAPI 문서를 반환하도록 구성됩니다.

절차

  • 다음 curl 명령을 실행하여 배포의 /openapi 엔드포인트를 쿼리합니다.

    $ curl -v -H'Accept: application/json' http://localhost:8080/openapi
    < HTTP/1.1 200 OK
    ...
    {"openapi": "3.0.1" ... }

    http://localhost:8080 을 배포의 URL 및 포트로 바꿉니다.

    Accept 헤더는 application/json 문자열을 사용하여 JSON 문서를 반환함을 나타냅니다.

3.7.3. HTTP 매개변수를 사용하여 MicroProfile OpenAPI 문서 요청

HTTP 요청에 쿼리 매개 변수를 사용한 배포에서 JSON 형식으로 MicroProfile OpenAPI 문서를 요청합니다.

기본적으로 OpenAPI 엔드포인트는 YAML 문서를 반환합니다.

사전 요구 사항

  • 쿼리되는 배포는 MicroProfile OpenAPI 문서를 반환하도록 구성됩니다.

절차

  • 다음 curl 명령을 실행하여 배포의 /openapi 엔드포인트를 쿼리합니다.

    $ curl -v http://localhost:8080/openapi?format=JSON
    < HTTP/1.1 200 OK
    ...

    http://localhost:8080 을 배포의 URL 및 포트로 바꿉니다.

    HTTP 매개 변수 format=JSON 은 JSON 문서가 반환됨을 나타냅니다.

3.7.4. 정적 OpenAPI 문서를 제공하도록 JBoss EAP 구성

호스트의 REST 서비스를 설명하는 정적 OpenAPI 문서를 제공하도록 JBoss EAP를 구성합니다.

정적 OpenAPI 문서를 제공하도록 JBoss EAP를 구성하면 Jakarta RESTful Web Services 및 MicroProfile OpenAPI 주석보다 먼저 정적 OpenAPI 문서가 처리됩니다.

프로덕션 환경에서 정적 문서를 제공할 때 주석 처리를 비활성화합니다. 주석 처리를 비활성화하면 변경할 수 없으며 버전이 지정된 API 계약을 클라이언트에 사용할 수 있습니다.

절차

  1. 애플리케이션 소스 트리에 디렉터리를 생성합니다.

    $ mkdir APPLICATION_ROOT/src/main/webapp/META-INF

    APPLICATION_ROOT 는 애플리케이션에 대한 pom.xml 구성 파일이 포함된 디렉터리입니다.

  2. OpenAPI 엔드포인트를 쿼리하여 출력을 파일로 리디렉션합니다.

    $ curl http://localhost:8080/openapi?format=JSON > src/main/webapp/META-INF/openapi.json

    기본적으로 엔드포인트는 YAML 문서를 제공합니다. format=JSON 은 JSON 문서가 반환되도록 지정합니다.

  3. OpenAPI 문서 모델을 처리할 때 주석 스캔을 건너뛰도록 애플리케이션을 구성합니다.

    $ echo "mp.openapi.scan.disable=true" > APPLICATION_ROOT/src/main/webapp/META-INF/microprofile-config.properties
  4. 애플리케이션을 다시 빌드합니다.

    $ mvn clean install
  5. 다음 관리 CLI 명령을 사용하여 애플리케이션을 다시 배포합니다.

    1. 애플리케이션 배포를 취소합니다.

      undeploy microprofile-openapi.war
    2. 애플리케이션을 배포합니다.

      deploy APPLICATION_ROOT/target/microprofile-openapi.war

JBoss EAP는 이제 OpenAPI 엔드포인트에서 정적 OpenAPI 문서를 제공합니다.

3.7.5. microprofile-openapi-smallrye 비활성화

관리 CLI를 사용하여 JBoss EAP XP에서 microprofile-openapi-smallrye 하위 시스템을 비활성화할 수 있습니다.

절차

  • microprofile-openapi-smallrye 하위 시스템을 비활성화합니다.

    /subsystem=microprofile-openapi-smallrye:remove()

3.8. 독립 실행형 서버 구성

3.8.1. 독립 실행형 서버 구성 파일

JBoss EAP XP에는 추가 독립 실행형 서버 구성 파일, standalone-microprofile.xml 및 standalone -microprofile-ha.xml 이 포함되어 있습니다.

JBoss EAP에 포함된 표준 구성 파일은 변경되지 않고 유지됩니다. JBoss EAP XP 3.0.0은 domain.xml 파일 또는 도메인 모드를 지원하지 않습니다.

표 3.1. JBoss EAP XP에서 사용할 수 있는 독립 실행형 구성 파일

설정 파일목적포함된 기능제외된 기능

standalone.xml

독립 실행형 서버를 시작할 때 사용되는 기본 구성입니다.

하위 시스템, 네트워킹, 배포, 소켓 바인딩 및 기타 구성 가능한 세부 정보를 포함하여 서버에 대한 정보를 포함합니다.

메시징 또는 고가용성에 필요한 하위 시스템을 제외합니다.

standalone-microprofile.xml

이 구성 파일은 MicroProfile을 사용하는 애플리케이션을 지원합니다.

하위 시스템, 네트워킹, 배포, 소켓 바인딩 및 기타 구성 가능한 세부 정보를 포함하여 서버에 대한 정보를 포함합니다.

다음 기능을 제외합니다.

  • Jakarta Enterprise Beans
  • 메시징
  • 자카르타 EE 배치
  • Jakarta Server Faces
  • 자카르타 엔터프라이즈 빈 타이머

standalone-ha.xml

 

기본 하위 시스템을 포함하고 고가용성을 위해 modclusterjgroups 하위 시스템을 추가합니다.

메시징에 필요한 하위 시스템을 제외합니다.

standalone-microprofile-ha.xml

이 독립 실행형 파일은 MicroProfile을 사용하는 애플리케이션을 지원합니다.

기본 하위 시스템 외에도 고가용성을 위한 modclusterjgroups 하위 시스템을 포함합니다.

메시징에 필요한 하위 시스템을 제외합니다.

standalone-full.xml

 

기본 하위 시스템 외에도 messaging-activemqiiop-openjdk 하위 시스템을 포함합니다.

 

standalone-full-ha.xml

가능한 모든 하위 시스템에 대한 지원.

기본 하위 시스템 외에도 메시징 및 고가용성에 대한 하위 시스템을 포함합니다.

 

standalone-load-balancer.xml

기본 제공 mod_cluster 프론트엔드 로드 밸런서 장치를 사용하여 다른 JBoss EAP 인스턴스의 부하를 분산하는 데 필요한 최소 하위 시스템에 대한 지원.

  

기본적으로 JBoss EAP를 독립 실행형 서버로 시작하면 standalone.xml 파일을 사용합니다. 독립 실행형 MicroProfile 구성으로 JBoss EAP를 시작하려면 -c 인수를 사용합니다. 예를 들면 다음과 같습니다.

$ EAP_HOME/bin/standalone.sh -c=standalone-microprofile.xml

3.8.2. MicroProfile 하위 시스템 및 확장 기능을 사용하여 독립 실행형 구성 업데이트

docs/examples/enable-microprofile.cli 스크립트를 사용하여 MicroProfile 하위 시스템 및 확장 프로그램을 사용하여 표준 독립 실행형 서버 구성 파일을 업데이트할 수 있습니다. enable-microprofile.cli 스크립트는 사용자 지정 구성이 아닌 표준 독립 실행형 서버 구성 파일을 업데이트하기 위한 예제 스크립트입니다.

enable-microprofile.cli 스크립트는 기존 독립 실행형 서버 구성을 수정하고 독립 실행형 구성 파일에 없는 경우 다음 MicroProfile 하위 시스템 및 확장 프로그램을 추가합니다.

  • microprofile-openapi-smallrye
  • microprofile-jwt-smallrye
  • microprofile-fault-tolerance-smallrye

enable-microprofile.cli 스크립트는 수정 사항에 대한 간략한 설명을 출력합니다. 구성은 elytron 하위 시스템을 사용하여 보호됩니다. 보안 하위 시스템은 구성에서 제거됩니다.

사전 요구 사항

  • JBoss EAP XP가 설치되어 있어야 합니다.

절차

  1. 다음 CLI 스크립트를 실행하여 기본 standalone.xml 서버 구성 파일을 업데이트합니다.

    $ EAP_HOME/bin/jboss-cli.sh --file=docs/examples/enable-microprofile.cli
  2. 다음 명령을 사용하여 기본 standalone.xml 서버 구성 파일 이외의 독립 실행형 서버 구성을 선택합니다.

    $ EAP_HOME/bin/jboss-cli.sh --file=docs/examples/enable-microprofile.cli -Dconfig=<standalone-full.xml|standalone-ha.xml|standalone-full-ha.xml>
  3. 이제 지정된 구성 파일에 MicroProfile 하위 시스템 및 확장 기능이 포함됩니다.

4장. JBoss EAP용 MicroProfile 애플리케이션 개발

4.1. Maven 및 JBoss EAP MicroProfile Maven 리포지토리

4.1.1. JBoss EAP MicroProfile Maven 리포지토리 패치를 아카이브 파일로 다운로드

JBoss EAP용으로 MicroProfile 확장 팩이 릴리스될 때마다 JBoss EAP MicroProfile Maven 리포지토리에 해당 패치가 제공됩니다. 이 패치는 기존 Red Hat JBoss Enterprise Application Platform 7.4.0.GA Maven 리포지토리로 추출된 증분 아카이브 파일로 제공됩니다. 증분 아카이브 파일은 기존 파일을 덮어쓰거나 제거하지 않으므로 롤백 요구 사항이 없습니다.

절차

  1. 브라우저를 열고 Red Hat 고객 포털에 로그인합니다.
  2. 페이지 상단의 메뉴에서 Downloads (다운로드)를 선택합니다.
  3. 목록에서 Red Hat JBoss Enterprise Application Platform 항목을 찾아 선택합니다.
  4. 제품 드롭다운 목록에서 JBoss EAP XP 를 선택합니다.
  5. Version (버전) 드롭다운 목록에서 2.0.0 을 선택합니다.
  6. Releases (릴리스) 탭을 클릭합니다.
  7. 목록에서 JBoss EAP XP 3.0.0 증분 Maven 리포지토리 를 찾은 다음 다운로드를 클릭합니다.
  8. 아카이브 파일을 로컬 디렉터리에 저장합니다.

추가 리소스

  • JBoss EAP Maven 리포지토리에 대한 자세한 내용은 JBoss EAP 개발 가이드 의 Maven 리포지토리 정보를 참조하십시오.

4.1.2. 로컬 시스템에 JBoss EAP MicroProfile Maven 리포지토리 패치 적용

JBoss EAP MicroProfile Maven 리포지토리 패치를 로컬 파일 시스템에 설치할 수 있습니다.

증분식 아카이브 파일의 형태로 패치를 리포지토리에 적용하면 이 리포지토리에 새 파일이 추가됩니다. 증분 아카이브 파일은 리포지토리의 기존 파일을 덮어쓰거나 제거하지 않으므로 롤백 요구 사항이 없습니다.

사전 요구 사항

  • 로컬 시스템에 Red Hat JBoss Enterprise Application Platform 7.4.0.GA Maven 리포지토리를 다운로드 및 설치했습니다.

    • 로컬 시스템에 이 부 버전의 Red Hat JBoss Enterprise Application Platform 7.4 Maven 리포지토리가 설치되어 있는지 확인합니다.
  • 로컬 시스템에서 JBoss EAP XP 2.0.0 증분 Maven 리포지토리를 다운로드했습니다.

절차

  1. Red Hat JBoss Enterprise Application Platform 7.4.0.GA Maven 리포지토리의 경로를 찾습니다. 예를 들면 /path/to/repo/jboss-eap-7.3.0.GA-maven-repository/maven-repository/ 입니다.
  2. 다운로드한 JBoss EAP XP 2.0.0 증분 Maven 리포지토리를 Red Hat JBoss Enterprise Application Platform 7.4.0.GA Maven 리포지토리의 디렉터리에 직접 추출합니다. 예를 들어 터미널을 열고 다음 명령을 실행하여 Red Hat JBoss Enterprise Application Platform 7.4.0.GA Maven 리포지토리 경로의 값을 바꿉니다.

    $ unzip -o jboss-eap-xp-3.0.0-incremental-maven-repository.zip -d EAP_MAVEN_REPOSITORY_PATH
참고

EAP_MAVEN_REPOSITORY_PATHjboss-eap-7.3.0.GA-maven-repository 를 가리킵니다. 예를 들어 이 절차에서는 경로 /path/to/repo/jboss-eap-7.3.0.GA-maven-repository/ 의 사용을 보여줍니다.

JBoss EAP XP 증분 Maven 리포지토리를 Red Hat JBoss Enterprise Application Platform 7.4.0.GA Maven 리포지토리로 추출한 후 리포지토리 이름은 JBoss EAP MicroProfile Maven 리포지토리가 됩니다.

4.1.3. 지원되는 JBoss EAP MicroProfile BOM

JBoss EAP XP 3.0.0에는 JBoss EAP MicroProfile BOM이 포함되어 있습니다. 이 BOM의 이름은 jboss-eap-xp-microprofile 이며 사용 사례는 JBoss EAP MicroProfile API를 지원합니다.

표 4.1. JBoss EAP MicroProfile BOM

BOM Artifact ID사용 사례

jboss-eap-xp-microprofile

groupIdorg.jboss.bom 인 이 BOM은 많은 JBoss EAP MicroProfile을 패키지로 지원하는 microprofile-openapi-api 및 microprofile-config-api 등의 API 종속성을 지원합니다. jboss-eap-xp-microprofile BOM이 종속성에 대해 이 값을 지정하므로 이 BOM을 사용하는 경우 지원되는 API 종속성에 대한 버전을 지정할 필요가 없습니다.

4.1.4. JBoss EAP MicroProfile Maven 리포지토리 사용

Red Hat JBoss Enterprise Application Platform 7.4.0.GA Maven 리포지토리를 설치하고 JBoss EAP XP 증분 Maven 리포지토리를 적용한 후 jboss-eap-xp-microprofile BOM에 액세스할 수 있습니다. 그러면 리포지토리 이름이 JBoss EAP MicroProfile Maven 리포지토리가 됩니다. BOM은 JBoss EAP XP 증분 Maven 리포지토리 내에 제공됩니다.

JBoss EAP MicroProfile Maven 리포지토리를 사용하도록 다음 중 하나를 구성해야 합니다.

  • Maven 글로벌 또는 사용자 설정
  • 프로젝트의 POM 파일

공유 서버의 리포지토리 관리자 또는 리포지토리와 함께 사용되는 Maven 설정은 프로젝트의 제어 및 관리 용이성을 제공합니다.

대체 미러를 사용하여 프로젝트 파일을 변경하지 않고 특정 저장소의 모든 조회 요청을 리포지토리 관리자로 리디렉션할 수 있습니다.

주의

POM 파일을 수정하여 JBoss EAP MicroProfile Maven 리포지토리를 구성하면 구성된 프로젝트의 전역 및 사용자 Maven 설정이 재정의됩니다.

사전 요구 사항

  • 로컬 시스템에 Red Hat JBoss Enterprise Application Platform 7.4 Maven 리포지토리를 설치했으며 JBoss EAP XP 증분 Maven 리포지토리를 적용했습니다.

절차

  1. 구성 방법을 선택하고 JBoss EAP MicroProfile Maven 리포지토리를 구성합니다.
  2. JBoss EAP MicroProfile Maven 리포지토리를 구성한 후 jboss-eap-xp-microprofile BOM을 프로젝트 POM 파일에 추가합니다. 다음 예제에서는 pom.xml 파일의 <dependencyManagement> 섹션에 BOM을 구성하는 방법을 보여줍니다.

    <dependencyManagement>
      <dependencies>
        ...
        <dependency>
          <groupId>org.jboss.bom</groupId>
          <artifactId>jboss-eap-xp-microprofile</artifactId>
          <version>3.0.0.GA</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
        ...
      </dependencies>
    </dependencyManagement>
    참고

    pom.xml 파일에서 type 요소의 값을 지정하지 않으면 Maven은 요소의 jar 값을 지정합니다.

추가 리소스

  • JBoss EAP Maven 리포지토리를 구성하는 메서드 선택에 대한 자세한 내용은 JBoss EAP 개발 가이드에서 Maven 리포지토리 사용을 참조하십시오.
  • 종속성 관리에 대한 자세한 내용은 종속성 관리를 참조하십시오 .

4.2. MicroProfile 구성 개발

4.2.1. MicroProfile 구성용 Maven 프로젝트 생성

MicroProfile Config 애플리케이션을 생성하는 데 필요한 종속성과 디렉터리 구조를 사용하여 Maven 프로젝트를 생성합니다.

사전 요구 사항

  • Maven이 설치되어 있어야 합니다.

절차

  1. Maven 프로젝트를 설정합니다.

    $ mvn archetype:generate \
        -DgroupId=com.example \
        -DartifactId=microprofile-config \
        -DinteractiveMode=false \
        -DarchetypeGroupId=org.apache.maven.archetypes \
        -DarchetypeArtifactId=maven-archetype-webapp
    cd microprofile-config

    그러면 프로젝트 및 pom.xml 구성 파일에 대한 디렉터리 구조가 생성됩니다.

  2. jboss-eap-xp-microprofile BOM에서 POM 파일이 MicroProfile 구성 아티팩트 및 MicroProfile REST 클라이언트 아티팩트의 버전을 자동으로 관리하도록 하려면 프로젝트 POM 파일의 <dependencyManagement> 섹션으로 BOM을 가져옵니다.

    <dependencyManagement>
      <dependencies>
        <!-- importing the microprofile BOM adds MicroProfile specs -->
        <dependency>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-eap-xp-microprofile</artifactId>
            <version>3.0.0.GA</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
  3. MicroProfile 구성 아티팩트 및 MicroProfile REST 클라이언트 아티팩트 및 BOM에서 관리하는 기타 종속 항목을 프로젝트 POM 파일의 <dependency> 섹션에 추가합니다. 다음 예제에서는 MicroProfile Config 및 MicroProfile REST 클라이언트 종속성을 파일에 추가하는 방법을 보여줍니다.

    <!-- Add the MicroProfile REST Client API. Set provided for the <scope> tag, as the API is included in the server. -->
    <dependency>
      <groupId>org.eclipse.microprofile.rest.client</groupId>
      <artifactId>microprofile-rest-client-api</artifactId>
      <scope>provided</scope>
    </dependency>
    <!-- Add the MicroProfile Config API. Set provided for the <scope> tag, as the API is included in the server. -->
    <dependency>
      <groupId>org.eclipse.microprofile.config</groupId>
      <artifactId>microprofile-config-api</artifactId>
      <scope>provided</scope>
    </dependency>
    <!-- Add the {JAX-RS} API. Set provided for the <scope> tag, as the API is included in the server. -->
    <dependency>
      <groupId>org.jboss.spec.javax.ws.rs</groupId>
      <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
      <scope>provided</scope>
    </dependency>
    <!-- Add the CDI API. Set provided for the <scope> tag, as the API is included in the server. -->
    <dependency>
      <groupId>jakarta.enterprise</groupId>
      <artifactId>jakarta.enterprise.cdi-api</artifactId>
      <scope>provided</scope>
    </dependency>

4.2.2. 애플리케이션에서 MicroProfile Config 속성 사용

구성된 ConfigSource 를 사용하는 애플리케이션을 생성합니다.

사전 요구 사항

  • JBoss EAP에서 MicroProfile Config가 활성화됩니다.
  • 최신 POM이 설치되어 있습니다.
  • Maven 프로젝트는 MicroProfile Config 애플리케이션을 생성하도록 구성됩니다.

절차

  1. 클래스 파일을 저장할 디렉터리를 생성합니다.

    $ mkdir -p APPLICATION_ROOT/src/main/java/com/example/microprofile/config/

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

  2. 새 디렉터리로 이동합니다.

    $ cd APPLICATION_ROOT/src/main/java/com/example/microprofile/config/

    이 디렉터리에 설명된 모든 클래스 파일을 생성합니다.

  3. 다음 콘텐츠를 사용하여 HelloApplication.java 라는 클래스 파일을 만듭니다.

    package com.example.microprofile.config;
    
    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;
    
    @ApplicationPath("/")
    public class HelloApplication extends Application {
    
    }

    이 클래스는 애플리케이션을 Jakarta RESTful Web Services 애플리케이션으로 정의합니다.

  4. 다음 콘텐츠를 사용하여 HelloService.java 라는 클래스 파일을 만듭니다.

    package com.example.microprofile.config;
    
    public class HelloService {
    	String createHelloMessage(String name){
            return "Hello " + name;
        }
    }
  5. 다음 콘텐츠를 사용하여 HelloWorld.java 라는 클래스 파일을 만듭니다.

    package com.example.microprofile.config;
    
    import javax.inject.Inject;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import org.eclipse.microprofile.config.inject.ConfigProperty;
    
    @Path("/config")
    public class HelloWorld {
    
        @Inject
        @ConfigProperty(name="name", defaultValue="jim") 1
        String name;
    
       	@Inject
       	HelloService helloService;
    
       	@GET
       	@Path("/json")
       	@Produces({ "application/json" })
       	public String getHelloWorldJSON() {
            String message = helloService.createHelloMessage(name);
           	return "{\"result\":\"" + message + "\"}";
    	}
    }
    1
    MicroProfile Config 속성은 주석 @ConfigProperty(name="name", defaultValue="jim") 를 사용하여 클래스에 주입됩니다. ConfigSource 가 구성되지 않은 경우 값 jim 이 반환됩니다.
  6. src/main/webapp/WEB-INF/ 디렉터리에 beans.xml 이라는 빈 파일을 생성합니다.

    $ touch APPLICATION_ROOT/src/main/webapp/WEB-INF/beans.xml

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

  7. 애플리케이션의 루트 디렉터리로 이동합니다.

    $ cd APPLICATION_ROOT

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

  8. 프로젝트를 빌드합니다.

    $ mvn clean install wildfly:deploy
  9. 출력을 테스트합니다.

    $ curl http://localhost:8080/microprofile-config/config/json

    예상 출력은 다음과 같습니다.

    {"result":"Hello jim"}

4.3. MicroProfile 오류 허용 오차 애플리케이션 개발

4.3.1. MicroProfile Fault Tolerance 확장 추가

MicroProfile Fault Tolerance 확장 기능은 JBoss EAP XP의 일부로 제공되는 standalone-microprofile.xml 및 standalone-microprofile-ha.xml 구성에 포함되어 있습니다.

확장 기능은 표준 standalone.xml 구성에 포함되지 않습니다. 확장 기능을 사용하려면 수동으로 활성화해야 합니다.

사전 요구 사항

  • EAP XP 팩이 설치되어 있어야 합니다.

절차

  1. 다음 관리 CLI 명령을 사용하여 MicroProfile Fault Tolerance 확장을 추가합니다.

    /extension=org.wildfly.extension.microprofile.fault-tolerance-smallrye:add
  2. 다음 managenent 명령을 사용하여 microprofile-fault-tolerance-smallrye 하위 시스템을 활성화합니다.

    /subsystem=microprofile-fault-tolerance-smallrye:add
  3. 다음 관리 명령으로 서버를 다시 로드합니다.

    reload

4.3.2. MicroProfile Fault 허용 오차에 대한 Maven 프로젝트 구성

필요한 종속성과 MicroProfile Fault Tolerance 애플리케이션을 생성하는 디렉터리 구조를 사용하여 Maven 프로젝트를 생성합니다.

사전 요구 사항

  • Maven이 설치되어 있어야 합니다.

절차

  1. Maven 프로젝트를 설정합니다.

    mvn archetype:generate \
        -DgroupId=com.example.microprofile.faulttolerance \
        -DartifactId=microprofile-fault-tolerance \
        -DarchetypeGroupId=org.apache.maven.archetypes \
        -DarchetypeArtifactId=maven-archetype-webapp \
        -DinteractiveMode=false
    cd microprofile-fault-tolerance

    명령은 프로젝트 및 pom.xml 구성 파일의 디렉터리 구조를 생성합니다.

  2. POM 파일이 jboss-eap-xp-microprofile BOM에서 MicroProfile Fault Tolerance 아티팩트의 버전을 자동으로 관리하도록 하려면 프로젝트 POM 파일의 <dependencyManagement> 섹션으로 BOM을 가져옵니다.

    <dependencyManagement>
      <dependencies>
        <!-- importing the microprofile BOM adds MicroProfile specs -->
        <dependency>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-eap-xp-microprofile</artifactId>
            <version>${version.microprofile.bom}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>

    ${version.microprofile.bom}을 설치된 BOM 버전으로 교체합니다.

  3. BOM에서 관리하는 MicroProfile Fault Tolerance 아티팩트를 POM 프로젝트의 <dependency> 섹션에 추가합니다. 다음 예제에서는 파일에 MicroProfile Fault Tolerance 종속성을 추가하는 방법을 보여줍니다.

    <!-- Add the MicroProfile Fault Tolerance API. Set provided for the <scope> tag, as the API is included in the server. -->
    <dependency>
      <groupId>org.eclipse.microprofile.fault.tolerance</groupId>
      <artifactId>microprofile-fault-tolerance-api</artifactId>
      <scope>provided</scope>
    </dependency>

4.3.3. 내결함성 애플리케이션 생성

내결함성을 위해 재시도, 시간 초과 및 대체 패턴을 구현하는 내결함성 애플리케이션을 만듭니다.

사전 요구 사항

  • Maven 종속성이 구성되었습니다.

절차

  1. 클래스 파일을 저장할 디렉터리를 생성합니다.

    $ mkdir -p APPLICATION_ROOT/src/main/java/com/example/microprofile/faulttolerance

    APPLICATION_ROOT 는 애플리케이션에 대한 pom.xml 구성 파일이 포함된 디렉터리입니다.

  2. 새 디렉터리로 이동합니다.

    $ cd APPLICATION_ROOT/src/main/java/com/example/microprofile/faulttolerance

    다음 단계에 대해 새 디렉터리의 모든 클래스 파일을 만듭니다.

  3. 다음 콘텐츠를 사용하여 Coffee.java 로 커피 샘플을 나타내는 간단한 엔티티를 만듭니다.

    package com.example.microprofile.faulttolerance;
    
    public class Coffee {
    
        public Integer id;
        public String name;
        public String countryOfOrigin;
        public Integer price;
    
        public Coffee() {
        }
    
        public Coffee(Integer id, String name, String countryOfOrigin, Integer price) {
            this.id = id;
            this.name = name;
            this.countryOfOrigin = countryOfOrigin;
            this.price = price;
        }
    }
  4. 다음 콘텐츠를 사용하여 class 파일 CoffeeApplication.java 를 생성합니다.

    package com.example.microprofile.faulttolerance;
    
    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;
    
    @ApplicationPath("/")
    public class CoffeeApplication extends Application {
    }
  5. 다음 콘텐츠를 사용하여 Jakarta 컨텍스트 및 종속성 주입 빈을 CoffeeRepositoryService.java 로 생성합니다.

    package com.example.microprofile.faulttolerance;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    import javax.enterprise.context.ApplicationScoped;
    
    @ApplicationScoped
    public class CoffeeRepositoryService {
    
        private Map<Integer, Coffee> coffeeList = new HashMap<>();
    
        public CoffeeRepositoryService() {
            coffeeList.put(1, new Coffee(1, "Fernandez Espresso", "Colombia", 23));
            coffeeList.put(2, new Coffee(2, "La Scala Whole Beans", "Bolivia", 18));
            coffeeList.put(3, new Coffee(3, "Dak Lak Filter", "Vietnam", 25));
        }
    
        public List<Coffee> getAllCoffees() {
            return new ArrayList<>(coffeeList.values());
        }
    
        public Coffee getCoffeeById(Integer id) {
            return coffeeList.get(id);
        }
    
        public List<Coffee> getRecommendations(Integer id) {
            if (id == null) {
                return Collections.emptyList();
            }
            return coffeeList.values().stream()
                    .filter(coffee -> !id.equals(coffee.id))
                    .limit(2)
                    .collect(Collectors.toList());
        }
    }
  6. 다음 콘텐츠를 사용하여 class 파일 CoffeeResource.java 를 만듭니다.

    package com.example.microprofile.faulttolerance;
    
    import java.util.List;
    import java.util.Random;
    import java.util.concurrent.atomic.AtomicLong;
    import javax.inject.Inject;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    import java.util.Collections;
    import javax.ws.rs.PathParam;
    import org.eclipse.microprofile.faulttolerance.Fallback;
    import org.eclipse.microprofile.faulttolerance.Timeout;
    import org.eclipse.microprofile.faulttolerance.Retry;
    
    @Path("/coffee")
    @Produces(MediaType.APPLICATION_JSON)
    public class CoffeeResource {
    
        @Inject
        private CoffeeRepositoryService coffeeRepository;
    
        private AtomicLong counter = new AtomicLong(0);
    
        @GET
        @Retry(maxRetries = 4) 1
        public List<Coffee> coffees() {
            final Long invocationNumber = counter.getAndIncrement();
            return coffeeRepository.getAllCoffees();
        }
    
    
        @GET
        @Path("/{id}/recommendations")
        @Timeout(250) 2
        public List<Coffee> recommendations(@PathParam("id") int id) {
                return coffeeRepository.getRecommendations(id);
            }
    
        @GET
        @Path("fallback/{id}/recommendations")
        @Fallback(fallbackMethod = "fallbackRecommendations") 3
        public List<Coffee> recommendations2(@PathParam("id") int id) {
            return coffeeRepository.getRecommendations(id);
            }
    
        public List<Coffee> fallbackRecommendations(int id) {
            //always return a default coffee
            return Collections.singletonList(coffeeRepository.getCoffeeById(1));
        }
    }
    1
    재시도 횟수를 4 로 정의합니다.
    2
    시간 간격(밀리초)을 정의합니다.
    3
    호출이 실패할 때 호출할 대체 메서드를 정의합니다.
  7. 애플리케이션의 루트 디렉터리로 이동합니다.

    $ cd APPLICATION_ROOT
  8. 다음 Maven 명령을 사용하여 애플리케이션을 빌드합니다.

    $ mvn clean install wildfly:deploy

    http://localhost:8080/microprofile-fault-tolerance/coffee 에서 애플리케이션에 액세스합니다.

추가 리소스

  • 애플리케이션의 내결함성을 테스트하기 위한 인위적인 오류가 포함된 내결함성 애플리케이션의 자세한 예는 microprofile-fault-tolerance 빠른 시작을 참조하십시오.

4.4. MicroProfile 상태 개발

4.4.1. 사용자 정의 상태 점검 예

microprofile-health-smallrye 하위 시스템에서 제공하는 기본 구현은 기본 상태 점검을 수행합니다. 서버 또는 애플리케이션 상태에 대한 자세한 정보를 보려면 사용자 지정 상태 점검이 포함될 수 있습니다. org.eclipse.microprofile. health.Liveness 주석 또는 클래스 수준에서 org.eclipse.microprofile. health.Readiness 주석을 포함하는 Jakarta Contexts 및 Dependency Injection bean은 런타임에 자동으로 검색 및 호출됩니다.

다음 예제에서는 UP 상태를 반환하는 상태 점검의 새 구현을 생성하는 방법을 보여줍니다.

import org.eclipse.microprofile.health.HealthCheck;
import org.eclipse.microprofile.health.HealthCheckResponse;
import org.eclipse.microprofile.health.Liveness;

import javax.enterprise.context.ApplicationScoped;

@Liveness
@ApplicationScoped
public class HealthTest implements HealthCheck {

    @Override
    public HealthCheckResponse call() {
        return HealthCheckResponse.named("health-test").up().build();
    }
}

배포한 후 후속 상태 점검 쿼리에는 다음 예에 설명된 대로 사용자 지정 점검이 포함됩니다.

/subsystem=microprofile-health-smallrye:check
{
    "outcome" => "success",
    "result" => {
        "outcome" => "UP",
        "checks" => [{
            "name" => "health-test",
            "state" => "UP"
        }]
    }
}
참고

다음을 사용하여 활성 및 준비 상태 점검을 사용할 수 있습니다.

  • /subsystem=microprofile-health-smallrye:check-live
  • /subsystem=microprofile-health-smallrye:check-ready

4.4.2. @Liveness 주석 예

다음은 애플리케이션에서 @Liveness 주석을 사용하는 예입니다.

@Liveness
@ApplicationScoped
public class DataHealthCheck implements HealthCheck {

    @Override
    public HealthCheckResponse call() {
        return HealthCheckResponse.named("Health check with data")
            .up()
            .withData("foo", "fooValue")
            .withData("bar", "barValue")
            .build();
    }
}

4.4.3. @Readiness 주석 예

다음 예제에서는 데이터베이스에 대한 연결을 확인하는 방법을 보여줍니다. 데이터베이스가 다운되면 준비 상태 점검에서 오류를 보고합니다.

@Readiness
@ApplicationScoped
public class DatabaseConnectionHealthCheck implements HealthCheck {

    @Inject
    @ConfigProperty(name = "database.up", defaultValue = "false")
    private boolean databaseUp;

    @Override
    public HealthCheckResponse call() {

        HealthCheckResponseBuilder responseBuilder = HealthCheckResponse.named("Database connection health check");

        try {
            simulateDatabaseConnectionVerification();
            responseBuilder.up();
        } catch (IllegalStateException e) {
            // cannot access the database
            responseBuilder.down()
                .withData("error", e.getMessage()); // pass the exception message
        }

        return responseBuilder.build();
    }

    private void simulateDatabaseConnectionVerification() {
        if (!databaseUp) {
            throw new IllegalStateException("Cannot contact database");
        }
    }
}

4.5. MicroProfile JWT 애플리케이션 개발

4.5.1. microprofile-jwt-smallrye 하위 시스템 활성화

MicroProfile JWT 통합은 microprofile-jwt-smallrye 하위 시스템에서 제공하며 기본 구성에 포함됩니다. 하위 시스템이 기본 구성에 없으면 다음과 같이 추가할 수 있습니다.

사전 요구 사항

  • EAP XP가 설치되어 있어야 합니다.

절차

  1. JBoss EAP에서 MicroProfile JWT smallrye 확장을 활성화합니다.

    /extension=org.wildfly.extension.microprofile.jwt-smallrye:add
  2. microprofile-jwt-smallrye 하위 시스템을 활성화합니다.

    /subsystem=microprofile-jwt-smallrye:add
  3. 서버를 다시 로드합니다.

    reload

microprofile-jwt-smallrye 하위 시스템이 활성화됩니다.

4.5.2. JWT 애플리케이션 개발을 위한 Maven 프로젝트 구성

JWT 애플리케이션 개발을 위한 디렉터리 구조 및 필수 종속성을 사용하여 Maven 프로젝트를 생성합니다.

사전 요구 사항

  • Maven이 설치되어 있어야 합니다.
  • MicroProfile-jwt-smallrye 하위 시스템이 활성화되어 있습니다.

절차

  1. maven 프로젝트를 설정합니다.

    $ mvn archetype:generate -DinteractiveMode=false \
        -DarchetypeGroupId=org.apache.maven.archetypes \
        -DarchetypeArtifactId=maven-archetype-webapp \
        -DgroupId=com.example -DartifactId=microprofile-jwt \
        -Dversion=1.0.0.Alpha1-SNAPSHOT
      cd microprofile-jwt

    명령은 프로젝트 및 pom.xml 구성 파일의 디렉터리 구조를 생성합니다.

  2. POM 파일이 jboss-eap-xp-microprofile BOM에서 MicroProfile JWT 아티팩트의 버전을 자동으로 관리하도록 하려면 프로젝트 POM 파일의 <dependencyManagement> 섹션으로 BOM을 가져옵니다.

    <dependencyManagement>
      <dependencies>
        <!-- importing the microprofile BOM adds MicroProfile specs -->
        <dependency>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-eap-xp-microprofile</artifactId>
            <version>${version.microprofile.bom}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>

    ${version.microprofile.bom}을 설치된 BOM 버전으로 교체합니다.

  3. BOM에서 관리하는 MicroProfile JWT 아티팩트를 POM 프로젝트의 <dependency> 섹션에 추가합니다. 다음 예제에서는 파일에 MicroProfile JWT 종속성을 추가하는 방법을 보여줍니다.

    <!-- Add the MicroProfile JWT API. Set provided for the <scope> tag, as the API is included in the server. -->
    <dependency>
      <groupId>org.eclipse.microprofile.jwt</groupId>
      <artifactId>microprofile-jwt-auth-api</artifactId>
      <scope>provided</scope>
    </dependency>

4.5.3. MicroProfile JWT로 애플리케이션 생성

JWT 토큰을 기반으로 요청을 인증하고 토큰 전달자의 ID를 기반으로 권한을 구현하는 애플리케이션을 생성합니다.

참고

다음 절차에서는 토큰을 생성하기 위한 코드의 예를 제공합니다. 프로덕션 환경의 경우 Red Hat SSO(Single Sign-On)와 같은 ID 공급자를 사용합니다.

사전 요구 사항

  • Maven 프로젝트는 올바른 종속성으로 구성됩니다.

절차

  1. 토큰 생성기를 생성합니다.

    이 단계는 참조 역할을 합니다. 프로덕션 환경의 경우 Red Hat SSO와 같은 ID 공급자를 사용합니다.

    1. 생성기 유틸리티를 토큰화하기 위한 src/test/java 디렉토리를 생성하고 이 디렉토리로 이동합니다.

      $ mkdir -p src/test/java
      $ cd src/test/java
    2. 다음 콘텐츠를 사용하여 클래스 파일 TokenUtil.java 를 만듭니다.

      package  com.example.mpjwt;
      
      import java.io.FileInputStream;
      import java.io.InputStream;
      import java.nio.charset.StandardCharsets;
      import java.security.KeyFactory;
      import java.security.PrivateKey;
      import java.security.spec.PKCS8EncodedKeySpec;
      import java.util.Base64;
      import java.util.UUID;
      
      import javax.json.Json;
      import javax.json.JsonArrayBuilder;
      import javax.json.JsonObjectBuilder;
      
      import com.nimbusds.jose.JOSEObjectType;
      import com.nimbusds.jose.JWSAlgorithm;
      import com.nimbusds.jose.JWSHeader;
      import com.nimbusds.jose.JWSObject;
      import com.nimbusds.jose.JWSSigner;
      import com.nimbusds.jose.Payload;
      import com.nimbusds.jose.crypto.RSASSASigner;
      
      public class TokenUtil {
      
          private static PrivateKey loadPrivateKey(final String fileName) throws Exception {
              try (InputStream is = new FileInputStream(fileName)) {
                  byte[] contents = new byte[4096];
                  int length = is.read(contents);
                  String rawKey = new String(contents, 0, length, StandardCharsets.UTF_8)
                          .replaceAll("-----BEGIN (.*)-----", "")
                          .replaceAll("-----END (.*)----", "")
                          .replaceAll("\r\n", "").replaceAll("\n", "").trim();
      
                  PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(rawKey));
                  KeyFactory keyFactory = KeyFactory.getInstance("RSA");
      
                  return keyFactory.generatePrivate(keySpec);
              }
          }
      
          public static String generateJWT(final String principal, final String birthdate, final String...groups) throws Exception {
          	PrivateKey privateKey = loadPrivateKey("private.pem");
      
              JWSSigner signer = new RSASSASigner(privateKey);
              JsonArrayBuilder groupsBuilder = Json.createArrayBuilder();
              for (String group : groups) { groupsBuilder.add(group); }
      
              long currentTime = System.currentTimeMillis() / 1000;
              JsonObjectBuilder claimsBuilder = Json.createObjectBuilder()
                      .add("sub", principal)
                      .add("upn", principal)
                      .add("iss", "quickstart-jwt-issuer")
                      .add("aud", "jwt-audience")
                      .add("groups", groupsBuilder.build())
                      .add("birthdate", birthdate)
                      .add("jti", UUID.randomUUID().toString())
                      .add("iat", currentTime)
                      .add("exp", currentTime + 14400);
      
              JWSObject jwsObject = new JWSObject(new JWSHeader.Builder(JWSAlgorithm.RS256)
                      .type(new JOSEObjectType("jwt"))
                      .keyID("Test Key").build(),
                      new Payload(claimsBuilder.build().toString()));
      
              jwsObject.sign(signer);
      
              return jwsObject.serialize();
          }
      
          public static void main(String[] args) throws Exception {
              if (args.length < 2) throw new IllegalArgumentException("Usage TokenUtil {principal} {birthdate} {groups}");
              String principal = args[0];
              String birthdate = args[1];
              String[] groups = new String[args.length - 2];
              System.arraycopy(args, 2, groups, 0, groups.length);
      
              String token = generateJWT(principal, birthdate, groups);
              String[] parts = token.split("\\.");
              System.out.println(String.format("\nJWT Header - %s", new String(Base64.getDecoder().decode(parts[0]), StandardCharsets.UTF_8)));
              System.out.println(String.format("\nJWT Claims - %s", new String(Base64.getDecoder().decode(parts[1]), StandardCharsets.UTF_8)));
              System.out.println(String.format("\nGenerated JWT Token \n%s\n", token));
          }
      }
  2. 다음 내용으로 src/main/webapp/WEB-INF 디렉토리에 web.xml 파일을 생성합니다.

    <context-param>
        <param-name>resteasy.role.based.security</param-name>
        <param-value>true</param-value>
    </context-param>
    
    <security-role>
        <role-name>Subscriber</role-name>
    </security-role>
  3. 다음 콘텐츠를 사용하여 SampleEndPoint.java 클래스 파일을 생성합니다.

    package com.example.mpjwt;
    
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    
    import java.security.Principal;
    import javax.ws.rs.core.Context;
    import javax.ws.rs.core.SecurityContext;
    
    import javax.annotation.security.RolesAllowed;
    import javax.inject.Inject;
    
    import java.time.LocalDate;
    import java.time.Period;
    import java.util.Optional;
    
    import org.eclipse.microprofile.jwt.Claims;
    import org.eclipse.microprofile.jwt.Claim;
    
    import org.eclipse.microprofile.jwt.JsonWebToken;
    
    @Path("/Sample")
    public class SampleEndPoint {
    
        @GET
        @Path("/helloworld")
        public String helloworld(@Context SecurityContext securityContext) {
            Principal principal = securityContext.getUserPrincipal();
            String caller = principal == null ? "anonymous" : principal.getName();
    
            return "Hello " + caller;
        }
    
        @Inject
    	JsonWebToken jwt;
    
    	@GET()
    	@Path("/subscription")
    	@RolesAllowed({"Subscriber"})
    	public String helloRolesAllowed(@Context SecurityContext ctx) {
        	Principal caller =  ctx.getUserPrincipal();
        	String name = caller == null ? "anonymous" : caller.getName();
        	boolean hasJWT = jwt.getClaimNames() != null;
        	String helloReply = String.format("hello + %s, hasJWT: %s", name, hasJWT);
    
        	return helloReply;
    	}
    
    	@Inject
    	@Claim(standard = Claims.birthdate)
    	Optional<String> birthdate;
    
    	@GET()
    	@Path("/birthday")
    	@RolesAllowed({ "Subscriber" })
    	public String birthday() {
        	if (birthdate.isPresent()) {
            	LocalDate birthdate = LocalDate.parse(this.birthdate.get().toString());
            	LocalDate today = LocalDate.now();
            	LocalDate next = birthdate.withYear(today.getYear());
            	if (today.equals(next)) {
                	return "Happy Birthday";
            }
            if (next.isBefore(today)) {
                next = next.withYear(next.getYear() + 1);
            }
    
            Period wait = today.until(next);
    
            return String.format("%d months and %d days until your next birthday.", wait.getMonths(), wait.getDays());
        }
    
        return "Sorry, we don't know your birthdate.";
    
    	}
    
    }

    @Path 주석이 있는 메서드는 Jakarta RESTful Web Services 엔드포인트입니다.

    주석 @Claim 은 JWT 클레임을 정의합니다.

  4. 클래스 파일 App.java 를 생성하여 자카르타 RESTful 웹 서비스를 활성화합니다.

    package com.example.mpjwt;
    
    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;
    
    import org.eclipse.microprofile.auth.LoginConfig;
    
    @ApplicationPath("/rest")
    @LoginConfig(authMethod="MP-JWT", realmName="MP JWT Realm")
    public class App extends Application {}

    주석 @LoginConfig(authMethod="MP-JWT", realmName="MP JWT Realm") 을 사용하면 배포 중에 JWT RBAC가 활성화됩니다.

  5. 다음 Maven 명령으로 애플리케이션을 컴파일합니다.

    $ mvn package
  6. 토큰 생성기 유틸리티를 사용하여 JWT 토큰을 생성합니다.

    $ mvn exec:java -Dexec.mainClass=org.wildfly.quickstarts.mpjwt.TokenUtil -Dexec.classpathScope=test -Dexec.args="testUser 2017-09-15 Echoer Subscriber"
  7. 다음 Maven 명령을 사용하여 애플리케이션을 빌드하고 배포합니다.

    $ mvn package wildfly:deploy
  8. 애플리케이션을 테스트합니다.

    • 전달자 토큰을 사용하여 Sample/subscription 끝점을 호출합니다.

      $ curl -H "Authorization: Bearer ey..rg" http://localhost:8080/microprofile-jwt/rest/Sample/subscription
    • Sample/birthday 끝점을 호출합니다.

      $ curl -H "Authorization: Bearer ey..rg" http://localhost:8080/microprofile-jwt/rest/Sample/birthday

4.6. MicroProfile 지표 개발

4.6.1. MicroProfile 지표 애플리케이션 생성

애플리케이션에 대한 요청 수를 반환하는 애플리케이션을 생성합니다.

절차

  1. 다음 내용으로 클래스 파일 HelloService.java 를 만듭니다.

    package com.example.microprofile.metrics;
    
    public class HelloService {
        String createHelloMessage(String name){
            return "Hello" + name;
        }
    }
  2. 다음 콘텐츠를 사용하여 클래스 파일 HelloWorld.java 를 만듭니다.

    package com.example.microprofile.metrics;
    
    import javax.inject.Inject;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import org.eclipse.microprofile.metrics.annotation.Counted;
    
    @Path("/")
    public class HelloWorld {
    @Inject
        HelloService helloService;
    
    @GET
    @Path("/json")
        @Produces({ "application/json" })
        @Counted(name = "requestCount",
      		 absolute = true,
    description = "Number of times the getHelloWorldJSON was requested")
        public String getHelloWorldJSON() {
            return "{\"result\":\"" + helloService.createHelloMessage("World") + "\"}";
        }
    }
  3. 다음 종속성을 포함하도록 pom.xml 파일을 업데이트합니다.

    <dependency>
        <groupId>org.eclipse.microprofile.metrics</groupId>
        <artifactId>microprofile-metrics-api</artifactId>
        <scope>provided</scope>
    </dependency>
  4. 다음 Maven 명령을 사용하여 애플리케이션을 빌드합니다.

    $ mvn clean install wildfly:deploy
  5. 지표를 테스트합니다.

    1. CLI에서 다음 명령을 실행합니다.

      $ curl -v http://localhost:9990/metrics |  grep request_count | grep helloworld-rs-metrics

      예상 출력 :

      jboss_undertow_request_count_total{deployment="helloworld-rs-metrics.war",servlet="org.jboss.as.quickstarts.rshelloworld.JAXActivator",subdeployment="helloworld-rs-metrics.war",microprofile_scope="vendor"} 0.0
    2. 브라우저에서 URL http://localhost:8080/helloworld-rs/rest/json 로 이동합니다.
    3. CLI에서 다음 명령을 다시 생성합니다.

      $ curl -v http://localhost:9990/metrics |  grep request_count | grep helloworld-rs-metrics

      예상 출력 :

      jboss_undertow_request_count_total{deployment="helloworld-rs-metrics.war",servlet="org.jboss.as.quickstarts.rshelloworld.JAXActivator",subdeployment="helloworld-rs-metrics.war",microprofile_scope="vendor"} 1.0

4.7. MicroProfile OpenAPI 애플리케이션 개발

4.7.1. MicroProfile OpenAPI 활성화

microprofile-openapi-smallrye 하위 시스템은 standalone-microprofile.xml 구성에서 제공됩니다. 그러나 JBoss EAP XP는 기본적으로 standalone.xml 을 사용합니다. 이를 사용하려면 standalone.xml 에 하위 시스템을 포함해야 합니다.

또는 MicroProfile 하위 시스템 및 확장 프로그램을 사용하여 독립 실행형 구성 업데이트 절차를 따라 standalone.xml 구성 파일을 업데이트할 수 있습니다.

절차

  1. JBoss EAP에서 MicroProfile OpenAPI smallrye 확장을 활성화합니다.

    /extension=org.wildfly.extension.microprofile.openapi-smallrye:add()
  2. 다음 관리 명령을 사용하여 microprofile-openapi-smallrye 하위 시스템을 활성화합니다.

    /subsystem=microprofile-openapi-smallrye:add()
  3. 서버를 다시 로드합니다.

    reload

microprofile-openapi-smallrye 하위 시스템이 활성화됩니다.

4.7.2. MicroProfile OpenAPI에 대한 Maven 프로젝트 구성

Maven 프로젝트를 생성하여 MicroProfile OpenAPI 애플리케이션을 생성하기 위한 종속성을 설정합니다.

사전 요구 사항

  • Maven이 설치되어 있어야 합니다.
  • JBoss EAP Maven 리포지토리가 구성되어 있습니다.

절차

  1. 프로젝트를 초기화합니다.

    mvn archetype:generate \
         -DgroupId=com.example.microprofile.openapi \
         -DartifactId=microprofile-openapi\
         -DarchetypeGroupId=org.apache.maven.archetypes \
         -DarchetypeArtifactId=maven-archetype-webapp \
         -DinteractiveMode=false
    cd microprofile-openapi

    명령은 프로젝트 및 pom.xml 구성 파일의 디렉터리 구조를 생성합니다.

  2. 다음을 포함하도록 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.example.microprofile.openapi</groupId>
        <artifactId>microprofile-openapi</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>war</packaging>
    
        <name>microprofile-openapi Maven Webapp</name>
        <!-- Update the value with the URL of the project -->
        <url>http://www.example.com</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <version.server.bom>3.0.0.GA</version.server.bom>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.jboss.bom</groupId>
                    <artifactId>jboss-eap-xp-microprofile</artifactId>
                    <version>${version.server.bom}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <dependencies>
            <dependency>
                <groupId>org.jboss.spec.javax.ws.rs</groupId>
                <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    
        <build>
            <!-- Set the name of the archive -->
            <finalName>${project.artifactId}</finalName>
            <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>
                <!-- Allows to use mvn wildfly:deploy -->
                <plugin>
                    <groupId>org.wildfly.plugins</groupId>
                    <artifactId>wildfly-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>

    pom.xml 구성 파일과 디렉터리 구조를 사용하여 애플리케이션을 생성합니다.

추가 리소스

4.7.3. MicroProfile OpenAPI 애플리케이션 생성

OpenAPI v3 문서를 반환하는 애플리케이션을 생성합니다.

사전 요구 사항

  • Maven 프로젝트는 MicroProfile OpenAPI 애플리케이션을 생성하도록 구성됩니다.

절차

  1. 클래스 파일을 저장할 디렉터리를 생성합니다.

    $ mkdir -p APPLICATION_ROOT/src/main/java/com/example/microprofile/openapi/

    APPLICATION_ROOT 는 애플리케이션에 대한 pom.xml 구성 파일이 포함된 디렉터리입니다.

  2. 새 디렉터리로 이동합니다.

    $ cd APPLICATION_ROOT/src/main/java/com/example/microprofile/openapi/

    다음 단계의 클래스 파일은 모두 이 디렉터리에 생성해야 합니다.

  3. 다음 콘텐츠를 사용하여 클래스 파일 InventoryApplication.java 를 생성합니다.

    package com.example.microprofile.openapi;
    
    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;
    
    @ApplicationPath("/inventory")
    public class InventoryApplication extends Application {
    }

    이 클래스는 애플리케이션의 REST 엔드포인트 역할을 합니다.

  4. 다음 콘텐츠를 사용하여 클래스 파일 Fruit.java 를 생성합니다.

    package com.example.microprofile.openapi;
    
    public class Fruit {
    
        private final String name;
        private final String description;
    
        public Fruit(String name, String description) {
            this.name = name;
            this.description = description;
        }
    
        public String getName() {
            return this.name;
        }
    
        public String getDescription() {
            return this.description;
        }
    }
  5. 다음 콘텐츠를 사용하여 클래스 파일 FruitResource.java 를 만듭니다.

    package com.example.microprofile.openapi;
    
    import java.util.Collections;
    import java.util.LinkedHashMap;
    import java.util.Set;
    
    import javax.ws.rs.Consumes;
    import javax.ws.rs.DELETE;
    import javax.ws.rs.GET;
    import javax.ws.rs.POST;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    @Path("/fruit")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public class FruitResource {
    
        private final Set<Fruit> fruits = Collections.newSetFromMap(Collections.synchronizedMap(new LinkedHashMap<>()));
    
        public FruitResource() {
            this.fruits.add(new Fruit("Apple", "Winter fruit"));
            this.fruits.add(new Fruit("Pineapple", "Tropical fruit"));
        }
    
        @GET
        public Set<Fruit> all() {
            return this.fruits;
        }
    
        @POST
        public Set<Fruit> add(Fruit fruit) {
            this.fruits.add(fruit);
            return this.fruits;
        }
    
        @DELETE
        public Set<Fruit> remove(Fruit fruit) {
            this.fruits.removeIf(existingFruit -> existingFruit.getName().contentEquals(fruit.getName()));
            return this.fruits;
        }
    }
  6. 애플리케이션의 루트 디렉터리로 이동합니다.

    $ cd APPLICATION_ROOT
  7. 다음 Maven 명령을 사용하여 애플리케이션을 빌드하고 배포합니다.

    $ mvn wildfly:deploy
  8. 애플리케이션을 테스트합니다.

    • curl 을 사용하여 샘플 애플리케이션의 OpenAPI 설명서에 액세스합니다.

      $ curl http://localhost:8080/openapi
    • 다음 출력이 반환됩니다.

      openapi: 3.0.1
      info:
        title: Archetype Created Web Application
        version: "1.0"
      servers:
      - url: /microprofile-openapi
      paths:
        /inventory/fruit:
          get:
            responses:
              "200":
                description: OK
                content:
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Fruit'
          post:
            requestBody:
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Fruit'
            responses:
              "200":
                description: OK
                content:
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Fruit'
          delete:
            requestBody:
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/Fruit'
            responses:
              "200":
                description: OK
                content:
                  application/json:
                    schema:
                      type: array
                      items:
                        $ref: '#/components/schemas/Fruit'
      components:
        schemas:
          Fruit:
            type: object
            properties:
              description:
                type: string
              name:
                type: string

추가 리소스

4.7.4. 정적 OpenAPI 문서를 제공하도록 JBoss EAP 구성

호스트의 REST 서비스를 설명하는 정적 OpenAPI 문서를 제공하도록 JBoss EAP를 구성합니다.

정적 OpenAPI 문서를 제공하도록 JBoss EAP를 구성하면 Jakarta RESTful Web Services 및 MicroProfile OpenAPI 주석보다 먼저 정적 OpenAPI 문서가 처리됩니다.

프로덕션 환경에서 정적 문서를 제공할 때 주석 처리를 비활성화합니다. 주석 처리를 비활성화하면 변경할 수 없으며 버전이 지정된 API 계약을 클라이언트에 사용할 수 있습니다.

절차

  1. 애플리케이션 소스 트리에 디렉터리를 생성합니다.

    $ mkdir APPLICATION_ROOT/src/main/webapp/META-INF

    APPLICATION_ROOT 는 애플리케이션에 대한 pom.xml 구성 파일이 포함된 디렉터리입니다.

  2. OpenAPI 엔드포인트를 쿼리하여 출력을 파일로 리디렉션합니다.

    $ curl http://localhost:8080/openapi?format=JSON > src/main/webapp/META-INF/openapi.json

    기본적으로 엔드포인트는 YAML 문서를 제공합니다. format=JSON 은 JSON 문서가 반환되도록 지정합니다.

  3. OpenAPI 문서 모델을 처리할 때 주석 스캔을 건너뛰도록 애플리케이션을 구성합니다.

    $ echo "mp.openapi.scan.disable=true" > APPLICATION_ROOT/src/main/webapp/META-INF/microprofile-config.properties
  4. 애플리케이션을 다시 빌드합니다.

    $ mvn clean install
  5. 다음 관리 CLI 명령을 사용하여 애플리케이션을 다시 배포합니다.

    1. 애플리케이션 배포를 취소합니다.

      undeploy microprofile-openapi.war
    2. 애플리케이션을 배포합니다.

      deploy APPLICATION_ROOT/target/microprofile-openapi.war

JBoss EAP는 이제 OpenAPI 엔드포인트에서 정적 OpenAPI 문서를 제공합니다.

4.8. MicroProfile REST 클라이언트 개발

4.8.1. MicroProfile REST 클라이언트 및 Jakarta RESTful Web Services 구문 비교

MicroProfile REST 클라이언트는 CORBA, RMI(Java Remote Method Invocation), JBoss Remoting Project 및 RESTEasy에도 구현되는 분산 개체 통신 버전을 활성화합니다. 예를 들어 리소스를 고려하십시오.

@Path("resource")
public class TestResource {
   @Path("test")
   @GET
   String test() {
      return "test";
   }
 }

다음 예제에서는 TestResource 클래스에 액세스하는 Jakarta RESTful Web Services-native 방법을 사용하는 방법을 보여줍니다.

Client client = ClientBuilder.newClient();
String response = client.target("http://localhost:8081/test").request().get(String.class);

그러나 Microprofile REST 클라이언트는 다음 예제와 같이 test() 메서드를 직접 호출하여 보다 직관적인 구문을 지원합니다.

@Path("resource")
public interface TestResourceIntf {
    @Path("test")
    @GET
    public String test();
}

TestResourceIntf service = RestClientBuilder.newBuilder()
                              .baseUrl(http://localhost:8081/))
                              .build(TestResourceIntf.class);
String s = service.test();

위 예제에서 call service. test() 에 설명된 대로 TestResourceIntf 클래스에서 호출을 생성하는 것이 훨씬 쉬워집니다.

다음 예제는 TestResourceIntf 클래스의 더 자세한 버전입니다.

@Path("resource")
public interface TestResourceIntf2 {
   @Path("test/{path}")
   @Consumes("text/plain")
   @Produces("text/html")
   @POST
   public String test(@PathParam("path") String path, @QueryParam("query") String query, String entity);
}

service.test("p", "q", "e") 메서드를 호출하면 다음 예와 같이 HTTP 메시지가 생성됩니다.

POST /resource/test/p/?query=q HTTP/1.1
Accept: text/html
Content-Type: text/plain
Content-Length: 1

e

4.8.2. MicroProfile REST 클라이언트의 공급자 프로그래밍 등록

MicroProfile REST 클라이언트를 사용하면 공급업체를 등록하여 클라이언트 환경을 구성할 수 있습니다. 예를 들면 다음과 같습니다.

TestResourceIntf service = RestClientBuilder.newBuilder()
                              .baseUrl(http://localhost:8081/))
                              .register(MyClientResponseFilter.class)
                              .register(MyMessageBodyReader.class)
                              .build(TestResourceIntf.class);

4.8.3. MicroProfile REST 클라이언트에서 공급자 선언 등록

다음 예와 같이 MicroProfile REST 클라이언트를 사용하여 org.eclipse.microprofile.rest.client.annotation.RegisterProvider 주석을 대상 인터페이스에 추가하여 선언적으로 프로바이더를 등록합니다.

@Path("resource")
@RegisterProvider(MyClientResponseFilter.class)
@RegisterProvider(MyMessageBodyReader.class)
public interface TestResourceIntf2 {
   @Path("test/{path}")
   @Consumes("text/plain")
   @Produces("text/html")
   @POST
   public String test(@PathParam("path") String path, @QueryParam("query") String query, String entity);
}

주석을 사용하여 MyClientResponseFilter 클래스와 MyMessageBodyReader 클래스를 선언하면 RestClientBuilder.register() 메서드를 호출할 필요가 없습니다.

4.8.4. MicroProfile REST 클라이언트에서 헤더 선언 사양

다음과 같은 방법으로 HTTP 요청에 대한 헤더를 지정할 수 있습니다.

  • 리소스 메서드 매개 변수 중 하나에 주석을 달 수 있습니다.
  • org.eclipse.microprofile.rest.client.annotation.ClientHeaderParam 주석을 선언적으로 사용합니다.

다음 예제에서는 주석 @HeaderParam 을 사용하여 리소스 메서드 매개변수 중 하나에 주석을 달아 헤더 설정을 보여줍니다.

@POST
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.TEXT_PLAIN)
String contentLang(@HeaderParam(HttpHeaders.CONTENT_LANGUAGE) String contentLanguage, String subject);

다음 예제에서는 org.eclipse.microprofile.rest.client.annotation.ClientHeaderParam 주석을 사용하여 헤더를 설정하는 방법을 보여줍니다.

@POST
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.TEXT_PLAIN)
@ClientHeaderParam(name=HttpHeaders.CONTENT_LANGUAGE, value="{getLanguage}")
String contentLang(String subject);

default String getLanguage() {
   return ...;
}

4.8.5. MicroProfile REST 클라이언트의 ResponseExceptionMapper

org.eclipse.microprofile.rest.client.ext.ResponseExceptionMapper 클래스는 Jakarta RESTful Web Services에 정의된 javax.ws.rs.ext.ExceptionMapper 클래스의 클라이언트 측 inverse입니다. ExceptionMapper.toResponse() 메서드는 서버 측 처리 중에 발생한 Exception 클래스를 Response 클래스로 전환합니다. ResponseExceptionMapper.toThrowable() 메서드는 클라이언트 측에서 수신된 Response 클래스를 HTTP 오류 상태의 Exception 클래스로 전환합니다.

ResponseExceptionMapper 클래스를 프로그래밍 방식으로 또는 선언적으로 등록할 수 있습니다. 등록된 ResponseExceptionMapper 클래스가 없으면 기본 ResponseException Mapper 클래스는 모든 응답을 >= 400 으로 WebApplicationException 클래스에 매핑합니다.

4.8.6. MicroProfile REST 클라이언트를 사용한 컨텍스트 종속성 주입

MicroProfile REST 클라이언트를 사용하면 @RegisterRestClient 클래스를 사용하여 Jakarta 컨텍스트 및 종속성 주입(Jakarta 컨텍스트 및 종속성 주입)으로 관리되는 모든 인터페이스에 주석을 달아야 합니다. 예를 들면 다음과 같습니다.

@Path("resource")
@RegisterProvider(MyClientResponseFilter.class)
public static class TestResourceImpl {
      @Inject TestDataBase db;

      @Path("test/{path}")
      @Consumes("text/plain")
      @Produces("text/html")
      @POST
      public String test(@PathParam("path") String path, @QueryParam("query")
      String query, String entity) {
         return db.getByName(query);
      }
   }
   @Path("database")
   @RegisterRestClient
   public interface TestDataBase {

      @Path("")
      @POST
      public String getByName(String name);
   }

여기에서 MicroProfile REST 클라이언트 구현은 TestDataBase 클래스 서비스에 대한 클라이언트를 생성하므로 Test ResourceImpl 클래스에서 쉽게 액세스할 수 있습니다. 그러나 TestDataBase 클래스 구현 경로에 대한 정보는 포함되지 않습니다. 이 정보는 선택적 @RegisterProvider 매개변수 baseUri 로 제공할 수 있습니다.

@Path("database")
@RegisterRestClient(baseUri="https://localhost:8080/webapp")
public interface TestDataBase {
   @Path("")
   @POST
   public String getByName(String name);
}

이는 https://localhost:8080/webapp 에서 TestDataBase 구현에 액세스할 수 있음을 나타냅니다. MicroProfile 구성을 사용하여 외부에서 정보를 제공할 수도 있습니다.

<fully qualified name of TestDataBase>/mp-rest/url=<URL>

예를 들어 다음 속성은 https://localhost:8080/webapp 에서 com.bluemonkeydia daemon.TestDatabase 클래스의 구현에 액세스할 수 있음을 나타냅니다.

com.bluemonkeydiamond.TestDatabase/mp-rest/url=https://localhost:8080/webapp

자카르타 컨텍스트 및 종속성 주입 클라이언트에 다른 여러 속성을 제공할 수 있습니다. 예를 들어 com.mycompany.remoteServices.MyServiceClient/mp-rest/providers 는 클라이언트에 포함할 정규화된 공급자 클래스 이름의 쉼표로 구분된 목록입니다.

추가 리소스

5장. JBoss EAP XP용 OpenShift 이미지에서 마이크로서비스 애플리케이션 구축 및 실행

JBoss EAP XP용 OpenShift 이미지에서 마이크로 서비스 애플리케이션을 빌드하고 실행할 수 있습니다.

참고

JBoss EAP XP는 OpenShift 4 이상 버전에서만 지원됩니다.

다음 워크플로를 사용하여 S2I(Source-to-Image) 프로세스를 사용하여 JBoss EAP XP용 OpenShift 이미지에서 마이크로서비스 애플리케이션을 빌드하고 실행합니다.

참고

JBoss EAP XP 3.0.0의 OpenShift 이미지는 standalone -microprofile-ha.xml 파일을 기반으로 하는 기본 독립 실행형 구성 파일을 제공합니다. JBoss EAP XP에 포함된 서버 구성 파일에 대한 자세한 내용은 독립 실행형 서버 구성 파일 섹션을 참조하십시오.

이 워크플로에서는 microprofile-config 빠른 시작을 예제로 사용합니다. 빠른 시작에서는 고유한 프로젝트에 대한 참조로 사용할 수 있는 작은 특정 작업 예제를 제공합니다. 자세한 내용은 JBoss EAP XP 3.0.0과 함께 제공되는 microprofile-config 빠른 시작을 참조하십시오.

추가 리소스

5.1. 애플리케이션 배포를 위한 OpenShift 준비

애플리케이션 배포를 위해 OpenShift를 준비합니다.

사전 요구 사항

작동 중인 OpenShift 인스턴스를 설치했습니다. 자세한 내용은 Red Hat 고객 포털에서 OpenShift Container Platform 클러스터 설치 및 구성 설명서를 참조하십시오.

절차

  1. oc login 명령을 사용하여 OpenShift 인스턴스에 로그인합니다.
  2. OpenShift에서 새 프로젝트를 만듭니다.

    프로젝트를 사용하면 사용자 그룹이 다른 그룹과 별도로 콘텐츠를 구성하고 관리할 수 있습니다. 다음 명령을 사용하여 OpenShift에서 프로젝트를 생성할 수 있습니다.

    $ oc new-project PROJECT_NAME

    예를 들어 microprofile-config 빠른 시작의 경우 다음 명령을 사용하여 eap-demo 라는 새 프로젝트를 생성합니다.

    $ oc new-project eap-demo

5.2. Red Hat Container Registry에 대한 인증 구성

JBoss EAP XP의 OpenShift 이미지를 가져오고 사용하려면 Red Hat Container Registry에 대한 인증을 구성해야 합니다.

Red Hat Container Registry에 대한 액세스를 구성하기 위해 레지스트리 서비스 계정을 사용하여 인증 토큰을 생성합니다. 인증 토큰을 사용할 때 OpenShift 구성에 Red Hat 계정의 사용자 이름과 암호를 사용하거나 저장할 필요가 없습니다.

절차

  1. Red Hat 고객 포털의 지침에 따라 레지스트리 서비스 계정 관리 애플리케이션을 사용하여 인증 토큰을 생성합니다.
  2. 토큰의 OpenShift 시크릿이 포함된 YAML 파일을 다운로드합니다.

    토큰의 토큰 정보 페이지의 OpenShift Secret 탭에서 YAML 파일을 다운로드할 수 있습니다.

  3. 다운로드한 YAML 파일을 사용하여 OpenShift 프로젝트에 대한 인증 토큰 시크릿을 생성합니다.

    oc create -f 1234567_myserviceaccount-secret.yaml
  4. 다음 명령을 사용하여 OpenShift 프로젝트의 시크릿을 구성하고 아래 시크릿 이름을 이전 단계에서 생성한 시크릿의 이름으로 바꿉니다.

    oc secrets link default 1234567-myserviceaccount-pull-secret --for=pull
    oc secrets link builder 1234567-myserviceaccount-pull-secret --for=pull

5.3. JBoss EAP XP용 최신 OpenShift 이미지 스트림 및 템플릿 가져오기

JBoss EAP XP용 최신 OpenShift 이미지 스트림 및 템플릿을 가져옵니다.

중요

OpenShift의 OpenJDK 8 이미지 및 이미지 스트림은 더 이상 사용되지 않습니다.

이미지와 이미지 스트림은 여전히 OpenShift에서 지원됩니다. 그러나 이러한 이미지 및 이미지 스트림의 개선 사항은 없으며 향후 제거될 수 있습니다. Red Hat은 표준 지원 약관에 따라 OpenJDK 8 이미지 및 이미지 스트림에 대한 완벽한 지원 및 버그 수정을 계속 제공합니다.

절차

  1. 다음 명령 중 하나를 사용하여 JBoss EAP XP용 OpenShift 이미지의 최신 JDK 11 이미지 스트림 및 템플릿을 OpenShift 프로젝트의 네임스페이스로 가져옵니다.

    1. JDK 11 이미지 스트림을 가져옵니다.

      oc replace --force -f https://raw.githubusercontent.com/jboss-container-images/jboss-eap-openshift-templates/eap-xp3/jboss-eap-xp3-openjdk11-openshift.json

      이 명령은 다음 이미지 스트림 및 템플릿을 가져옵니다.

      • JDK 11 빌더 이미지 스트림: jboss-eap-xp3-openjdk11-openshift
      • JDK 11 런타임 이미지 스트림: jboss-eap-xp3-openjdk11-runtime-openshift
    2. JDK 11 템플릿을 가져옵니다.

      oc replace --force -f https://raw.githubusercontent.com/jboss-container-images/jboss-eap-openshift-templates/eap-xp3/templates/eap-xp3-basic-s2i.json
    참고

    위의 명령을 사용하여 가져온 JBoss EAP XP 이미지 스트림 및 템플릿은 해당 OpenShift 프로젝트 내에서만 사용할 수 있습니다.

  2. 일반 openshift 네임스페이스에 대한 관리자 액세스 권한이 있고 모든 프로젝트에서 이미지 스트림 및 템플릿에 액세스할 수 있도록 하려면 명령의 oc replace 행에 -n openshift 를 추가합니다. 예를 들면 다음과 같습니다.

    ...
    oc replace -n openshift --force -f \
    ...
  3. 이미지 스트림과 템플릿을 다른 프로젝트로 가져오려면 명령의 oc replace 행에 -n PROJECT_NAME 을 추가합니다. 예를 들면 다음과 같습니다.

    ...
    oc replace -n PROJECT_NAME --force -f
    ...

    cluster-samples-operator를 사용하는 경우 클러스터 샘플 운영자 구성에 대한 OpenShift 설명서를 참조하십시오. 클러스터 샘플 Operator 구성에 대한 자세한 내용은 https://docs.openshift.com/container-platform/latest/openshift_images/configuring-samples-operator.html 을 참조하십시오.

5.4. OpenShift에서 JBoss EAP XP S2I(Source-to-Image) 애플리케이션 배포

OpenShift에 JBoss EAP XP S2I(Source-to-Image) 애플리케이션을 배포합니다.

중요

OpenShift의 OpenJDK 8 이미지 및 이미지 스트림은 더 이상 사용되지 않습니다.

이미지와 이미지 스트림은 여전히 OpenShift에서 지원됩니다. 그러나 이러한 이미지 및 이미지 스트림의 개선 사항은 없으며 향후 제거될 수 있습니다. Red Hat은 표준 지원 약관에 따라 OpenJDK 8 이미지 및 이미지 스트림에 대한 완벽한 지원 및 버그 수정을 계속 제공합니다.

사전 요구 사항

  • 선택 사항: 템플릿은 많은 템플릿 매개 변수에 기본값을 지정할 수 있으며 일부 또는 모두 기본값을 재정의해야 할 수도 있습니다. 매개 변수 목록과 기본값을 포함하여 템플릿 정보를 보려면 oc describe template TEMPLATE_NAME 명령을 사용합니다.

절차

  1. JBoss EAP XP 이미지와 Java 애플리케이션의 소스 코드를 사용하여 새 OpenShift 애플리케이션을 생성합니다. S2I 빌드에 제공된 JBoss EAP XP 템플릿 중 하나를 사용합니다.

    $ oc new-app --template=eap-xp3-basic-s2i \ 1
     -p EAP_IMAGE_NAME=jboss-eap-xp3-openjdk11-openshift:latest \
     -p EAP_RUNTIME_IMAGE_NAME=jboss-eap-xp3-openjdk11-runtime-openshift:latest \
     -p IMAGE_STREAM_NAMESPACE=eap-demo \ 2
     -p SOURCE_REPOSITORY_URL=https://github.com/jboss-developer/jboss-eap-quickstarts \ 3
     -p SOURCE_REPOSITORY_REF=xp-3.0.x \ 4
     -p CONTEXT_DIR=microprofile-config 5
    1
    사용할 템플릿입니다. 애플리케이션 이미지에 latest 태그가 지정됩니다.
    2
    최신 이미지 스트림과 템플릿을 프로젝트의 네임스페이스로 가져왔으므로 이미지 스트림을 찾을 위치의 네임스페이스를 지정해야 합니다. 일반적으로 프로젝트의 이름입니다.
    3
    애플리케이션 소스 코드를 포함하는 리포지토리의 URL입니다.
    4
    소스 코드에 사용할 Git 리포지토리 참조입니다. Git 분기 또는 태그 참조일 수 있습니다.
    5
    빌드할 소스 리포지토리 내의 디렉터리입니다.
    참고

    템플릿은 많은 템플릿 매개 변수에 기본값을 지정할 수 있으며 일부 또는 모두 기본값을 재정의해야 할 수도 있습니다. 매개 변수 목록과 기본값을 포함하여 템플릿 정보를 보려면 oc describe template TEMPLATE_NAME 명령을 사용합니다.

    새 OpenShift 애플리케이션을 생성할 때 환경 변수를 구성 하려고 할 수도 있습니다.

  2. 빌드 구성의 이름을 검색합니다.

    $ oc get bc -o name
  3. 이전 단계의 빌드 구성 이름을 사용하여 빌드의 Maven 진행률을 확인합니다.

    $ oc logs -f buildconfig/${APPLICATION_NAME}-build-artifacts
    
    …
    Push successful
    $ oc logs -f buildconfig/${APPLICATION_NAME}
    …
    Push successful

    예를 들어 microprofile-config 의 경우 다음 명령은 Maven 빌드의 진행 상황을 보여줍니다.

    $ oc logs -f buildconfig/eap-xp3-basic-app-build-artifacts
    
    …
    Push successful
    $ oc logs -f buildconfig/eap-xp3-basic-app
    …
    Push successful

5.5. JBoss EAP XP S2I(Source-to-Image) 애플리케이션용 배포 후 작업 완료

애플리케이션에 따라 OpenShift 애플리케이션을 빌드 및 배포한 후 일부 작업을 완료해야 할 수 있습니다.

배포 후 작업의 예는 다음과 같습니다.

  • OpenShift 외부에서 애플리케이션을 볼 수 있도록 서비스를 노출합니다.
  • 애플리케이션을 특정 복제본 수로 스케일링합니다.

절차

  1. 다음 명령을 사용하여 애플리케이션의 서비스 이름을 가져옵니다.

    $ oc get service
  2. 선택 사항: OpenShift 외부에서 애플리케이션에 액세스할 수 있도록 기본 서비스를 경로로 노출합니다. 예를 들어 microprofile-config 빠른 시작의 경우 다음 명령을 사용하여 필요한 서비스와 포트를 노출합니다.

    참고

    템플릿을 사용하여 애플리케이션을 생성한 경우 경로가 이미 존재할 수 있습니다. 실행 중인 경우 다음 단계를 계속 진행합니다.

    $ oc expose service/eap-xp3-basic-app --port=8080
  3. 경로의 URL을 가져옵니다.

    $ oc get route
  4. URL을 사용하여 웹 브라우저에서 애플리케이션에 액세스합니다. URL은 이전 명령 출력의 HOST/PORT 필드 값입니다.

    참고

    JBoss EAP XP 3.0.0 GA 배포의 경우 Microprofile Config 빠른 시작은 애플리케이션의 루트 컨텍스트에 HTTPS GET 요청에 응답하지 않습니다. 이 향상된 기능은 {JBossXPShortName101} GA 배포에서만 사용할 수 있습니다.

    예를 들어 Microprofile Config 애플리케이션과 상호 작용하기 위해 URL은 브라우저에서 http://HOST_PORT_Value/config/value 일 수 있습니다.

    애플리케이션에서 JBoss EAP 루트 컨텍스트를 사용하지 않는 경우 애플리케이션의 컨텍스트를 URL에 추가합니다. 예를 들어 microprofile-config 빠른 시작의 경우 URL은 http://HOST_PORT_VALUE/microprofile-config/ 일 수 있습니다.

  5. 선택적으로 다음 명령을 실행하여 애플리케이션 인스턴스를 확장할 수 있습니다. 이 명령을 실행하면 복제본 수가 3으로 증가합니다.

    $ oc scale deploymentconfig DEPLOYMENTCONFIG_NAME --replicas=3

    예를 들어 microprofile-config 빠른 시작의 경우 다음 명령을 사용하여 애플리케이션을 확장합니다.

    $ oc scale deploymentconfig/eap-xp3-basic-app --replicas=3

추가 리소스

JBoss EAP XP 빠른 시작에 대한 자세한 내용은 JBoss EAP에서 MicroProfile 사용 가이드의 빠른 시작 사용 섹션을 참조하십시오.

6장. 기능 트리밍

부팅 가능한 JAR을 빌드할 때 포함할 JBoss EAP 기능 및 하위 시스템을 결정할 수 있습니다.

참고

기능 트리밍은 OpenShift에서만 지원되거나 부팅 가능한 JAR을 빌드할 때만 지원됩니다.

추가 리소스

6.1. 사용 가능한 JBoss EAP 계층

Red Hat은 다양한 계층을 사용하여 OpenShift에서 JBoss EAP 서버 프로비저닝 또는 부팅 가능한 JAR을 사용자 지정할 수 있도록 합니다.

세 계층은 핵심 기능을 제공하는 기본 계층입니다. 다른 계층은 추가 기능으로 기본 계층을 개선하는 데코레이터 계층입니다.

대부분의 데코레이터 계층은 OpenShift의 경우 JBoss EAP에서 S2I 이미지를 빌드하거나 부팅 가능한 JAR을 빌드하는 데 사용할 수 있습니다. 몇 계층은 S2I 이미지를 지원하지 않습니다. 계층 설명은 이 제한 사항을 기록합니다.

참고

나열된 계층만 지원됩니다. 여기에 나열되지 않은 계층은 지원되지 않습니다.

6.1.1. 기본 계층

각 기본 계층에는 일반적인 서버 사용자 사례의 핵심 기능이 포함되어 있습니다.

datasources-web-server

이 계층에는 서블릿 컨테이너와 데이터 소스를 구성하는 기능이 포함됩니다.

이 계층에는 MicroProfile 기능이 포함되지 않습니다.

이 계층에서는 다음과 같은 Jakarta EE 사양이 지원됩니다.

  • 자카르타 JSON 처리 1.1
  • 자카르타 JSON 바인딩 1.0
  • Jakarta Servlet 4.0
  • Jakarta Expression Language 3.0
  • 자카르타 서버 페이지 2.3
  • 자카르타 표준 태그 라이브러리 1.2
  • 자카르타 동시성 1.1
  • 자카르타 주석 1.3
  • 자카르타 XML 바인딩 2.3
  • 다른 언어에 대한 자카르타 디버깅 지원 1.0
  • 자카르타 트랜잭션 1.3
  • Jakarta Connector API 1.7
jaxrs-server

이 계층은 다음 JBoss EAP 하위 시스템을 사용하여 datasources-web-server 계층을 향상시킵니다.

  • jaxrs
  • weld
  • jpa

또한 이 계층은 컨테이너에 로컬로 Infinispan 기반 두 번째 수준 엔터티 캐싱을 추가합니다.

다음 MicroProfile 기능이 이 계층에 포함되어 있습니다.

  • MicroProfile REST 클라이언트

다음 Jakarta EE 사양은 datasources-web-server 계층에서 지원되는 것 외에도 이 계층에서 지원됩니다.

  • 자카르타 컨텍스트 및 종속성 주입 2.0
  • Jakarta Bean Validation 2.0
  • Jakarta Interceptors 1.2
  • Jakarta RESTful Web Services 2.1
  • Jakarta Persistence 2.2
cloud-server

이 계층은 다음 JBoss EAP 하위 시스템을 사용하여 jaxrs-server 계층을 향상시킵니다.

  • resource-adapters
  • messaging-activemq (상호 브로커 메시징이 아닌 원격 브로커 메시징)

이 계층에서는 jaxrs-server 계층에 다음과 같은 관찰 기능도 추가합니다.

  • MicroProfile Health
  • MicroProfile Metrics
  • MicroProfile Config
  • MicroProfile OpenTracing

다음 Jakarta EE 사양은 jaxrs-server 계층에서 지원되는 것 외에도 이 계층에서 지원됩니다.

  • 자카르타 보안 1.0

6.1.2. 데코레이터 계층

데코레이터 계층은 단독으로 사용되지 않습니다. 추가 기능을 제공하도록 기본 계층을 사용하여 하나 이상의 데코레이터 계층을 구성할 수 있습니다.

ejb-lite

이 데코레이터 계층은 프로비저닝된 서버에 최소한의 Jakarta Enterprise Bean 구현을 추가합니다. 다음 지원은 이 계층에 포함되어 있지 않습니다.

  • IIOP 통합
  • MDB 인스턴스 풀
  • 원격 커넥터 리소스

이 계층은 부팅 가능한 JAR를 빌드할 때만 지원됩니다. S2I를 사용할 때는 이 계층이 지원되지 않습니다.

Jakarta Enterprise Beans

이 데코레이터 계층은 ejb-lite 계층을 확장합니다. 이 계층에서는 ejb-lite 계층에 포함된 기본 기능 외에도 프로비저닝된 서버에 다음과 같은 지원을 추가합니다.

  • MDB 인스턴스 풀
  • 원격 커넥터 리소스

MDB(메시지 기반 빈) 또는 Jakarta Enterprise Beans 원격 기능을 사용하거나 둘 다 사용하려면 이 계층을 사용합니다. 이러한 기능이 필요하지 않은 경우 ejb-lite 계층을 사용하십시오.

이 계층은 부팅 가능한 JAR를 빌드할 때만 지원됩니다. S2I를 사용할 때는 이 계층이 지원되지 않습니다.

ejb-local-cache

이 데코레이터 계층은 Jakarta Enterprise Bean에 대한 로컬 캐싱 지원을 프로비저닝된 서버에 추가합니다.

종속성 : ejb-lite 계층 또는 ejb 계층이 포함된 경우에만 이 계층을 포함할 수 있습니다 .

참고

이 계층은 ejb-dist-cache 계층과 호환되지 않습니다. ejb-dist-cache 계층을 포함하는 경우 ejb-local-cache 계층을 포함할 수 없습니다. 두 계층을 모두 포함하는 경우 결과 빌드에 예기치 않은 Jakarta Enterprise Beans 구성이 포함될 수 있습니다.

이 계층은 부팅 가능한 JAR를 빌드할 때만 지원됩니다. S2I를 사용할 때는 이 계층이 지원되지 않습니다.

ejb-dist-cache

이 데코레이터 계층은 Jakarta Enterprise Bean의 분산 캐싱 지원을 프로비저닝된 서버에 추가합니다.

종속성 : ejb-lite 계층 또는 ejb 계층이 포함된 경우에만 이 계층을 포함할 수 있습니다 .

참고

이 계층은 ejb-local-cache 계층과 호환되지 않습니다. ejb-dist-cache 계층을 포함하는 경우 ejb-local-cache 계층을 포함할 수 없습니다. 두 계층을 모두 포함하는 경우 결과 빌드로 인해 예기치 않은 구성이 발생할 수 있습니다.

이 계층은 부팅 가능한 JAR를 빌드할 때만 지원됩니다. S2I를 사용할 때는 이 계층이 지원되지 않습니다.

jdr

이 데코레이터 계층은 Red Hat에서 지원을 요청할 때 진단 데이터를 수집하기 위해 JBoss Diagnostic Reporting(jdr)하위 시스템을 추가합니다.

이 계층은 부팅 가능한 JAR를 빌드할 때만 지원됩니다. S2I를 사용할 때는 이 계층이 지원되지 않습니다.

자카르타 지속성

이 데코레이터 계층은 단일 노드 서버에 대한 지속성 기능을 추가합니다. 분산 캐싱은 서버가 클러스터를 구성할 수 있는 경우에만 작동합니다.

계층은 다음과 같은 지원을 통해 프로비저닝된 서버에 Hibernate 라이브러리를 추가합니다.

  • jpa 하위 시스템 구성
  • infinispan 하위 시스템 구성
  • 로컬 Hibernate 캐시 컨테이너
참고

이 계층은 jpa 배포 계층 과 호환되지 않습니다. jpa 계층을 포함하는 경우 jpa -distributed 계층을 포함할 수 없습니다.

이 계층은 부팅 가능한 JAR를 빌드할 때만 지원됩니다. S2I를 사용할 때는 이 계층이 지원되지 않습니다.

jpa-distributed

이 데코레이터 계층은 클러스터에서 작동하는 서버에 대한 지속성 기능을 추가합니다. 계층은 다음과 같은 지원을 통해 프로비저닝된 서버에 Hibernate 라이브러리를 추가합니다.

  • jpa 하위 시스템 구성
  • infinispan 하위 시스템 구성
  • 로컬 Hibernate 캐시 컨테이너
  • 잘못된 Hibernate 캐시 컨테이너 복제
  • jgroups 하위 시스템 구성
참고

이 레이어는 jpa 계층과 호환되지 않습니다. jpa 계층을 포함하는 경우 jpa -distributed 계층을 포함할 수 없습니다.

이 계층은 부팅 가능한 JAR를 빌드할 때만 지원됩니다. S2I를 사용할 때는 이 계층이 지원되지 않습니다.

Jakarta Server Faces

이 데코레이터 계층은 배포된 서버에 jsf 하위 시스템을 추가합니다.

이 계층은 부팅 가능한 JAR를 빌드할 때만 지원됩니다. S2I를 사용할 때는 이 계층이 지원되지 않습니다.

microprofile-platform

이 데코레이터 계층은 프로비저닝된 서버에 다음과 같은 MicroProfile 기능을 추가합니다.

  • MicroProfile Config
  • MicroProfile 오류 허용 오차
  • MicroProfile Health
  • MicroProfile JWT
  • MicroProfile Metrics
  • MicroProfile OpenAPI
  • MicroProfile OpenTracing
참고

이 계층에는 관찰 가능성 계층에도 포함된 MicroProfile 기능이 포함되어 있습니다. 이 계층을 포함하는 경우 관찰 기능 계층을 포함할 필요가 없습니다.

observability

이 데코레이터 계층은 프로비저닝된 서버에 다음과 같은 가시성 기능을 추가합니다.

  • MicroProfile Health
  • MicroProfile Metrics
  • MicroProfile Config
  • MicroProfile OpenTracing
참고

이 계층은 클라우드-서버 계층에 빌드됩니다. 이 계층을 cloud-server 계층에 추가할 필요가 없습니다.

remote-activemq

이 데코레이터 계층은 원격 ActiveMQ 브로커와 통신하여 배포된 서버에 메시징 지원을 통합하는 기능을 추가합니다.

풀링된 연결 팩토리 구성은 guest사용자암호 속성 값으로 지정합니다. CLI 스크립트를 사용하여 런타임에 이러한 값을 변경할 수 있습니다.

이 계층은 부팅 가능한 JAR를 빌드할 때만 지원됩니다. S2I를 사용할 때는 이 계층이 지원되지 않습니다.

sso

이 데코레이터 계층은 Red Hat Single Sign-On 통합을 프로비저닝된 서버에 추가합니다.

이 계층은 S2I를 사용하여 서버를 프로비저닝할 때만 사용해야 합니다.

web-console

이 데코레이터 계층은 관리 콘솔을 프로비저닝된 서버에 추가합니다.

이 계층은 부팅 가능한 JAR를 빌드할 때만 지원됩니다. S2I를 사용할 때는 이 계층이 지원되지 않습니다.

웹 클러스터

이 데코레이터 레이어는 클러스터 환경의 클러스터링에 적합한 데이터 세션 처리를 위해 로컬이 아닌 RuntimeClass 기반 컨테이너 웹 캐시를 구성하여 배포 가능한 웹 애플리케이션을 지원합니다.

web-passivation

이 데코레이터 레이어는 단일 노드 환경에 적합한 데이터 세션 처리에 적합한 데이터 세션의 로컬 pxe 기반 컨테이너 웹 캐시를 구성하여 배포 가능한 웹 애플리케이션을 지원합니다.

이 계층은 부팅 가능한 JAR를 빌드할 때만 지원됩니다. S2I를 사용할 때는 이 계층이 지원되지 않습니다.

webservices

이 계층은 프로비저닝된 서버에 웹 서비스 기능을 추가하여 자카르타 웹 서비스 배포를 지원합니다.

이 계층은 부팅 가능한 JAR를 빌드할 때만 지원됩니다. S2I를 사용할 때는 이 계층이 지원되지 않습니다.

7장. Red Hat CodeReady Studio에서 JBoss EAP에 대한 MicroProfile 애플리케이션 개발 활성화

CodeReady Studio에서 개발한 애플리케이션에 MicroProfile 기능을 통합하려면 CodeReady Studio에서 JBoss EAP에 대한 MicroProfile 지원을 활성화해야 합니다.

JBoss EAP 확장 팩은 MicroProfile을 지원합니다.

JBoss EAP 확장 팩은 JBoss EAP 7.2 이하에서 지원되지 않습니다.

JBoss EAP 확장 팩의 각 버전은 JBoss EAP의 특정 패치를 지원합니다. 자세한 내용은 JBoss EAP 확장 팩 지원 및 라이프사이클 정책 페이지를 참조하십시오.

중요

Openshift용 JBoss EAP XP 빠른 시작은 기술 프리뷰로만 제공됩니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원하지 않으며, 기능상 완전하지 않을 수 있어 프로덕션에 사용하지 않는 것이 좋습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

기술 프리뷰 기능에 대한 지원 범위에 대한 자세한 내용은 Red Hat 고객 포털의 기술 프리뷰 기능 지원 범위를 참조하십시오.

7.1. MicroProfile 기능을 사용하도록 CodeReady Studio 구성

JBoss EAP에서 MicroProfile 지원을 활성화하려면 JBoss EAP XP에 대한 새 런타임 서버를 등록한 다음 새 JBoss EAP 7.4 서버를 생성합니다.

서버에 MicroProfile 기능을 지원하는 것을 인식하는 데 도움이 되는 적절한 이름을 지정합니다.

이 서버는 이전에 설치한 런타임을 가리키고 standalone-microprofile.xml 구성 파일을 사용하는 새로 생성된 JBoss EAP XP 런타임을 사용합니다.

참고

Red Hat CodeReady Studio에서 Target 런타임7.4 또는 이후 런타임 버전으로 설정하면 프로젝트가 Jakarta EE 8 사양과 호환됩니다.

절차

  1. New Server (새 서버) 대화 상자에서 새 서버를 설정합니다.

    1. Select server type 목록에서 Red Hat JBoss Enterprise Application Platform 7.4 를 선택합니다.
    2. Server's host name(서버의 호스트 이름 ) 필드에 localhost 를 입력합니다.
    3. 서버 이름 필드에 JBoss EAP 7.4 XP 를 입력합니다.
    4. 다음을 클릭합니다.
  2. 새 서버를 구성합니다.

    1. Home 디렉토리 필드에서 기본 설정을 사용하지 않으려면 새 디렉터리를 지정합니다(예: home/myname/dev/microprofile/runtimes/jboss-eap-7.3 ).
    2. Execution Environment( 실행 환경)가 JavaSE-1.8 으로 설정되어 있는지 확인합니다.
    3. 선택 사항: Server 기본 디렉터리Configuration 파일 필드의 값을 변경합니다.
    4. 완료를 클릭합니다.

결과

이제 MicroProfile 기능을 사용하거나 JBoss EAP에 MicroProfile 빠른 시작 사용을 시작할 준비가 되었습니다.

7.2. CodeReady Studio에 MicroProfile 빠른 시작 사용

MicroProfile 빠른 시작을 활성화하면 설치된 서버에서 간단한 예제를 실행하고 테스트할 수 있습니다.

다음 예제에서는 다음과 같은 MicroProfile 기능을 보여줍니다.

  • MicroProfile Config
  • MicroProfile 오류 허용 오차
  • MicroProfile Health
  • MicroProfile JWT
  • MicroProfile Metrics
  • MicroProfile OpenAPI
  • MicroProfile OpenTracing
  • MicroProfile REST 클라이언트

절차

  1. Quickstart parent Artifact에서 pom.xml 파일을 가져옵니다.
  2. 사용 중인 빠른 시작에 환경 변수가 필요한 경우 환경 변수를 구성합니다.

    서버 개요 대화 상자에서 시작 구성에 환경 변수를 정의합니다.

    예를 들어 microprofile-opentracing 빠른 시작에서는 다음 환경 변수를 사용합니다.

    • JAEGER_REPORTER_LOG_SPANStrue로 설정됨
    • JAEGER_SAMPLER_PARAM1로 설정
    • JAEGER_SAMPLER_TYPEconst로 설정

추가 리소스

Microprofile 정보

JBoss Enterprise Application Platform 확장 팩 정보

Red Hat JBoss Enterprise Application Platform 확장 팩 지원 및 라이프 사이클 정책

8장. 부팅 가능한 JAR

JBoss EAP JAR Maven 플러그인을 사용하여 마이크로서비스 애플리케이션을 부팅 가능한 JAR로 구축하고 패키징할 수 있습니다. 그런 다음 JBoss EAP 베어 메탈 플랫폼 또는 JBoss EAP OpenShift 플랫폼에서 애플리케이션을 실행할 수 있습니다.

8.1. 부팅 가능한 JAR 정보

JBoss EAP JAR Maven 플러그인을 사용하여 마이크로서비스 애플리케이션을 부팅 가능한 JAR로 구축하고 패키징할 수 있습니다.

부팅 가능한 JAR에는 서버, 패키징된 애플리케이션 및 서버를 시작하는 데 필요한 런타임이 포함되어 있습니다.

JBoss EAP JAR Maven 플러그인은 서버의 크기 및 메모리 공간을 줄이기 위해 Galleon 트리밍 기능을 사용합니다. 따라서 필요한 기능을 제공하는 Galleon 계층만 포함하여 요구 사항에 따라 서버를 구성할 수 있습니다.

JBoss EAP JAR Maven 플러그인은 서버 구성을 사용자 지정하기 위해 JBoss EAP CLI 스크립트 파일의 실행을 지원합니다. CLI 스크립트에는 서버 구성을 위한 CLI 명령 목록이 포함되어 있습니다.

부팅 가능한 JAR은 다음과 같은 방식으로 표준 JBoss EAP 서버와 같습니다.

  • JBoss EAP 공통 관리 CLI 명령을 지원합니다.
  • JBoss EAP 관리 콘솔을 사용하여 관리할 수 있습니다.

부팅 가능한 JAR에서 서버를 패키징할 때 다음과 같은 제한 사항이 있습니다.

  • 서버 재시작이 필요한 CLI 관리 작업은 지원되지 않습니다.
  • 서버 관리와 관련된 서비스를 시작하는 모드인 admin-only 모드에서 서버를 다시 시작할 수 없습니다.
  • 서버를 종료하면 서버에 적용한 업데이트가 손실됩니다.

또한 빈 부팅 가능한 JAR을 프로비저닝할 수 있습니다. 이 JAR에는 서버만 포함되므로 서버를 재사용하여 다른 애플리케이션을 실행할 수 있습니다.

추가 리소스

기능 트리밍에 대한 자세한 내용은 기능 트리밍 을 참조하십시오.

8.2. JBoss EAP Maven 플러그인

JBoss EAP JAR Maven 플러그인을 사용하여 애플리케이션을 부팅 가능한 JAR로 구축할 수 있습니다.

/ga/org/wildfly/plugins/wildfly-jar-maven-plugin의 Index 에서 사용할 수 있는 Maven 리포지토리에서 최신 Maven 플러그인 버전을 검색할 수 있습니다.

Maven 프로젝트에서 src 디렉터리에는 애플리케이션을 빌드하는 데 필요한 모든 소스 파일이 포함되어 있습니다. JBoss EAP JAR Maven 플러그인이 부팅 가능한 JAR을 빌드한 후 생성된 JAR은 target/<application>-bootable.jar 에 있습니다.

JBoss EAP JAR Maven 플러그인은 다음 기능도 제공합니다.

  • 서버에 CLI 스크립트 명령을 적용합니다.
  • 서버 구성 파일을 사용자 지정하기 위해 org.jboss.eap:wildfly-galleon-pack Galleon 기능 팩과 일부 해당 계층을 사용합니다.
  • 키 저장소 파일과 같은 패키지 부팅 가능한 JAR에 추가 파일을 추가할 수 있습니다.
  • hollow 부팅 가능 JAR을 만드는 기능이 포함되어 있습니다. 즉, 애플리케이션이 포함되지 않은 부팅 가능한 JAR입니다.

JBoss EAP JAR Maven 플러그인을 사용하여 부팅 가능한 JAR을 생성한 후 다음 명령을 실행하여 애플리케이션을 시작할 수 있습니다. target/myapp-bootable.jar 를 부팅 가능한 JAR 경로로 바꿉니다. 예를 들면 다음과 같습니다.

$ java -jar target/myapp-bootable.jar
참고

지원되는 부팅 가능한 JAR 시작 명령 목록을 가져오려면 시작 명령의 끝에 --help 를 추가합니다. 예를 들어 java -jar target/myapp-bootable.jar --help 입니다.

추가 리소스

8.3. 부팅 가능한 JAR 인수

다음 표의 인수를 보고 부팅 가능 JAR과 함께 사용할 수 있는 지원되는 인수에 대해 알아봅니다.

표 8.1. 지원되는 부팅 가능한 JAR 실행 인수

인수설명

--help

지정된 명령에 대한 도움말 메시지를 표시하고 종료합니다.

--deployment=<path>

부팅 가능 JAR과 관련된 인수입니다. 서버에 배포하려는 애플리케이션을 포함하는 WAR, JAR, EAR 파일 또는 압축을 푼 디렉토리의 경로를 지정합니다.

--display-galleon-config

생성된 Galleon 구성 파일의 내용을 인쇄합니다.

--install-dir=<path>

기본적으로 JVM 설정은 부팅 가능한 JAR이 시작된 후 TEMP 디렉터리를 생성하는 데 사용됩니다. install -dir 인수를 사용하여 서버를 설치할 디렉터리를 지정할 수 있습니다.

-secmgr

보안 관리자가 설치된 서버를 실행합니다.

-b<interface>=<value>

시스템 속성 jboss.bind.address.<interface> 를 지정된 값으로 설정합니다. 예를 들면 bmanagement=IP_ADDRESS 입니다.

-b=<value>

공용 인터페이스에 대한 바인드 주소를 구성하는 데 사용되는 시스템 속성 jboss.bind.address 를 설정합니다. 값이 지정되지 않은 경우 기본값은 127.0.0.1입니다.

-D<name>[=<value>]

서버 런타임 시 서버에서 설정하는 시스템 속성을 지정합니다. 부팅 가능한 JAR JVM은 이러한 시스템 속성을 설정하지 않습니다.

--properties=<url>

지정된 URL에서 시스템 속성을 로드합니다.

-S<name>[=value]

보안 속성을 설정합니다.

-u=<value>

구성 파일의 socket-binding 요소에서 멀티캐스트 주소를 구성하는 데 사용되는 시스템 속성 jboss.default.multicast.address 를 설정합니다. 값이 지정되지 않은 경우 기본값은 230.0.0.4입니다.

--version

애플리케이션 서버 버전을 표시하고 종료합니다.

8.4. 부팅 가능한 JAR 서버의 Galleon 계층 지정

Galleon 계층을 지정하여 서버의 사용자 지정 구성을 빌드할 수 있습니다. 또한 서버에서 제외하려는 Galleon 계층을 지정할 수 있습니다.

단일 기능 팩을 참조하려면 <feature-pack-location> 요소를 사용하여 위치를 지정합니다. 다음 예제에서는 Maven 플러그인 구성 파일의 <feature -pack-location> 요소에서 org.jboss.eap:wildfly-galleon-pack:3.0.0.GA-redhat-00001 을 지정합니다.

<configuration>
  <feature-pack-location>org.jboss.eap:wildfly-galleon-pack:3.0.0.GA-redhat-00001</feature-pack-location>
</configuration>

둘 이상의 기능 팩을 참조해야 하는 경우 <feature-packs> 요소에 나열하십시오. 다음 예제에서는 <feature-packs> 요소에 Red Hat Single Sign- On 기능 팩을 추가하는 방법을 보여줍니다.

<configuration>
    <feature-packs>
         <feature-pack>
             <location>org.jboss.eap:wildfly-galleon-pack:3.0.0.GA-redhat-00001</location>
        </feature-pack>
        <feature-pack>
            <location>org.jboss.sso:keycloak-adapter-galleon-pack:9.0.10.redhat-00001</location>
        </feature-pack>
    </feature-packs>
</configuration>

여러 기능 팩의 Galleon 계층을 결합하여 필요한 기능을 제공하는 지원되는 Galleon 계층만 포함하도록 부팅 가능 JAR 서버를 구성할 수 있습니다.

참고

베어 메탈 플랫폼에서 구성 파일에 Galleon 계층을 지정하지 않으면 프로비저닝된 서버에 기본 standalone-microprofile.xml 구성과 동일한 구성이 포함됩니다.

OpenShift 플랫폼에서 플러그인 구성에 <cloud/> 구성 요소를 추가하고 구성 파일에 Galleon 계층을 지정하지 않은 경우 프로비저닝된 서버에는 클라우드 환경에 맞게 조정되는 구성이 포함되며 기본 standalone-microprofile-ha.xml 과 유사합니다.

사전 요구 사항

  • Maven이 설치되어 있어야 합니다.
  • MAVEN_PLUGIN_VERSION.X.GA.Final-redhat-00001과 같은 최신 Maven 플러그인 버전을 확인했습니다. 여기서 MAVEN_PLUGIN_VERSION 은 주 버전이며 X 는 마이크로 버전입니다. Index of /ga/org/wildfly/plugins/wildfly-jar-maven-plugin 을 참조하십시오.
  • 3.0.X.GA-redhat-BUILD_NUMBER와 같은 최신 Galleon 기능 팩 버전을 확인했습니다. 여기서 X 는 JBoss EAP XP의 마이크로 버전이며, BUILD_NUMBER 는 Galleon 기능 팩의 빌드 번호입니다. XBUILD_NUMBER 는 JBoss EAP XP 3.0.0 제품 라이프사이클 동안 발전할 수 있습니다. /ga/org/jboss/eap/wildfly-galleon-pack 인덱스 를 참조하십시오.
참고

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

  • Maven 플러그인 버전의 ${bootable.jar.maven.plugin.version}
  • Galleon 기능 팩 버전을 위한 ${JBoss.xp.galleon.feature.pack.version}.

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

<properties>
    <bootable.jar.maven.plugin.version>4.0.3.Final-redhat-00001</bootable.jar.maven.plugin.version>
    <jboss.xp.galleon.feature.pack.version>3.0.0.GA-redhat-00001</jboss.xp.galleon.feature.pack.version>
</properties>

절차

  1. 애플리케이션을 실행하는 데 필요한 기능을 제공하는 지원되는 JBoss EAP Galleon 계층을 식별합니다.
  2. Maven 프로젝트 pom.xml 파일의 <plugin> 요소에서 JBoss EAP 기능 팩 위치를 참조합니다. 다음 예에 설명된 대로 Maven 플러그인의 최신 버전과 최신 버전의 org.jboss.eap:wildfly-galleon-pack Galleon 기능 팩을 지정해야 합니다. 다음 예제는 jaxrs-server 기본 계층 및 jpa 배포 계층을 포함하는 단일 기능 팩의 포함도 표시합니다. jaxrs-server 기본 계층은 서버에 대한 추가 지원을 제공합니다.

    <plugins>
          <plugin>
                <groupId>org.wildfly.plugins</groupId>
                 <artifactId>wildfly-jar-maven-plugin</artifactId>
                 <version>${bootable.jar.maven.plugin.version}</version>
                <configuration>
                     <feature-pack-location>org.jboss.eap:wildfly-galleon-pack:${jboss.xp.galleon.feature.pack.version}</feature-pack-location>
                     <layers>
                         <layer>jaxrs-server</layer>
                         <layer>jpa-distributed</layer>
                     </layers>
                     <excluded-layers>
                         <layer>jpa</layer>
                     </excluded-layers>
                     ...
    </plugins>

    이 예에서는 프로젝트에서 jpa 계층 제외도 보여줍니다.

    참고

    프로젝트에 jpa-distributed 계층을 포함하는 경우 jaxrs-server 계층에서 jpa 계층을 제외해야 합니다. jpa 계층은 로컬 infinispan hibernate 캐시를 구성하고 jpa-distributed 계층은 원격 infinispan hibernate 캐시를 구성합니다.

추가 리소스

8.5. JBoss EAP 베어 메탈 플랫폼에서 부팅 가능한 JAR 사용

JBoss EAP 베어 메탈 플랫폼에서 부팅 가능한 JAR로 애플리케이션을 패키징할 수 있습니다.

부팅 가능한 JAR에는 서버, 패키징된 애플리케이션 및 서버를 시작하는 데 필요한 런타임이 포함되어 있습니다.

이 절차에서는 JBoss EAP JAR Maven 플러그인을 사용하여 MicroProfile Config 마이크로 서비스를 부팅 가능한 JAR로 패키징하는 방법을 설명합니다. MicroProfile Config development 를 참조하십시오.

CLI 스크립트를 사용하여 부팅 가능한 JAR을 패키징하는 동안 서버를 구성할 수 있습니다.

중요

부팅 가능 JAR 내에 패키징해야 하는 웹 애플리케이션을 구축할 때 pom.xml 파일의 <packaging> 요소에서 war 를 지정해야 합니다. 예를 들면 다음과 같습니다.

<packaging>war</packaging>

이 값은 기본 JAR 파일이 아니라 빌드 애플리케이션을 WAR 파일로 패키징하는 데 필요합니다.

상용 부팅 가능 JAR을 빌드하는 데만 사용되는 Maven 프로젝트에서 패키징 값을 pom 으로 설정합니다. 예를 들면 다음과 같습니다.

<packaging>pom</packaging>

Maven 프로젝트에 대해 부팅 가능 JAR을 빌드할 때 pom 패키징을 사용하는 것은 허용되지 않습니다. war 와 같은 모든 유형의 패키징의 <hollow-jar> 요소에 true 를 지정하여 하나를 생성할 수 있습니다. JBoss EAP 베어 메탈 플랫폼에서 사용할 수 있는 부팅 가능한 JAR 생성을 참조하십시오.

사전 요구 사항

  • MAVEN_PLUGIN_VERSION.X.GA.Final-redhat-00001과 같은 최신 Maven 플러그인 버전을 확인했습니다. 여기서 MAVEN_PLUGIN_VERSION 은 주 버전이며 X 는 마이크로 버전입니다. Index of /ga/org/wildfly/plugins/wildfly-jar-maven-plugin 을 참조하십시오.
  • 3.0.X.GA-redhat-BUILD_NUMBER와 같은 최신 Galleon 기능 팩 버전을 확인했습니다. 여기서 X 는 JBoss EAP XP의 마이크로 버전이며, BUILD_NUMBER 는 Galleon 기능 팩의 빌드 번호입니다. XBUILD_NUMBER 는 JBoss EAP XP 3.0.0 제품 라이프사이클 동안 발전할 수 있습니다. /ga/org/jboss/eap/wildfly-galleon-pack 인덱스 를 참조하십시오.
  • Maven 프로젝트를 생성하고, 상위 종속성을 설정하며, MicroProfile 애플리케이션을 생성하기 위한 종속성을 추가했습니다. MicroProfile Config development 를 참조하십시오.
참고

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

  • Maven 플러그인 버전의 ${bootable.jar.maven.plugin.version}
  • Galleon 기능 팩 버전을 위한 ${JBoss.xp.galleon.feature.pack.version}.

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

<properties>
    <bootable.jar.maven.plugin.version>4.0.3.Final-redhat-00001</bootable.jar.maven.plugin.version>
    <jboss.xp.galleon.feature.pack.version>3.0.0.GA-redhat-00001</jboss.xp.galleon.feature.pack.version>
</properties>

절차

  1. pom.xml 파일의 <build> 요소에 다음 내용을 추가합니다. Maven 플러그인의 최신 버전과 최신 버전의 org.jboss.eap:wildfly-galleon-pack Galleon 기능 팩을 지정해야 합니다. 예를 들면 다음과 같습니다.

    <plugins>
        <plugin>
            <groupId>org.wildfly.plugins</groupId>
            <artifactId>wildfly-jar-maven-plugin</artifactId>
            <version>${bootable.jar.maven.plugin.version}</version>
            <configuration>
                 <feature-pack-location>org.jboss.eap:wildfly-galleon-pack:${jboss.xp.galleon.feature.pack.version}</feature-pack-location>
                <layers>
                    <layer>jaxrs-server</layer>
                    <layer>microprofile-platform</layer>
                </layers>
             </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>package</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    참고

    pom.xml 파일에 Galleon 계층을 지정하지 않으면 부팅 가능한 JAR 서버에는 standalone-microprofile.xml 구성과 동일한 구성이 포함되어 있습니다.

  2. 애플리케이션을 부팅 가능한 JAR로 패키징합니다.

    $ mvn package
  3. 애플리케이션을 시작합니다.

    $ NAME="foo" java -jar target/microprofile-config-bootable.jar
    참고

    이 예제에서는 NAME 을 환경 변수로 사용하지만 기본값 인jim 을 사용하도록 선택할 수 있습니다.

    참고

    지원되는 부팅 가능한 JAR 인수 목록을 보려면 java -jar target/microprofile-config-bootable.jar 명령의 끝에 --help 를 추가합니다.

  4. MicroProfile Config 애플리케이션에 액세스하려면 웹 브라우저에서 다음 URL을 지정합니다.

    http://localhost:8080/config/json
  5. 검증: 터미널에서 다음 명령을 실행하여 애플리케이션이 제대로 작동하는지 테스트합니다.

    curl http://localhost:8080/config/json

    예상 출력은 다음과 같습니다.

    {"result":"Hello foo"}

추가 리소스

8.6. JBoss EAP 베어 메탈 플랫폼에서 부팅 가능한 JAR 생성

JBoss EAP 베어 메탈 플랫폼에서 부팅 가능 JAR로 애플리케이션을 패키징할 수 있습니다.

상용 부팅 가능한 JAR에는 JBoss EAP 서버만 포함되어 있습니다. hollow 부팅 가능 JAR은 JBoss EAP JAR Maven 플러그인에 의해 패키지됩니다. 애플리케이션은 서버 런타임에 제공됩니다. hollow 부팅 가능 JAR은 다른 애플리케이션의 서버 구성을 다시 사용해야 하는 경우에 유용합니다.

사전 요구 사항

참고

절차에 표시된 예제에서는 Galleon 기능 팩 버전에 ${jboss.xp.galleon.feature.pack.version} 을 지정하지만 프로젝트에서 속성을 설정해야 합니다. 예를 들면 다음과 같습니다.

<properties>
    <jboss.xp.galleon.feature.pack.version>3.0.0.GA-redhat-00001</jboss.xp.galleon.feature.pack.version>
</properties>

절차

  1. 상용 부팅 가능 JAR을 빌드하려면 프로젝트 pom.xml 파일에서 <hollow-jar> 플러그인 구성 요소를 true로 설정해야 합니다. 예를 들면 다음과 같습니다.
<plugins>
        <plugin>
            ...
            <configuration>
                <!-- This example configuration does not show a complete plug-in configuration -->
                 ...
                <feature-pack-location>org.jboss.eap:wildfly-galleon-pack:${jboss.xp.galleon.feature.pack.version}</feature-pack-location>
                 <hollow-jar>true</hollow-jar>
            </configuration>
         </plugin>
</plugins>
참고

<hollow-jar> 요소에 true 를 지정하면 JBoss EAP JAR Maven 플러그인은 JAR에 애플리케이션을 포함하지 않습니다.

  1. 빈 부팅 가능한 JAR을 빌드합니다.

    $ mvn clean package
  2. hollow 부팅 가능한 JAR을 실행합니다.

    $ java -jar target/microprofile-config-bootable.jar --deployment=target/microprofile-config.war
    중요

    서버에 배포할 WAR 파일의 경로를 지정하려면 다음 인수를 사용합니다. 여기서 <PATH_NAME> 은 배포 경로입니다.

    --deployment=<PATH_NAME>
  3. 애플리케이션에 액세스합니다.

    $ curl http://localhost:8080/microprofile-config/config/json
    참고

    루트 디렉터리에 웹 애플리케이션을 등록하려면 애플리케이션 이름을 ROOT.war 로 지정합니다.

추가 리소스

8.7. CLI 스크립트

CLI 스크립트를 생성하여 부팅 가능한 JAR을 패키징하는 동안 서버를 구성할 수 있습니다.

CLI 스크립트는 추가 서버 구성을 적용하는 데 사용할 수 있는 일련의 CLI 명령을 포함하는 텍스트 파일입니다. 예를 들어 스크립트를 생성하여 로깅 하위 시스템에 새 로거를 추가할 수 있습니다.

CLI 스크립트에서 더 복잡한 작업을 지정할 수도 있습니다. 예를 들어 보안 관리 작업을 단일 명령으로 그룹화하여 관리 HTTP 엔드포인트에 대한 HTTP 인증을 활성화할 수 있습니다.

참고

애플리케이션을 부팅 가능한 JAR로 패키징하기 전에 플러그인 구성의 <cli-session> 요소에 CLI 스크립트를 정의해야 합니다. 이렇게 하면 부팅 가능한 JAR을 패키징한 후에도 서버 구성 설정이 지속됩니다.

사전 정의된 Galleon 계층을 결합하여 애플리케이션을 배포하는 서버를 구성할 수 있지만 제한 사항이 있습니다. 예를 들어 부트 가능한 JAR을 패키징할 때 Galleon 계층을 사용하여 HTTPS undertow 리스너를 활성화할 수 없습니다. 대신 CLI 스크립트를 사용해야 합니다.

pom.xml 파일의 <cli-session> 요소에 CLI 스크립트를 정의해야 합니다. 다음 표는 CLI 세션 속성 유형을 보여줍니다.

표 8.2. CLI 스크립트 속성

인수설명

script-files

파일을 스크립팅할 경로 목록.

properties-file

속성 파일의 경로를 지정하는 선택적 속성입니다. 이 파일에는 ${my.prop} 구문을 사용하여 스크립트에서 참조할 수 있는 Java 속성이 나열됩니다. 다음 예제에서는 public inet-addressall.addresses:/interface=public:write-attribute(name=inet-address,value=${all.addresses}) 값으로 설정합니다.

resolve-expressions

부울 값이 포함된 선택적 속성입니다. 작업 요청을 서버로 보내기 전에 시스템 속성 또는 표현식을 해석할지 여부를 나타냅니다. 기본값은 true 입니다.

참고
  • CLI 스크립트는 pom.xml 파일의 <cli-session> 요소에 정의된 순서대로 시작됩니다.
  • JBoss EAP JAR Maven 플러그인은 각 CLI 세션에 대해 포함된 서버를 시작합니다. 따라서 CLI 스크립트가 포함된 서버를 시작하거나 중지할 필요가 없습니다.

8.8. JBoss EAP OpenShift 플랫폼에서 부팅 가능한 JAR 사용

애플리케이션을 부팅 가능한 JAR로 패키징한 후 JBoss EAP OpenShift 플랫폼에서 애플리케이션을 실행할 수 있습니다.

중요

OpenShift에서는 부팅 가능한 JAR과 함께 EAP Operator 자동 트랜잭션 복구 기능을 사용할 수 없습니다. 이 기술 제한 사항에 대한 수정 사항은 향후 JBoss EAP XP 3.0.0 패치 릴리스에 대해 계획되어 있습니다.

사전 요구 사항

  • MicroProfile Config 개발을 위한 Maven 프로젝트를 생성했습니다.
  • MAVEN_PLUGIN_VERSION.X.GA.Final-redhat-00001과 같은 최신 Maven 플러그인 버전을 확인했습니다. 여기서 MAVEN_PLUGIN_VERSION 은 주 버전이며 X 는 마이크로 버전입니다. Index of /ga/org/wildfly/plugins/wildfly-jar-maven-plugin 을 참조하십시오.
  • 3.0.X.GA-redhat-BUILD_NUMBER와 같은 최신 Galleon 기능 팩 버전을 확인했습니다. 여기서 X 는 JBoss EAP XP 3의 마이크로 버전이고, BUILD_NUMBER 는 Galleon 기능 팩의 빌드 번호입니다. XBUILD_NUMBER 는 JBoss EAP XP 3.0.0 제품 라이프사이클 동안 발전할 수 있습니다. /ga/org/jboss/eap/wildfly-galleon-pack 인덱스 를 참조하십시오.
참고

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

  • Maven 플러그인 버전의 ${bootable.jar.maven.plugin.version}
  • Galleon 기능 팩 버전을 위한 ${JBoss.xp.galleon.feature.pack.version}.

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

<properties>
    <bootable.jar.maven.plugin.version>4.0.3.Final-redhat-00001</bootable.jar.maven.plugin.version>
    <jboss.xp.galleon.feature.pack.version>3.0.0.GA-redhat-00001</jboss.xp.galleon.feature.pack.version>
</properties>

절차

  1. pom.xml 파일의 <build> 요소에 다음 내용을 추가합니다. Maven 플러그인의 최신 버전과 최신 버전의 org.jboss.eap:wildfly-galleon-pack Galleon 기능 팩을 지정해야 합니다. 예를 들면 다음과 같습니다.

    <plugins>
        <plugin>
            <groupId>org.wildfly.plugins</groupId>
            <artifactId>wildfly-jar-maven-plugin</artifactId>
            <version>${bootable.jar.maven.plugin.version}</version>
            <configuration>
                <feature-pack-location>org.jboss.eap:wildfly-galleon-pack:${jboss.xp.galleon.feature.pack.version}</feature-pack-location>
                <layers>
                    <layer>jaxrs-server</layer>
                    <layer>microprofile-platform</layer>
                </layers>
                <cloud/>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>package</goal>
                        </goals>
                    </execution>
                </executions>
        </plugin>
    </plugins>
    참고

    JBoss EAP Maven JAR 플러그인은 OpenShift 플랫폼을 선택했는지 확인할 수 있도록 플러그인 구성의 <configuration> 요소에 <cloud/ > 요소를 포함해야 합니다.

  2. 애플리케이션을 패키징합니다.

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

    $ oc new-project bootable-jar-project
  5. 다음 oc 명령을 입력하여 애플리케이션 이미지를 생성합니다.

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

    OpenShift는 부팅 가능한 JAR 구성 파일에 CLI 스크립트 명령 집합을 적용하여 클라우드 환경에 맞게 조정합니다. Maven 프로젝트 /target 디렉터리에서 bootable-jar-build-artifacts/generated-cli-script.txt 파일을 열어 이 스크립트에 액세스할 수 있습니다.

  6. 검증:

    다음 명령을 실행하여 사용 가능한 OpenShift 포드 목록을 확인하고 포드 빌드 상태를 확인합니다.

    $ oc get pods

    빌드된 애플리케이션 이미지를 확인합니다.

    $ oc get is microprofile-config-app

    출력에는 이름 및 이미지 리포지토리, 태그 등과 같은 빌드된 애플리케이션 이미지 세부 정보가 표시됩니다. 이 절차의 예에서 이미지 스트림 이름 및 태그 출력에 microprofile-config-app:latest 가 표시됩니다.

  7. 애플리케이션을 배포합니다.

    $ oc new-app microprofile-config-app
    
    $ oc expose svc/microprofile-config-app
    중요

    부팅 가능한 JAR에 시스템 속성을 제공하려면 JAVA_OPTS_APPEND 환경 변수를 사용해야 합니다. 다음 예제에서는 JAVA_OPTS_APPEND 환경 변수 사용을 보여줍니다.

    $ oc new-app <_IMAGESTREAM_> -e JAVA_OPTS_APPEND="-Xlog:gc*:file=/tmp/gc.log:time -Dwildfly.statistics-enabled=true"

    새 애플리케이션이 생성 및 시작됩니다. 애플리케이션 구성은 새 서비스로 노출됩니다.

  8. 검증: 터미널에서 다음 명령을 실행하여 애플리케이션이 제대로 작동하는지 테스트합니다.

    $ curl http://$(oc get route microprofile-config-app --template='{{ .spec.host }}')/config/json

    예상 출력 :

    {"result":"Hello jim"}

추가 리소스

8.9. OpenShift에 대해 부팅 가능한 JAR 구성

부팅 가능한 JAR을 사용하기 전에 독립 실행형 서버가 OpenShift용 JBoss EAP에서 올바르게 작동하는지 확인하도록 JVM 설정을 구성할 수 있습니다.

JAVA_OPTS_APPEND 환경 변수를 사용하여 JVM 설정을 구성합니다. JAVA_ARGS 명령을 사용하여 부팅 가능한 JAR에 인수를 제공합니다.

환경 변수를 사용하여 속성 값을 설정할 수 있습니다. 예를 들어 JAVA_OPTS_APPEND 환경 변수를 사용하여 -Dwildfly.statistics-enabled 속성을 true 로 설정할 수 있습니다.

JAVA_OPTS_APPEND="-Xlog:gc*:file=/tmp/gc.log:time -Dwildfly.statistics-enabled=true"

이제 서버에 통계가 활성화됩니다.

참고

부팅 가능한 JAR에 인수를 제공해야 하는 경우 JAVA_ARGS 환경 변수를 사용합니다.

OpenShift용 JBoss EAP는 JDK 11 이미지를 제공합니다. 부팅 가능한 JAR과 연결된 애플리케이션을 실행하려면 먼저 최신 OpenJDK 11 이미지 스트림 태그 및 이미지 정보를 OpenShift 프로젝트로 가져와야 합니다. 그런 다음 환경 변수를 사용하여 가져온 이미지에서 JVM을 구성할 수 있습니다.

OpenShift S2I 이미지에 대해 JBoss EAP에 사용된 JVM을 구성하는 데 동일한 구성 옵션을 적용할 수 있지만 다음과 같은 차이점이 있습니다.

  • 선택 사항: X log 기능은 사용할 수 없지만 -Xlog:gc 를 활성화하여 가비지 컬렉션 로깅을 설정할 수 있습니다. 예를 들면 다음과 같습니다. JAVA_OPTS_APPEND="-Xlog:gc*:file=/tmp/gc.log:time".
  • 초기 메타 공간 크기를 늘리려면 GC_METASPACE_SIZE 환경 변수를 설정할 수 있습니다. 메타데이터 용량 성능을 최적화하려면 값을 96 으로 설정합니다.
  • GC_MAX_METASPACE_SIZE 의 기본값은 100 으로 설정되지만 가비지 컬렉션 후 최상의 메타데이터 용량의 경우 256 이상으로 설정해야 합니다.
  • 임의 파일 생성 향상을 위해 JAVA_OPTS_APPEND 환경 변수를 사용하여 java.security.egd 속성을 -Djava.security.egd=file:/dev/urandom 으로 설정합니다.

이러한 구성은 가져온 OpenJDK 11 이미지에서 실행할 때 JVM의 메모리 설정 및 가비지 수집 기능을 향상시킵니다.

8.10. OpenShift에서 애플리케이션에서 ConfigMap 사용

OpenShift의 경우 배포 컨트롤러(dc)를 사용하여 애플리케이션을 실행하는 데 사용되는 포드에 configmap을 마운트할 수 있습니다.

ConfigMap 은 제한되지 않은 데이터를 키-값 쌍에 저장하는 데 사용되는 OpenShift 리소스입니다.

microprofile-platform Galleon 계층을 지정하여 microprofile-config-smallrye 하위 시스템 및 서버 구성 파일에 대한 확장 기능을 추가한 후 CLI 스크립트를 사용하여 서버 구성에 새 ConfigSource 를 추가할 수 있습니다. Maven 프로젝트의 루트 디렉터리에 있는 /scripts 디렉터리와 같은 액세스 가능한 디렉터리에 CLI 스크립트를 저장할 수 있습니다.

MicroProfile 구성 기능은 SmallRœ Config 구성 요소를 사용하여 JBoss EAP에서 구현되며 microprofile-config-smallrye 하위 시스템에서 제공합니다. 이 하위 시스템은 microprofile-platform Galleon 계층에 포함되어 있습니다.

사전 요구 사항

  • Maven을 설치했습니다.
  • JBoss EAP Maven 리포지토리를 구성했습니다.
  • 애플리케이션을 부팅 가능한 JAR로 패키징했으며 JBoss EAP OpenShift 플랫폼에서 애플리케이션을 실행할 수 있습니다. OpenShift 플랫폼에서 부팅 가능한 JAR로 애플리케이션을 빌드하는 방법에 대한 자세한 내용은 JBoss EAP OpenShift 플랫폼에서 부팅 가능한 JAR 사용을 참조하십시오.

절차

  1. 프로젝트의 루트 디렉터리에 scripts 라는 디렉터리를 생성합니다. 예를 들면 다음과 같습니다.

    $ mkdir scripts
  2. cli.properties 파일을 만들고 파일을 /scripts 디렉토리에 저장합니다. 이 파일에 config.pathconfig.ordinal 시스템 속성을 정의합니다. 예를 들면 다음과 같습니다.

    config.path=/etc/config
    config.ordinal=200
  3. mp-config.cli 와 같은 CLI 스크립트를 만들고 부팅 가능한 JAR의 액세스 가능한 디렉토리(예: /scripts 디렉터리)에 저장합니다. 다음 예제에서는 mp-config.cli 스크립트의 내용을 보여줍니다.

    # config map
    
    /subsystem=microprofile-config-smallrye/config-source=os-map:add(dir={path=${config.path}}, ordinal=${config.ordinal})

    mp-config.cli CLI 스크립트는 새 ConfigSource 를 생성하여 일반 및 경로 값을 속성 파일에서 검색할 수 있습니다.

  4. 스크립트를 프로젝트의 루트 디렉터리에 있는 /scripts 디렉터리에 저장합니다.
  5. 기존 플러그인 <configuration> 요소에 다음 구성 추출을 추가합니다.

    <cli-sessions>
        <cli-session>
            <properties-file>
                scripts/cli.properties
            </properties-file>
            <script-files>
                <script>scripts/mp-config.cli</script>
            </script-files>
        </cli-session>
    </cli-sessions>
  6. 애플리케이션을 패키징합니다.

    $ mvn package
  7. oc login 명령을 사용하여 OpenShift 인스턴스에 로그인합니다.
  8. 선택 사항: 이전에 target/openshift 하위 디렉터리를 생성하지 않은 경우 다음 명령을 실행하여 suddirectory를 생성해야 합니다.

    $ mkdir target/openshift
  9. 패키지된 애플리케이션을 생성된 하위 디렉터리에 복사합니다.

    $ cp target/microprofile-config-bootable.jar target/openshift
  10. target/openshift 하위 디렉터리를 바이너리 입력으로 사용하여 애플리케이션을 빌드합니다.

    $ oc start-build microprofile-config-app --from-dir target/openshift
    참고

    OpenShift는 부팅 가능한 JAR 구성 파일에 CLI 스크립트 명령 집합을 적용하여 클라우드 환경에 사용할 수 있도록 합니다. Maven 프로젝트 /target 디렉터리에서 bootable-jar-build-artifacts/generated-cli-script.txt 파일을 열어 이 스크립트에 액세스할 수 있습니다.

  11. ConfigMap 생성. 예를 들면 다음과 같습니다.

    $ oc create configmap microprofile-config-map --from-literal=name="Name comes from Openshift ConfigMap"
  12. dc를 사용하여 ConfigMap 을 애플리케이션에 마운트합니다. 예를 들면 다음과 같습니다.

    $ oc set volume deployments/microprofile-config-app --add --name=config-volume \
    --mount-path=/etc/config \
    --type=configmap \
    --configmap-name=microprofile-config-map

    oc set volume 명령을 실행하면 애플리케이션이 새 구성 설정으로 다시 배포됩니다.

  13. 출력을 테스트합니다.

    $ curl http://$(oc get route microprofile-config-app --template='{{ .spec.host }}')/config/json

    예상 출력은 다음과 같습니다.

    {"result":"Hello Name comes from Openshift ConfigMap"}

추가 리소스

8.11. 부팅 가능한 JAR Maven 프로젝트 생성

절차의 단계에 따라 예제 Maven 프로젝트를 생성합니다. 다음 절차를 수행하기 전에 Maven 프로젝트를 생성해야 합니다.

  • 부팅 가능한 JAR에 대한 JSON 로깅 활성화
  • 여러 부팅 가능한 JAR 인스턴스의 웹 세션 데이터 스토리지 활성화
  • CLI 스크립트를 사용하여 부팅 가능한 JAR에 대한 HTTP 인증 활성화
  • Red Hat Single Sign-On으로 JBoss EAP 부팅 가능한 JAR 애플리케이션 보안

프로젝트 pom.xml 파일에서 부팅 가능한 JAR를 빌드하는 데 필요한 프로젝트 아티팩트를 검색하도록 Maven을 구성할 수 있습니다.

절차

  1. Maven 프로젝트를 설정합니다.

    $ mvn archetype:generate \
    -DgroupId=GROUP_ID \
    -DartifactId=ARTIFACT_ID \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false

    여기서 GROUP_ID 는 프로젝트의 groupId 이고 ARTIFACT_ID 는 프로젝트의 artifactId 입니다.

  2. pom.xml 파일에서 원격 리포지토리에서 JBoss EAP BOM 파일을 검색하도록 Maven을 구성합니다.

    <repositories>
        <repository>
            <id>jboss</id>
            <url>https://maven.repository.redhat.com/ga</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
      <pluginRepository>
          <id>jboss</id>
            <url>https://maven.repository.redhat.com/ga</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
      </pluginRepository>
    </pluginRepositories>
  3. jboss-eap-jakartaee8 BOM에서 Jakarta EE 아티팩트의 버전을 자동으로 관리하도록 Maven을 구성하려면 프로젝트 pom.xml 파일의 <dependencyManagement> 섹션에 BOM을 추가합니다. 예를 들면 다음과 같습니다.

    <dependencyManagement>
      <dependencies>
        <dependency>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-eap-jakartaee8</artifactId>
            <version>7.3.4.GA</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
  4. 다음 예와 같이 BOM에서 관리하는 servlet API 아티팩트를 프로젝트 pom.xml 파일의 <dependency> 섹션에 추가합니다.

    <dependency>
        <groupId>org.jboss.spec.javax.servlet</groupId>
        <artifactId>jboss-servlet-api_4.0_spec</artifactId>
        <scope>provided</scope>
    </dependency>

추가 리소스

8.12. 부팅 가능한 JAR에 대한 JSON 로깅 활성화

CLI 스크립트로 서버 로깅 구성을 구성하여 부팅 가능한 JAR에 대해 JSON 로깅을 활성화할 수 있습니다. JSON 로깅을 활성화하면 JSON 포맷터를 사용하여 JSON 형식으로 로그 메시지를 볼 수 있습니다.

이 절차의 예제에서는 베어 메탈 플랫폼 및 OpenShift 플랫폼에서 부팅 가능한 JAR에 대해 JSON 로깅을 활성화하는 방법을 보여줍니다.

사전 요구 사항

  • MAVEN_PLUGIN_VERSION.X.GA.Final-redhat-00001과 같은 최신 Maven 플러그인 버전을 확인했습니다. 여기서 MAVEN_PLUGIN_VERSION 은 주 버전이며 X 는 마이크로 버전입니다. Index of /ga/org/wildfly/plugins/wildfly-jar-maven-plugin 을 참조하십시오.
  • 3.0.X.GA-redhat-BUILD_NUMBER와 같은 최신 Galleon 기능 팩 버전을 확인했습니다. 여기서 X 는 JBoss EAP XP의 마이너 버전이며, BUILD_NUMBER 는 Galleon 기능 팩의 빌드 번호입니다. XBUILD_NUMBER 는 JBoss EAP XP 3.0.0 제품 라이프사이클 동안 발전할 수 있습니다. /ga/org/jboss/eap/wildfly-galleon-pack 인덱스 를 참조하십시오.
  • Maven 프로젝트를 생성하고, 상위 종속성을 설정하며, 애플리케이션 생성을 위한 종속성을 추가했습니다. 부팅 가능한 JAR Maven 프로젝트 생성을 참조하십시오.

    중요

    Maven 프로젝트의 Maven 전형에서 프로젝트와 관련된 groupID 및 artifactID를 지정해야 합니다. 예를 들면 다음과 같습니다.

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

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

    • Maven 플러그인 버전의 ${bootable.jar.maven.plugin.version}
    • Galleon 기능 팩 버전을 위한 ${JBoss.xp.galleon.feature.pack.version}.

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

    <properties>
        <bootable.jar.maven.plugin.version>4.0.3.Final-redhat-00001</bootable.jar.maven.plugin.version>
        <jboss.xp.galleon.feature.pack.version>3.0.0.GA-redhat-00001</jboss.xp.galleon.feature.pack.version>
    </properties>

절차

  1. BOM에서 관리하는 JBoss Logging 및 Jakarta RESTful Web Services 종속성을 프로젝트 pom.xml 파일의 <dependencies> 섹션에 추가합니다. 예를 들면 다음과 같습니다.

    <dependencies>
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.spec.javax.ws.rs</groupId>
            <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
  2. pom.xml 파일의 <build> 요소에 다음 내용을 추가합니다. Maven 플러그인의 최신 버전과 최신 버전의 org.jboss.eap:wildfly-galleon-pack Galleon 기능 팩을 지정해야 합니다. 예를 들면 다음과 같습니다.

    <plugins>
        <plugin>
            <groupId>org.wildfly.plugins</groupId>
            <artifactId>wildfly-jar-maven-plugin</artifactId>
            <version>${bootable.jar.maven.plugin.version}</version>
            <configuration>
                <feature-packs>
                    <feature-pack>
                        <location>org.jboss.eap:wildfly-galleon-pack:${jboss.xp.galleon.feature.pack.version}</location>
                    </feature-pack>
                </feature-packs>
                <layers>
                    <layer>jaxrs-server</layer>
                 </layers>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>package</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
  3. Java 파일을 저장할 디렉터리를 생성합니다.

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

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

  4. 다음 내용으로 Java 파일 RestApplication.java 를 생성하고 APPLICATION_ROOT/src/main/java/com/example/logging/ 디렉터리에 파일을 저장합니다.

    package com.example.logging;
    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;
    
    @ApplicationPath("/")
    public class RestApplication extends Application {
    }
  5. 다음 내용으로 Java 파일 HelloWorldEndpoint.java 를 만들고 APPLICATION_ROOT/src/main/java/com/example/logging/ 디렉터리에 파일을 저장합니다.

    package com.example.logging;
    
    import javax.ws.rs.Path;
    import javax.ws.rs.core.Response;
    import javax.ws.rs.GET;
    import javax.ws.rs.Produces;
    
    import org.jboss.logging.Logger;
    @Path("/hello")
    public class HelloWorldEndpoint {
    
        private static Logger log = Logger.getLogger(HelloWorldEndpoint.class.getName());
        @GET
        @Produces("text/plain")
        public Response doGet() {
            log.debug("HelloWorldEndpoint.doGet called");
            return Response.ok("Hello from XP bootable jar!").build();
        }
    }
  6. logging.cli 와 같은 CLI 스크립트를 생성하고 부트 가능 JAR의 액세스 가능한 디렉터리에 저장합니다(예: APPLICATION_ROOT/scripts 디렉터리). 여기서 APPLICATION_ROOT 는 Maven 프로젝트의 루트 디렉터리입니다. 스크립트에는 다음 명령이 포함되어야 합니다.

    /subsystem=logging/logger=com.example.logging:add(level=ALL)
    /subsystem=logging/json-formatter=json-formatter:add(exception-output-type=formatted, pretty-print=false, meta-data={version="1"}, key-overrides={timestamp="@timestamp"})
    /subsystem=logging/console-handler=CONSOLE:write-attribute(name=level,value=ALL)
    /subsystem=logging/console-handler=CONSOLE:write-attribute(name=named-formatter, value=json-formatter)
  7. 플러그인 <configuration> 요소에 다음 구성 추출을 추가합니다.

    <cli-sessions>
            <cli-session>
            <script-files>
                <script>scripts/logging.cli</script>
            </script-files>
        </cli-session>
    </cli-sessions>

    이 예에서는 애플리케이션에 대한 JSON 로깅을 활성화하도록 서버 로깅 구성 파일을 수정하는 logging.cli CLI 스크립트를 보여줍니다.

  8. 애플리케이션을 부팅 가능한 JAR로 패키징합니다.

    $ mvn package
  9. 선택 사항: JBoss EAP 베어 메탈 플랫폼에서 애플리케이션을 실행하려면 다음 차이점을 사용하여 JBoss EAP 베어 메탈 플랫폼에서 부팅 가능한 JAR 사용에서 설명하는 단계를 따르십시오.

    1. 애플리케이션을 시작합니다.

      mvn wildfly-jar:run
    2. 검증: 브라우저에서 URL을 지정하여 애플리케이션에 액세스할 수 있습니다 . http://127.0.0.1:8080/hello.

      예상 출력 : 애플리케이션 콘솔에서 com.example.logging.HelloWorldEndpoint 디버그 추적을 포함하여 JSON 형식 로그를 볼 수 있습니다.

  10. 선택 사항: JBoss EAP OpenShift 플랫폼에서 애플리케이션을 실행하려면 다음 단계를 완료합니다.

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

      <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. 다음 oc 명령을 입력하여 애플리케이션 이미지를 생성합니다.

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

      $ oc new-app logging
      
      $ oc expose svc/logging
    7. 경로의 URL을 가져옵니다.

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

      http://ROUTE_NAME/hello
    9. 검증: 다음 명령을 실행하여 사용 가능한 OpenShift 포드 목록을 보고 포드 빌드 상태를 확인합니다.

      $ oc get pods

      애플리케이션의 실행 중인 포드 로그에 액세스합니다. 여기서 APP_POD_NAME 은 실행 중인 포드 로깅 애플리케이션의 이름입니다.

      $ oc logs APP_POD_NAME

      예상 결과 : 포드 로그는 JSON 형식이며 com.example.logging.HelloWorldEndpoint 디버그 추적을 포함합니다.

추가 리소스

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

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

사전 요구 사항

  • MAVEN_PLUGIN_VERSION.X.GA.Final-redhat-00001과 같은 최신 Maven 플러그인 버전을 확인했습니다. 여기서 MAVEN_PLUGIN_VERSION 은 주 버전이며 X 는 마이크로 버전입니다. Index of /ga/org/wildfly/plugins/wildfly-jar-maven-plugin 을 참조하십시오.
  • 3.0.X.GA-redhat-BUILD_NUMBER와 같은 최신 Galleon 기능 팩 버전을 확인했습니다. 여기서 X 는 JBoss EAP XP의 마이크로 버전이며, BUILD_NUMBER 는 Galleon 기능 팩의 빌드 번호입니다. XBUILD_NUMBER 는 JBoss EAP XP 3.0.0 제품 라이프사이클 동안 발전할 수 있습니다. /ga/org/jboss/eap/wildfly-galleon-pack 인덱스 를 참조하십시오.
  • Maven 프로젝트를 생성하고, 상위 종속성을 설정하며, 웹 클러스터 애플리케이션을 생성하기 위한 종속성을 추가했습니다. 부팅 가능한 JAR Maven 프로젝트 생성을 참조하십시오.

    중요

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

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

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

    • Maven 플러그인 버전의 ${bootable.jar.maven.plugin.version}
    • Galleon 기능 팩 버전을 위한 ${JBoss.xp.galleon.feature.pack.version}.

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

    <properties>
        <bootable.jar.maven.plugin.version>4.0.3.Final-redhat-00001</bootable.jar.maven.plugin.version>
        <jboss.xp.galleon.feature.pack.version>3.0.0.GA-redhat-00001</jboss.xp.galleon.feature.pack.version>
    </properties>

절차

  1. pom.xml 파일의 <build> 요소에 다음 내용을 추가합니다. Maven 플러그인의 최신 버전과 최신 버전의 org.jboss.eap:wildfly-galleon-pack Galleon 기능 팩을 지정해야 합니다. 예를 들면 다음과 같습니다.

    <plugins>
        <plugin>
            <groupId>org.wildfly.plugins</groupId>
            <artifactId>wildfly-jar-maven-plugin</artifactId>
            <version>${bootable.jar.maven.plugin.version}</version>
            <configuration>
                <feature-pack-location>org.jboss.eap:wildfly-galleon-pack:${jboss.xp.galleon.feature.pack.version}</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>
    참고

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

  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>

    <distributable/> 태그는 이 서블릿을 여러 서버에 배포할 수 있음을 나타냅니다.

  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 javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.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. 사용자는 node 1 인스턴스의 세션 ID 및 사용자 생성 시간과 일치해야 합니다.

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

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

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

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

      현재 OpenShift 네임스페이스의 다른 Pod를 보려면 KUBERNETES_NAMESPACE 환경 변수를 사용해야 합니다. 그렇지 않으면 서버에서 기본 네임스페이스에서 포드를 검색하려고 합니다.

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

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

      http://ROUTE_NAME/clustering

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

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

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

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

      http://ROUTE_NAME/clustering

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

추가 리소스

8.14. CLI 스크립트를 사용하여 부팅 가능한 JAR에 대한 HTTP 인증 활성화

CLI 스크립트를 사용하여 부팅 가능한 JAR에 대해 HTTP 인증을 활성화할 수 있습니다. 이 스크립트는 보안 영역과 보안 도메인을 서버에 추가합니다.

사전 요구 사항

  • MAVEN_PLUGIN_VERSION.X.GA.Final-redhat-00001과 같은 최신 Maven 플러그인 버전을 확인했습니다. 여기서 MAVEN_PLUGIN_VERSION 은 주 버전이며 X 는 마이크로 버전입니다. Index of /ga/org/wildfly/plugins/wildfly-jar-maven-plugin 을 참조하십시오.
  • 3.0.X.GA-redhat-BUILD_NUMBER와 같은 최신 Galleon 기능 팩 버전을 확인했습니다. 여기서 X 는 JBoss EAP XP의 마이크로 버전이며, BUILD_NUMBER 는 Galleon 기능 팩의 빌드 번호입니다. XBUILD_NUMBER 는 JBoss EAP XP 3.0.0 제품 라이프사이클 동안 발전할 수 있습니다. /ga/org/jboss/eap/wildfly-galleon-pack 인덱스 를 참조하십시오.
  • Maven 프로젝트를 생성하고, 상위 종속성을 설정하며, HTTP 인증이 필요한 애플리케이션을 생성하기 위한 종속성을 추가했습니다. 부팅 가능한 JAR Maven 프로젝트 생성을 참조하십시오.

    중요

    Maven 프로젝트를 설정할 때 Maven의 전형 구성에서 HTTP 인증 값을 지정해야 합니다. 예를 들면 다음과 같습니다.

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

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

    • Maven 플러그인 버전의 ${bootable.jar.maven.plugin.version}
    • Galleon 기능 팩 버전을 위한 ${JBoss.xp.galleon.feature.pack.version}.

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

    <properties>
        <bootable.jar.maven.plugin.version>4.0.3.Final-redhat-00001</bootable.jar.maven.plugin.version>
        <jboss.xp.galleon.feature.pack.version>3.0.0.GA-redhat-00001</jboss.xp.galleon.feature.pack.version>
    </properties>

절차

  1. pom.xml 파일의 <build> 요소에 다음 내용을 추가합니다. Maven 플러그인의 최신 버전과 최신 버전의 org.jboss.eap:wildfly-galleon-pack Galleon 기능 팩을 지정해야 합니다. 예를 들면 다음과 같습니다.

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

    이 예제에서는 elytron 하위 시스템을 포함하는 datasources-web-server 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">
    
        <login-config>
            <auth-method>BASIC</auth-method>
            <realm-name>Example Realm</realm-name>
        </login-config>
    
    </web-app>
  3. Java 파일을 저장할 디렉터리를 생성합니다.

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

    여기서 APPLICATION_ROOT 는 Maven 프로젝트의 루트 디렉터리입니다.

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

    package com.example.authentication;
    
    import javax.servlet.annotation.HttpMethodConstraint;
    import javax.servlet.annotation.ServletSecurity;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet(urlPatterns = "/hello")
    @ServletSecurity(httpMethodConstraints = { @HttpMethodConstraint(value = "GET", rolesAllowed = { "Users" }) })
    public class TestServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
            PrintWriter writer = resp.getWriter();
            writer.println("Hello " + req.getUserPrincipal().getName());
            writer.close();
        }
    
    }
  5. authentication.cli 와 같은 CLI 스크립트를 생성하고 부트 가능 JAR의 액세스 가능한 디렉터리에 APPLICATION_ROOT/scripts 디렉터리와 같은 액세스 가능한 디렉터리에 저장합니다. 스크립트에는 다음 명령이 포함되어야 합니다.

    /subsystem=elytron/properties-realm=bootable-realm:add(users-properties={relative-to=jboss.server.config.dir, path=bootable-users.properties, plain-text=true}, groups-properties={relative-to=jboss.server.config.dir, path=bootable-groups.properties})
    /subsystem=elytron/security-domain=BootableDomain:add(default-realm=bootable-realm, permission-mapper=default-permission-mapper, realms=[{realm=bootable-realm, role-decoder=groups-to-roles}])
    
    /subsystem=undertow/application-security-domain=other:write-attribute(name=security-domain, value=BootableDomain)
  6. 플러그인 <configuration> 요소에 다음 구성 추출을 추가합니다.

    <cli-sessions>
        <cli-session>
            <script-files>
                <script>scripts/authentication.cli</script>
            </script-files>
        </cli-session>
    </cli-sessions>

    이 예에서는 서버에 대해 정의된 보안 도메인에 default undertow 보안 도메인을 구성하는 authentication.cli CLI 스크립트를 보여줍니다.

  7. Maven 프로젝트의 루트 디렉터리에서 JBoss EAP JAR Maven 플러그인이 부팅 가능한 JAR에 추가하는 속성 파일을 저장할 디렉터리를 생성합니다.

    $ mkdir -p APPLICATION_ROOT/extra-content/standalone/configuration/

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

    이 디렉터리는 bootable-users.properties 및 bootable-groups.properties 파일과 같은 파일을 저장합니다.

    bootable-users.properties 파일에는 다음 내용이 포함되어 있습니다.

    testuser=bootable_password

    bootable-groups.properties 파일에는 다음 내용이 포함되어 있습니다.

    testuser=Users
  8. 다음 extra-content-content-dirs 요소를 기존 <configuration> 요소에 추가합니다.

    <extra-server-content-dirs>
                <extra-content>extra-content</extra-content>
    </extra-server-content-dirs>

    extra-content 디렉터리에는 속성 파일이 포함되어 있습니다.

  9. 애플리케이션을 부팅 가능한 JAR로 패키징합니다.

    $ mvn package
  10. 애플리케이션을 시작합니다.

    mvn wildfly-jar:run
  11. 서블릿을 호출하지만 인증 정보를 지정하지 마십시오.

    curl -v http://localhost:8080/hello

    예상 출력 :

    HTTP/1.1 401 Unauthorized
    ...
    WWW-Authenticate: Basic realm="Example Realm"
  12. 서버를 호출하고 자격 증명을 지정합니다. 예를 들면 다음과 같습니다.

    $ curl -v -u testuser:bootable_password http://localhost:8080/hello

    부팅 가능한 JAR에 대해 HTTP 인증이 활성화되었음을 나타내는 HTTP 200 상태가 반환됩니다. 예를 들면 다음과 같습니다.

    HTTP/1.1 200 OK
    ....
    Hello testuser

8.15. Red Hat Single Sign-On으로 JBoss EAP 부팅 가능한 JAR 애플리케이션 보안

Galleon keycloak-client-oidc 계층을 사용하여 Red Hat Single Sign-On 7.4 OpenID Connect 클라이언트 어댑터로 프로비저닝된 서버 버전을 설치할 수 있습니다.

keycloak-client-oidc 계층은 Maven 프로젝트에 Red Hat Single Sign-On OpenID Connect 클라이언트 어댑터를 제공합니다. 이 레이어는 keycloak-adapter-galleon-pack Red Hat Single Sign-On 기능 팩에 포함되어 있습니다.

keycloak-adapter-galleon-pack 기능 팩을 JBoss EAP Maven 플러그인 구성에 추가한 다음 keycloak-client-oidc 를 추가할 수 있습니다. 지원 구성을 방문하여 JBoss EAP와 호환되는 Red Hat Single Sign-On 클라이언트 어댑터를 볼 수 있습니다. Red Hat Single Sign-On 7.4 웹 페이지.

이 절차의 예제에서는 keycloak-client-oidc 계층에서 제공하는 JBoss EAP 기능을 사용하여 JBoss EAP 부팅 가능한 JAR을 보호하는 방법을 보여줍니다.

사전 요구 사항

  • MAVEN_PLUGIN_VERSION.X.GA.Final-redhat-00001과 같은 최신 Maven 플러그인 버전을 확인했습니다. 여기서 MAVEN_PLUGIN_VERSION 은 주 버전이며 X 는 마이크로 버전입니다. Index of /ga/org/wildfly/plugins/wildfly-jar-maven-plugin 을 참조하십시오.
  • 3.0.X.GA-redhat-BUILD_NUMBER와 같은 최신 Galleon 기능 팩 버전을 확인했습니다. 여기서 X 는 JBoss EAP XP의 마이크로 버전이며, BUILD_NUMBER 는 Galleon 기능 팩의 빌드 번호입니다. XBUILD_NUMBER 는 JBoss EAP XP 3.0.0 제품 라이프사이클 동안 발전할 수 있습니다. /ga/org/jboss/eap/wildfly-galleon-pack 인덱스 를 참조하십시오.
  • 최신 Red Hat SSO(Single Sign-On Galleon) 기능 팩 버전(예: org.jboss.sso:keycloak-adapter-galleon-pack:9.0.X:redhat-BUILD_NUMBER )을 확인했습니다. 여기서 X 는 애플리케이션을 보호하는 데 사용되는 Red Hat Single Sign-On 서버 릴리스의 마이크로 버전입니다. 그리고 BUILD_NUMBER 는 Red Hat Single Sign-On Galleon 기능 팩의 빌드 번호입니다. XBUILD_NUMBER 는 JBoss EAP XP 3.0.0 제품 라이프사이클 동안 발전할 수 있습니다. Index of /ga/org/jboss/sso/keycloak-adapter-galleon-pack 을 참조하십시오.
  • Maven 프로젝트를 생성하고, 상위 종속성을 설정하며, Red Hat Single Sign-On으로 보안하려는 애플리케이션을 생성하기 위한 종속성을 추가했습니다. 부팅 가능한 JAR Maven 프로젝트 생성을 참조하십시오.
  • 포트 8090에서 실행 중인 Red Hat Single Sign-On 서버가 있습니다. Red Hat Single Sign-On 서버 시작을 참조하십시오.
  • Red Hat Single Sign-On 관리 콘솔에 로그인하여 다음 메타데이터를 생성했습니다.

    • demo 라는 영역.
    • Users 라는 역할.
    • 사용자 및 암호. 사용자에게 Users 역할을 할당해야 합니다.
    • 루트 URL 이 있는 공용 클라이언트 웹 애플리케이션. 절차의 예제는 simple-webapp 을 웹 애플리케이션으로 정의하고 http://localhost:8080/simple-webapp/secured 루트 URL로 정의합니다.

      중요

      Maven 프로젝트를 설정할 때 Maven 전형에서 Red Hat Single Sign-On으로 보안하려는 애플리케이션의 값을 지정해야 합니다. 예를 들면 다음과 같습니다.

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

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

      • Maven 플러그인 버전의 ${bootable.jar.maven.plugin.version}
      • Galleon 기능 팩 버전을 위한 ${JBoss.xp.galleon.feature.pack.version}.
      • Red Hat Single Sign-On 기능 팩 버전용 ${Keycloak.feature.pack.version}

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

      <properties>
          <bootable.jar.maven.plugin.version>4.0.3.Final-redhat-00001</bootable.jar.maven.plugin.version>
          <jboss.xp.galleon.feature.pack.version>3.0.0.GA-redhat-00001</jboss.xp.galleon.feature.pack.version>
          <keycloak.feature.pack.version>9.0.10.redhat-00001</keycloak.feature.pack.version>
      </properties>

절차

  1. pom.xml 파일의 <build> 요소에 다음 내용을 추가합니다. Maven 플러그인의 최신 버전과 최신 버전의 org.jboss.eap:wildfly-galleon-pack Galleon 기능 팩을 지정해야 합니다. 예를 들면 다음과 같습니다.

    <plugins>
        <plugin>
            <groupId>org.wildfly.plugins</groupId>
            <artifactId>wildfly-jar-maven-plugin</artifactId>
            <version>${bootable.jar.maven.plugin.version}</version>
            <configuration>
                <feature-packs>
                    <feature-pack>
                        <location>org.jboss.eap:wildfly-galleon-pack:${jboss.xp.galleon.feature.pack.version}</location>
                    </feature-pack>
                    <feature-pack>
                        <location>org.jboss.sso:keycloak-adapter-galleon-pack:${keycloak.feature.pack.version}</location>
                    </feature-pack>
                </feature-packs>
                <layers>
                    <layer>datasources-web-server</layer>
                    <layer>keycloak-client-oidc</layer>
                </layers>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>package</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

    Maven 플러그인은 웹 애플리케이션 배포에 필요한 하위 시스템 및 모듈을 프로비저닝합니다.

    keycloak-client-oidc 계층은 keycloak 하위 시스템과 그 종속성을 사용하여 Red Hat Single Sign-On 인증에 대한 지원을 활성화하여 프로젝트에 Red Hat Single Sign-On 클라이언트 어댑터를 제공합니다. Red Hat Single Sign-On 클라이언트 어댑터는 Red Hat Single Sign-On을 사용하여 애플리케이션과 서비스를 보호하는 라이브러리입니다.

  2. 프로젝트 pom.xml 파일에서 플러그인 구성에서 <context-root>false로 설정합니다. 그러면 simple-webapp 리소스 경로에 애플리케이션이 등록됩니다. 기본적으로 WAR 파일은 root-context 경로 아래에 등록됩니다.

    <configuration>
        ...
         <context-root>false</context-root>
         ...
    </configuration>
  3. configure-oidc.cli 와 같은 CLI 스크립트를 생성하고 부트 가능 JAR의 액세스 가능한 디렉터리에 저장합니다(예: APPLICATION_ROOT/scripts 디렉터리). 여기서 APPLICATION_ROOT 는 Maven 프로젝트의 루트 디렉터리입니다. 스크립트에는 다음 예와 유사한 명령이 포함되어야 합니다.

    /subsystem=keycloak/secure-deployment=simple-webapp.war:add( \
        realm=demo, \
        resource=simple-webapp, \
        public-client=true, \
        auth-server-url=http://localhost:8090/auth/, \
        ssl-required=EXTERNAL)

    이 스크립트 예제에서는 keycloak 하위 시스템에서 secure-deployment=simple-webapp.war 리소스를 정의합니다. simple-webapp.war 리소스는 부팅 가능한 JAR에 배포된 WAR 파일의 이름입니다.

  4. 프로젝트 pom.xml 파일에서 기존 플러그인 <configuration> 요소에 다음 구성 추출을 추가합니다.

    <cli-sessions>
        <cli-session>
            <script-files>
                <script>scripts/configure-oidc.cli</script>
            </script-files>
        </cli-session>
    </cli-sessions>
  5. src/main/webapp/WEB-INF 디렉토리에서 web.xml 파일을 업데이트합니다. 예를 들면 다음과 같습니다.

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
       metadata-complete="false">
    
        <login-config>
            <auth-method>BASIC</auth-method>
            <realm-name>Simple Realm</realm-name>
        </login-config>
    
    </web-app>
  6. 선택 사항: 또는 7단계에서 9단계로 웹 애플리케이션의 WEB-INF 디렉터리에 keycloak.json 설명자를 추가하여 웹 애플리케이션에 서버 구성을 포함할 수 있습니다. 예를 들면 다음과 같습니다.

    {
        "realm" : "demo",
        "resource" : "simple-webapp",
        "public-client" : "true",
        "auth-server-url" : "http://localhost:8090/auth/",
        "ssl-required" : "EXTERNAL"
    }

    그런 다음 웹 애플리케이션의 <auth-method>KEYCLOAK 로 설정해야 합니다. 다음 예제 코드는 <auth-method> 를 설정하는 방법을 보여줍니다.

        <login-config>
            <auth-method>KEYCLOAK</auth-method>
            <realm-name>Simple Realm</realm-name>
        </login-config>
  7. 다음 콘텐츠를 사용하여 SecuredServlet.java 라는 Java 파일을 생성하고 APPLICATION_ROOT/src/main/java/com/example/securedservlet/ 디렉터리에 파일을 저장합니다.

    package com.example.securedservlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.security.Principal;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.HttpMethodConstraint;
    import javax.servlet.annotation.ServletSecurity;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/secured")
    @ServletSecurity(httpMethodConstraints = { @HttpMethodConstraint(value = "GET",
        rolesAllowed = { "Users" }) })
    public class SecuredServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            try (PrintWriter writer = resp.getWriter()) {
                writer.println("<html>");
                writer.println("<head><title>Secured Servlet</title></head>");
                writer.println("<body>");
                writer.println("<h1>Secured Servlet</h1>");
                writer.println("<p>");
                writer.print(" Current Principal '");
                Principal user = req.getUserPrincipal();
                writer.print(user != null ? user.getName() : "NO AUTHENTICATED USER");
                writer.print("'");
                writer.println("    </p>");
                writer.println("  </body>");
                writer.println("</html>");
            }
        }
    }
  8. 애플리케이션을 부팅 가능한 JAR로 패키징합니다.

    $ mvn package
  9. 애플리케이션을 시작합니다. 다음 예제에서는 지정된 부팅 가능 JAR 경로에서 simple-webapp 웹 애플리케이션을 시작합니다.

    $ java -jar target/simple-webapp-bootable.jar
  10. Red Hat Single Sign-On으로 보안된 웹 페이지에 액세스하려면 웹 브라우저에서 다음 URL을 지정합니다. 다음 예는 보안 simple-webapp 웹 애플리케이션의 URL을 보여줍니다.

    http://localhost:8080/simple-webapp/secured
  11. Red Hat Single Sign-On 영역에서 사용자로 로그인합니다.
  12. 검증: 웹 페이지에서 다음 출력을 표시하는지 확인합니다.

    Current Principal '<principal id>'

추가 리소스

8.16. dev 모드에서 부팅 가능한 JAR 패키징

JBoss EAP JAR Maven 플러그인 개발 목표는 애플리케이션 개발 프로세스를 개선하는 데 사용할 수 있는 dev 모드인 개발 모드를 제공합니다.

dev 모드에서 애플리케이션을 변경한 후 부팅 가능한 JAR을 다시 빌드할 필요가 없습니다.

이 절차의 워크플로는 dev 모드를 사용하여 부팅 가능한 JAR을 구성하는 방법을 보여줍니다.

사전 요구 사항

  • Maven이 설치되어 있어야 합니다.
  • Maven 프로젝트를 생성하고, 상위 종속성을 설정하며, MicroProfile 애플리케이션을 생성하기 위한 종속성을 추가했습니다. MicroProfile Config development 를 참조하십시오.
  • Maven 프로젝트 pom.xml 파일에 JBoss EAP JAR Maven 플러그인을 지정했습니다.

절차

  1. 개발 모드에서 부팅 가능한 JAR을 빌드하고 시작합니다.

    $ mvn wildfly-jar:dev

    dev 모드에서 서버 배포 스캐너는 대상/배포 디렉터리를 모니터링하도록 구성됩니다.

  2. 다음 명령을 사용하여 JBoss EAP Maven 플러그인을 요청하여 애플리케이션을 target/deployments 디렉터리에 복사하십시오.

    $ mvn package -Ddev

    부팅 가능 JAR 내부에 패키징된 서버는 target/deployments 디렉터리에 저장된 애플리케이션을 배포합니다.

  3. 애플리케이션 코드에서 코드를 수정합니다.
  4. mvn package -Ddev 를 사용하여 JBoss EAP Maven 플러그인에 대한 메시지를 표시하여 애플리케이션을 다시 빌드하고 다시 배포합니다.
  5. 서버를 중지합니다. 예를 들면 다음과 같습니다.

    $ mvn wildfly-jar:shutdown
  6. 애플리케이션 변경 사항을 완료한 후 애플리케이션을 부팅 가능한 JAR로 패키징합니다.

    $ mvn package

8.17. 부팅 가능한 JAR에 JBoss EAP 패치 적용

JBoss EAP 베어 메탈 플랫폼에서 CLI 스크립트를 사용하여 부팅 가능한 JAR에 패치를 설치할 수 있습니다.

CLI 스크립트는 부팅 가능한 JAR 빌드 중에 패치를 적용하도록 patch apply 명령을 발행합니다.

중요

부팅 가능한 JAR에 패치를 적용한 후에는 적용된 패치에서 롤백할 수 없습니다. 패치 없이 부팅 가능한 JAR를 다시 빌드해야 합니다.

또한 JBoss EAP JAR Maven 플러그인을 사용하여 부팅 가능한 JAR에 레거시 패치를 적용할 수 있습니다. 이 플러그인은 서버 패치에 사용되는 CLI 스크립트를 참조할 수 있는 <legacy-patch-cli-script> 구성 옵션을 제공합니다.

참고

<legacy -patch-cli-script>의 접두사 legacy- * 는 부팅 가능한 JAR에 아카이브 패치를 적용하는 것과 관련이 있습니다. 이 방법은 일반 JBoss EAP 배포에 패치를 적용하는 것과 유사합니다.

JBoss EAP JAR Maven 플러그인 구성에서 legacy-patch-cleanup 옵션을 사용하여 사용되지 않는 패치 컨텐츠를 제거하여 부팅 가능한 JAR의 메모리 풋프린트를 줄일 수 있습니다. 옵션은 사용되지 않은 모듈 종속성을 제거합니다. 이 옵션은 패치 구성 파일에서 기본적으로 false 로 설정됩니다.

legacy-patch-cleanup 옵션은 다음 패치 콘텐츠를 제거합니다.

  • <JBOSS_HOME>/.installation/patches 디렉터리입니다.
  • 기본 계층의 패치 모듈의 원래 위치.
  • 패치에서 추가한 미사용 모듈은 기존 모듈 그래프 또는 패치된 모듈 그래프에서 참조되지 않습니다.
  • . overlays 파일에 나열되지 않은 오버레이 디렉토리입니다.
중요

legacy-patch-clean-up 옵션 변수는 기술 프리뷰로 제공됩니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원하지 않으며, 기능상 완전하지 않을 수 있어 프로덕션에 사용하지 않는 것이 좋습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

참고

이 절차에 설명된 정보는 빈 부팅 가능 JAR과도 관련이 있습니다.

사전 요구 사항

  • Red Hat 고객 포털에 계정을 설정하셨습니다.
  • Product Downloads 페이지에서 다음 파일을 다운로드했습니다.

    • JBoss EAP 7.4.4 GA 패치
    • JBoss EAP XP 3.0.0 패치

절차

  1. 부팅 가능한 JAR에 적용할 레거시 패치를 정의하는 CLI 스크립트를 생성합니다. 스크립트에는 하나 이상의 패치 적용 명령이 포함되어야 합니다. Galleon 계층으로 잘린 서버를 패치할 때 --override-all 명령이 필요합니다. 예를 들면 다음과 같습니다.

    patch apply patch-oneoff1.zip --override-all
    
    patch apply patch-oneoff2.zip --override-all
    
    patch info --json-output
  2. pom.xml 파일의 <legacy-patch-cli-script> 요소에서 CLI 스크립트를 참조합니다.
  3. 부팅 가능한 JAR을 다시 구축합니다.

추가 리소스

9장. reference

9.1. MicroProfile 구성 참조

9.1.1. 기본 MicroProfile 구성 특성

MicroProfile Config 사양은 기본적으로 3개의 ConfigSources 를 정의합니다.

ConfigSources 는 서수에 따라 정렬됩니다. 이후 배포를 위해 구성을 덮어써야 하는 경우 상위 서수 ConfigSource 보다 낮은 서수적 ConfigSource 를 덮어씁니다.

표 9.1. 기본 MicroProfile 구성 특성

ConfigSource서수

시스템 속성

400

환경 변수

300

클래스 경로에 있는 속성 파일 META-INF/microprofile-config.properties

100

9.1.2. MicroProfile Config SmallRye ConfigSources

microprofile-config-smallrye 프로젝트는 기본 MicroProfile ConfigSources 외에도 사용할 수 있는 추가 ConfigSources 를 정의합니다.

표 9.2. 추가 MicroProfile 구성 특성

ConfigSource서수

하위 시스템의 config-source

100

디렉토리의 ConfigSource

100

클래스의 ConfigSource

100

이러한 ConfigSources 에 대해 명시적인 ordinal이 지정되지 않았습니다. MicroProfile Config 사양에 있는 기본 ordinal 값을 상속받습니다.

9.2. MicroProfile 오류 허용 오차 참조

9.2.1. MicroProfile Fault 허용 오차 구성 속성

smallrye Fault Tolerance 사양은 MicroProfile Fault Tolerance 사양에 정의된 속성 외에도 다음 속성을 정의합니다.

표 9.3. MicroProfile Fault 허용 오차 구성 속성

속성기본값설명

io.smallrye.faulttolerance.globalThreadPoolSize

100

내결함성 메커니즘에 사용되는 스레드 수입니다. 여기에는 bulkhead 스레드 풀이 포함되지 않습니다.

io.smallrye.faulttolerance.timeoutExecutorThreads

5

시간 제한 예약에 사용되는 스레드 풀의 크기입니다.

9.3. MicroProfile JWT 참조

9.3.1. MicroProfile Config JWT 표준 속성

microprofile-jwt-smallrye 하위 시스템은 다음과 같은 MicroProfile Config 표준 속성을 지원합니다.

표 9.4. MicroProfile Config JWT 표준 속성

속성Default설명

mp.jwt.verify.publickey

NONE

지원되는 형식 중 하나를 사용하여 인코딩된 공개 키의 문자열 표현. mp.jwt.verify.publickey.location 을 설정한 경우 설정하지 마십시오.

mp.jwt.verify.publickey.location

NONE

공개 키의 위치는 상대 경로 또는 URL일 수 있습니다. mp.jwt.verify.publickey 를 설정한 경우 설정하지 마십시오.

mp.jwt.verify.issuer

NONE

검증되는 JWT 토큰에 대한 예상되는 값은 입니다.

microprofile-config.properties 구성의 예:

mp.jwt.verify.publickey.location=META-INF/public.pem
mp.jwt.verify.issuer=jwt-issuer

9.4. MicroProfile OpenAPI 참조

9.4.1. MicroProfile OpenAPI 구성 속성

JBoss EAP는 표준 MicroProfile OpenAPI 구성 속성 외에도 다음과 같은 추가 MicroProfile OpenAPI 속성을 지원합니다. 이러한 속성은 글로벌 및 애플리케이션 범위 모두에서 적용할 수 있습니다.

표 9.5. JBoss EAP에서 MicroProfile OpenAPI 속성

속성기본값설명

mp.openapi.extensions.enabled

true

OpenAPI 엔드포인트 등록을 활성화하거나 비활성화합니다.

false로 설정하면 OpenAPI 문서 생성을 비활성화합니다. 구성 하위 시스템을 사용하거나 /META-INF/microprofile-config.properties 와 같은 구성 파일의 각 애플리케이션에 대해 값을 전역적으로 설정할 수 있습니다.

이 속성을 매개 변수화하여 프로덕션 또는 개발과 같은 다양한 환경에서 microprofile-openapi-smallrye 를 선택적으로 활성화하거나 비활성화할 수 있습니다.

이 속성을 사용하여 MicroProfile OpenAPI 모델을 생성해야 하는 가상 호스트와 연결된 애플리케이션을 제어할 수 있습니다.

mp.openapi.extensions.path

/openapi

이 속성을 사용하여 가상 호스트와 연결된 여러 애플리케이션에 대한 OpenAPI 문서를 생성할 수 있습니다.

동일한 가상 호스트와 연결된 각 애플리케이션에 고유한 mp.openapi.extensions.path 를 설정합니다.

mp.openapi.extensions.servers.relative

true

자동 생성된 서버 레코드가 절대 또는 OpenAPI 엔드포인트 위치와 상대적인지 여부를 나타냅니다.

루트가 아닌 컨텍스트 경로가 있으면 서버 레코드가 OpenAPI 문서 소비자가 OpenAPI 엔드포인트 호스트와 관련된 REST 서비스에 유효한 URL을 구성할 수 있는지 확인해야 합니다.

true 값은 서버 레코드가 OpenAPI 엔드포인트의 위치를 기준으로 함을 나타냅니다. 생성된 레코드에는 배포의 컨텍스트 경로가 포함됩니다.

false 로 설정하면 JBoss EAP XP에서 배포에 액세스할 수 있는 모든 프로토콜, 호스트 및 포트를 포함한 서버 레코드를 생성합니다.