JBoss EAP XP 3.0.0 사용
JBoss EAP XP 3.0.0과 함께 사용
초록
보다 포괄적 수용을 위한 오픈 소스 용어 교체
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.
Red Hat 문서에 대한 피드백 제공
문서에 대한 의견을 보내 주셔서 감사합니다. 피드백을 제공하기 위해 문서의 텍스트를 강조 표시하고 주석을 추가할 수 있습니다. Red Hat 설명서에 대한 피드백을 제출하는 방법을 알아보려면 절차의 단계를 따르십시오.
사전 요구 사항
- Red Hat 고객 포털에 로그인합니다.
- Red Hat 고객 포털에서 다중 페이지 HTML 형식으로 문서를 봅니다.
절차
피드백 (Fedback)을 클릭하여 기존 reader 주석을 확인합니다.
참고피드백 기능은 다중 페이지 HTML 형식으로만 활성화됩니다.
- 피드백을 제공할 문서의 섹션을 강조 표시합니다.
선택한 텍스트 옆에 표시되는 프롬프트 메뉴에서 Add Feedback(피드백 추가 )을 클릭합니다.
텍스트 상자가 페이지 오른쪽에 있는 피드백 섹션에 열립니다.
텍스트 상자에 피드백을 입력하고 Submit(제출 )을 클릭합니다.
설명서 문제가 생성되어 있습니다.
- 이 문제를 보려면 피드백 보기에서 문제 추적기 링크를 클릭합니다.
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.xml
및standalone-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.xml
및standalone-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 패치
-
절차
- 다운로드한 JBoss EAP 7.4 서버 아카이브 파일을 JBoss EAP 설치 경로로 추출합니다.
다음 명령을 사용하여 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 패치 스트림을 관리할 준비가 되었습니다.
선택 사항:
--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 기본 패치를 롤백할 수 있습니다.
추가 리소스
- JBoss EAP XP 패치 또는 JBoss EAP 7.4.x 기본 패치를 롤백하는 방법에 대한 자세한 내용은 관리 CLI를 사용하여 패치 롤백을 참조하십시오.
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
하위 시스템 외에도 JBoss EAP에서 MicroProfile JWT 통합을 제공합니다.
profile.jwt.auth.api 모듈에서는 microprofile-jwt
-smallrye
추가 리소스
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는 지정된 엔드포인트에 대한 추적을 명시적으로 비활성화하거나 활성화하는 방법을 정의합니다.
추가 리소스
- MicroProfile OpenTracing 사양에 대한 자세한 내용은 MicroProfile OpenTracing 설명서를 참조하십시오.
-
Tracer
인터페이스에 대한 자세한 내용은Tracer
javadoc 를 참조하십시오.
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_TYPE
을 const
로 설정하고 JAEGER_SAMPLER_PARAM
을 1
로 설정합니다.
추가 리소스
- SmallR OpenTracing 기능에 대한 자세한 내용은 SmallR OpenTracing 구성 요소를 참조하십시오.
- 기본 추적기에 대한 자세한 내용은 Jaeger Java 클라이언트를 참조하십시오.
-
Tracer 인터페이스에 대한 자세한 내용은 Tracer
javadoc 를 참조하십시오.
- 기본 추적기 및 자카르타 컨텍스트 및 종속성 주입 빈 추적에 대한 자세한 내용은 개발 가이드에서 Eclipse MicroProfile OpenTracing to Trace Requests 를 참조하십시오.
- Jaeger 클라이언트 구성에 대한 자세한 내용은 Jaeger 설명서를 참조하십시오.
- 유효한 시스템 속성에 대한 자세한 내용은 Jaeger 문서의 환경을 통한 구성을 참조하십시오.
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 기능을 전역적으로 활성화합니다.
절차
다음 관리 명령을 사용하여
microprofile-opentracing-smallrye
하위 시스템을 활성화합니다./subsystem=microprofile-opentracing-smallrye:add()
변경 사항을 적용하려면 서버를 다시 로드합니다.
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 기능을 전역적으로 비활성화할 수 있습니다.
절차
microprofile-opentracing-smallrye
하위 시스템을 제거합니다./subsystem=microprofile-opentracing-smallrye:remove()
변경 사항을 적용하려면 서버를 다시 로드합니다.
reload
3.1.3. microprofile-opentracing-smallrye
하위 시스템 추가
microprofile-opentracing-smallrye
하위 시스템을 서버 구성에 추가하여 활성화할 수 있습니다. 지정된 서버에 대해 MicroProfile OpenTracing 기능을 전역적으로 활성화하려면 관리 CLI에서 add
작업을 사용합니다.
절차
하위 시스템을 추가합니다.
/subsystem=microprofile-opentracing-smallrye:add()
변경 사항을 적용하려면 서버를 다시 로드합니다.
reload
3.1.4. Jaeger 설치
docker
를 사용하여 Jaeger를 설치합니다.
사전 요구 사항
-
Docker
가 설치되어 있습니다.
절차
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은 속성의 이름이고 파일 내용은 속성의 값입니다.
절차
파일을 저장하려는 디렉터리를 생성합니다.
$ mkdir -p ~/config/prop-files/
디렉터리로 이동합니다.
$ cd ~/config/prop-files/
속성
이름
값을 저장할 파일이름을
만듭니다.$ touch name
속성 값을 파일에 추가합니다.
$ echo "jim" > name
파일 이름이 특성이고 파일에서 속성 값을 포함하는 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 팩이 설치되어 있어야 합니다.
절차
다음 관리 CLI 명령을 사용하여 MicroProfile Fault Tolerance 확장을 추가합니다.
/extension=org.wildfly.extension.microprofile.fault-tolerance-smallrye:add
다음 managenent 명령을 사용하여
microprofile-fault-tolerance-smallrye
하위 시스템을 활성화합니다./subsystem=microprofile-fault-tolerance-smallrye:add
다음 관리 명령으로 서버를 다시 로드합니다.
reload
3.4. MicroProfile 상태 구성
3.4.1. 관리 CLI를 사용하여 상태 검사
관리 CLI를 사용하여 시스템 상태를 확인할 수 있습니다.
절차
상태를 검사합니다.
/subsystem=microprofile-health-smallrye:check { "outcome" => "success", "result" => { "status" => "UP", "checks" => [] } }
3.4.2. 관리 콘솔을 사용하여 상태 검사
관리 콘솔을 사용하여 시스템 상태를 확인할 수 있습니다.
검사 런타임 작업은 상태 점검 및 글로벌 결과를 부울 값으로 표시합니다.
절차
- Runtime(런타임 ) 탭으로 이동하여 서버를 선택합니다.
- Monitor 열에서 MicroProfile Health → View 를 클릭합니다.
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 상태에 대한 인증 활성화
액세스에 대한 인증이 필요하도록 상태
컨텍스트를 구성할 수 있습니다.
절차
microprofile
특성을-health-smallrye 하위 시스템에서 security-
enabledtrue
로 설정합니다./subsystem=microprofile-health-smallrye:write-attribute(name=security-enabled,value=true)
변경 사항을 적용하려면 서버를 다시 로드합니다.
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가 설치되어 있어야 합니다.
절차
JBoss EAP에서 MicroProfile JWT smallrye 확장을 활성화합니다.
/extension=org.wildfly.extension.microprofile.jwt-smallrye:add
microprofile-jwt-smallrye
하위 시스템을 활성화합니다./subsystem=microprofile-jwt-smallrye:add
서버를 다시 로드합니다.
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 엔드포인트 인증 활성화
사용자가 컨텍스트에 액세스할 수 있도록 지표
컨텍스트를 구성합니다. 이 구성은 지표
컨텍스트의 모든 하위 컨텍스트로 확장됩니다.
절차
microprofile
특성을-metrics-smallrye 하위 시스템에서 security-
enabledtrue
로 설정합니다./subsystem=microprofile-metrics-smallrye:write-attribute(name=security-enabled,value=true)
변경 사항을 적용하려면 서버를 다시 로드합니다.
reload
지표
엔드포인트에 대한 후속 시도는 인증 프롬프트가 됩니다.
3.6.4. 웹 서비스의 요청 수 얻기
요청 수 지표를 노출하는 웹 서비스의 요청 수를 가져옵니다.
다음 절차에서는 요청 수를 얻기 위해 웹 서비스로 helloworld-rs
빠른 시작을 사용합니다. 빠른 시작은 에서 빠른 시작 다운로드 jboss-eap-quickstarts 에서 사용할 수 있습니다.
사전 명령
- 웹 서비스는 요청 수를 노출합니다.
절차
undertow
하위 시스템에 대한 통계를 활성화합니다.통계가 활성화된 독립 실행형 서버를 시작합니다.
$ ./standalone.sh -Dwildfly.statistics-enabled=true
이미 실행 중인 서버의 경우
undertow
하위 시스템에 대한 통계를 활성화합니다./subsystem=undertow:write-attribute(name=statistics-enabled,value=true)
helloworld-rs
빠른 시작을 배포합니다.빠른 시작의 루트 디렉터리에서 Maven을 사용하여 웹 애플리케이션을 배포합니다.
$ mvn clean install wildfly:deploy
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
입니다.- 웹 브라우저에서 http://localhost:8080/helloworld-rs/ 에 있는 빠른 시작에 액세스하고 링크를 클릭합니다.
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
구성 파일을 업데이트할 수 있습니다.
절차
JBoss EAP에서 MicroProfile OpenAPI smallrye 확장을 활성화합니다.
/extension=org.wildfly.extension.microprofile.openapi-smallrye:add()
다음 관리 명령을 사용하여
microprofile-openapi-smallrye
하위 시스템을 활성화합니다./subsystem=microprofile-openapi-smallrye:add()
서버를 다시 로드합니다.
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 계약을 클라이언트에 사용할 수 있습니다.
절차
애플리케이션 소스 트리에 디렉터리를 생성합니다.
$ mkdir APPLICATION_ROOT/src/main/webapp/META-INF
APPLICATION_ROOT 는 애플리케이션에 대한
pom.xml
구성 파일이 포함된 디렉터리입니다.OpenAPI 엔드포인트를 쿼리하여 출력을 파일로 리디렉션합니다.
$ curl http://localhost:8080/openapi?format=JSON > src/main/webapp/META-INF/openapi.json
기본적으로 엔드포인트는 YAML 문서를 제공합니다.
format=JSON
은 JSON 문서가 반환되도록 지정합니다.OpenAPI 문서 모델을 처리할 때 주석 스캔을 건너뛰도록 애플리케이션을 구성합니다.
$ echo "mp.openapi.scan.disable=true" > APPLICATION_ROOT/src/main/webapp/META-INF/microprofile-config.properties
애플리케이션을 다시 빌드합니다.
$ mvn clean install
다음 관리 CLI 명령을 사용하여 애플리케이션을 다시 배포합니다.
애플리케이션 배포를 취소합니다.
undeploy microprofile-openapi.war
애플리케이션을 배포합니다.
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에서 사용할 수 있는 독립 실행형 구성 파일
설정 파일 | 목적 | 포함된 기능 | 제외된 기능 |
---|---|---|---|
| 독립 실행형 서버를 시작할 때 사용되는 기본 구성입니다. | 하위 시스템, 네트워킹, 배포, 소켓 바인딩 및 기타 구성 가능한 세부 정보를 포함하여 서버에 대한 정보를 포함합니다. | 메시징 또는 고가용성에 필요한 하위 시스템을 제외합니다. |
| 이 구성 파일은 MicroProfile을 사용하는 애플리케이션을 지원합니다. | 하위 시스템, 네트워킹, 배포, 소켓 바인딩 및 기타 구성 가능한 세부 정보를 포함하여 서버에 대한 정보를 포함합니다. | 다음 기능을 제외합니다.
|
|
기본 하위 시스템을 포함하고 고가용성을 위해 | 메시징에 필요한 하위 시스템을 제외합니다. | |
| 이 독립 실행형 파일은 MicroProfile을 사용하는 애플리케이션을 지원합니다. |
기본 하위 시스템 외에도 고가용성을 위한 | 메시징에 필요한 하위 시스템을 제외합니다. |
|
기본 하위 시스템 외에도 | ||
| 가능한 모든 하위 시스템에 대한 지원. | 기본 하위 시스템 외에도 메시징 및 고가용성에 대한 하위 시스템을 포함합니다. | |
| 기본 제공 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가 설치되어 있어야 합니다.
절차
다음 CLI 스크립트를 실행하여 기본
standalone.xml
서버 구성 파일을 업데이트합니다.$ EAP_HOME/bin/jboss-cli.sh --file=docs/examples/enable-microprofile.cli
다음 명령을 사용하여 기본
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>
- 이제 지정된 구성 파일에 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 리포지토리로 추출된 증분 아카이브 파일로 제공됩니다. 증분 아카이브 파일은 기존 파일을 덮어쓰거나 제거하지 않으므로 롤백 요구 사항이 없습니다.
사전 요구 사항
절차
- 브라우저를 열고 Red Hat 고객 포털에 로그인합니다.
- 페이지 상단의 메뉴에서 Downloads (다운로드)를 선택합니다.
- 목록에서 Red Hat JBoss Enterprise Application Platform 항목을 찾아 선택합니다.
- 제품 드롭다운 목록에서 JBoss EAP XP 를 선택합니다.
- Version (버전) 드롭다운 목록에서 2.0.0 을 선택합니다.
- Releases (릴리스) 탭을 클릭합니다.
- 목록에서 JBoss EAP XP 3.0.0 증분 Maven 리포지토리 를 찾은 다음 다운로드를 클릭합니다.
- 아카이브 파일을 로컬 디렉터리에 저장합니다.
추가 리소스
- 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 리포지토리를 다운로드했습니다.
절차
-
Red Hat JBoss Enterprise Application Platform 7.4.0.GA Maven 리포지토리의 경로를 찾습니다. 예를 들면
/path/to/repo/jboss-eap-7.3.0.GA-maven-repository/maven-repository/
입니다. 다운로드한 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_PATH 는 jboss-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 리포지토리가 됩니다.
추가 리소스
- JBoss EAP Maven 리포지토리의 URL을 확인하려면 JBoss EAP 개발 가이드에서 JBoss EAP Maven 리포지토리 의 URL 확인을 참조하십시오.
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 |
|
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 리포지토리를 적용했습니다.
절차
- 구성 방법을 선택하고 JBoss EAP MicroProfile Maven 리포지토리를 구성합니다.
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이 설치되어 있어야 합니다.
절차
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
구성 파일에 대한 디렉터리 구조가 생성됩니다.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>
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. Setprovided
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. Setprovided
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. Setprovided
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 애플리케이션을 생성하도록 구성됩니다.
절차
클래스 파일을 저장할 디렉터리를 생성합니다.
$ mkdir -p APPLICATION_ROOT/src/main/java/com/example/microprofile/config/
여기서
APPLICATION_ROOT
는 애플리케이션에 대한pom.xml
구성 파일이 포함된 디렉터리입니다.새 디렉터리로 이동합니다.
$ cd APPLICATION_ROOT/src/main/java/com/example/microprofile/config/
이 디렉터리에 설명된 모든 클래스 파일을 생성합니다.
다음 콘텐츠를 사용하여
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 애플리케이션으로 정의합니다.
다음 콘텐츠를 사용하여
HelloService.java
라는 클래스 파일을 만듭니다.package com.example.microprofile.config; public class HelloService { String createHelloMessage(String name){ return "Hello " + name; } }
다음 콘텐츠를 사용하여
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
이 반환됩니다.
src/main/webapp/WEB-INF/
디렉터리에beans.xml
이라는 빈 파일을 생성합니다.$ touch APPLICATION_ROOT/src/main/webapp/WEB-INF/beans.xml
여기서
APPLICATION_ROOT
는 애플리케이션에 대한pom.xml
구성 파일이 포함된 디렉터리입니다.애플리케이션의 루트 디렉터리로 이동합니다.
$ cd APPLICATION_ROOT
여기서
APPLICATION_ROOT
는 애플리케이션에 대한pom.xml
구성 파일이 포함된 디렉터리입니다.프로젝트를 빌드합니다.
$ mvn clean install wildfly:deploy
출력을 테스트합니다.
$ 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 팩이 설치되어 있어야 합니다.
절차
다음 관리 CLI 명령을 사용하여 MicroProfile Fault Tolerance 확장을 추가합니다.
/extension=org.wildfly.extension.microprofile.fault-tolerance-smallrye:add
다음 managenent 명령을 사용하여
microprofile-fault-tolerance-smallrye
하위 시스템을 활성화합니다./subsystem=microprofile-fault-tolerance-smallrye:add
다음 관리 명령으로 서버를 다시 로드합니다.
reload
4.3.2. MicroProfile Fault 허용 오차에 대한 Maven 프로젝트 구성
필요한 종속성과 MicroProfile Fault Tolerance 애플리케이션을 생성하는 디렉터리 구조를 사용하여 Maven 프로젝트를 생성합니다.
사전 요구 사항
- Maven이 설치되어 있어야 합니다.
절차
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
구성 파일의 디렉터리 구조를 생성합니다.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 버전으로 교체합니다.
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 종속성이 구성되었습니다.
절차
클래스 파일을 저장할 디렉터리를 생성합니다.
$ mkdir -p APPLICATION_ROOT/src/main/java/com/example/microprofile/faulttolerance
APPLICATION_ROOT 는 애플리케이션에 대한
pom.xml
구성 파일이 포함된 디렉터리입니다.새 디렉터리로 이동합니다.
$ cd APPLICATION_ROOT/src/main/java/com/example/microprofile/faulttolerance
다음 단계에 대해 새 디렉터리의 모든 클래스 파일을 만듭니다.
다음 콘텐츠를 사용하여
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; } }
다음 콘텐츠를 사용하여 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 { }
다음 콘텐츠를 사용하여 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()); } }
다음 콘텐츠를 사용하여 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)); } }
애플리케이션의 루트 디렉터리로 이동합니다.
$ cd APPLICATION_ROOT
다음 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가 설치되어 있어야 합니다.
절차
JBoss EAP에서 MicroProfile JWT smallrye 확장을 활성화합니다.
/extension=org.wildfly.extension.microprofile.jwt-smallrye:add
microprofile-jwt-smallrye
하위 시스템을 활성화합니다./subsystem=microprofile-jwt-smallrye:add
서버를 다시 로드합니다.
reload
microprofile-jwt-smallrye
하위 시스템이 활성화됩니다.
4.5.2. JWT 애플리케이션 개발을 위한 Maven 프로젝트 구성
JWT 애플리케이션 개발을 위한 디렉터리 구조 및 필수 종속성을 사용하여 Maven 프로젝트를 생성합니다.
사전 요구 사항
- Maven이 설치되어 있어야 합니다.
-
MicroProfile-jwt-smallrye
하위 시스템이 활성화되어 있습니다.
절차
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
구성 파일의 디렉터리 구조를 생성합니다.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 버전으로 교체합니다.
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 프로젝트는 올바른 종속성으로 구성됩니다.
절차
토큰 생성기를 생성합니다.
이 단계는 참조 역할을 합니다. 프로덕션 환경의 경우 Red Hat SSO와 같은 ID 공급자를 사용합니다.
생성기 유틸리티를 토큰화하기 위한
src/test/java
디렉토리를 생성하고 이 디렉토리로 이동합니다.$ mkdir -p src/test/java $ cd src/test/java
다음 콘텐츠를 사용하여 클래스 파일
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)); } }
다음 내용으로
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>
다음 콘텐츠를 사용하여
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 클레임을 정의합니다.클래스 파일
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가 활성화됩니다.다음 Maven 명령으로 애플리케이션을 컴파일합니다.
$ mvn package
토큰 생성기 유틸리티를 사용하여 JWT 토큰을 생성합니다.
$ mvn exec:java -Dexec.mainClass=org.wildfly.quickstarts.mpjwt.TokenUtil -Dexec.classpathScope=test -Dexec.args="testUser 2017-09-15 Echoer Subscriber"
다음 Maven 명령을 사용하여 애플리케이션을 빌드하고 배포합니다.
$ mvn package wildfly:deploy
애플리케이션을 테스트합니다.
전달자 토큰을 사용하여
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 지표 애플리케이션 생성
애플리케이션에 대한 요청 수를 반환하는 애플리케이션을 생성합니다.
절차
다음 내용으로 클래스 파일
HelloService.java
를 만듭니다.package com.example.microprofile.metrics; public class HelloService { String createHelloMessage(String name){ return "Hello" + name; } }
다음 콘텐츠를 사용하여 클래스 파일
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") + "\"}"; } }
다음 종속성을 포함하도록
pom.xml
파일을 업데이트합니다.<dependency> <groupId>org.eclipse.microprofile.metrics</groupId> <artifactId>microprofile-metrics-api</artifactId> <scope>provided</scope> </dependency>
다음 Maven 명령을 사용하여 애플리케이션을 빌드합니다.
$ mvn clean install wildfly:deploy
지표를 테스트합니다.
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
- 브라우저에서 URL http://localhost:8080/helloworld-rs/rest/json 로 이동합니다.
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
구성 파일을 업데이트할 수 있습니다.
절차
JBoss EAP에서 MicroProfile OpenAPI smallrye 확장을 활성화합니다.
/extension=org.wildfly.extension.microprofile.openapi-smallrye:add()
다음 관리 명령을 사용하여
microprofile-openapi-smallrye
하위 시스템을 활성화합니다./subsystem=microprofile-openapi-smallrye:add()
서버를 다시 로드합니다.
reload
microprofile-openapi-smallrye
하위 시스템이 활성화됩니다.
4.7.2. MicroProfile OpenAPI에 대한 Maven 프로젝트 구성
Maven 프로젝트를 생성하여 MicroProfile OpenAPI 애플리케이션을 생성하기 위한 종속성을 설정합니다.
사전 요구 사항
- Maven이 설치되어 있어야 합니다.
- JBoss EAP Maven 리포지토리가 구성되어 있습니다.
절차
프로젝트를 초기화합니다.
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
구성 파일의 디렉터리 구조를 생성합니다.다음을 포함하도록
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
구성 파일과 디렉터리 구조를 사용하여 애플리케이션을 생성합니다.
추가 리소스
- JBoss EAP Maven 리포지토리 구성에 대한 자세한 내용은 POM 파일로 JBoss EAP Maven 리포지토리 구성을 참조하십시오.
4.7.3. MicroProfile OpenAPI 애플리케이션 생성
OpenAPI v3 문서를 반환하는 애플리케이션을 생성합니다.
사전 요구 사항
- Maven 프로젝트는 MicroProfile OpenAPI 애플리케이션을 생성하도록 구성됩니다.
절차
클래스 파일을 저장할 디렉터리를 생성합니다.
$ mkdir -p APPLICATION_ROOT/src/main/java/com/example/microprofile/openapi/
APPLICATION_ROOT 는 애플리케이션에 대한
pom.xml
구성 파일이 포함된 디렉터리입니다.새 디렉터리로 이동합니다.
$ cd APPLICATION_ROOT/src/main/java/com/example/microprofile/openapi/
다음 단계의 클래스 파일은 모두 이 디렉터리에 생성해야 합니다.
다음 콘텐츠를 사용하여 클래스 파일
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 엔드포인트 역할을 합니다.
다음 콘텐츠를 사용하여 클래스 파일
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; } }
다음 콘텐츠를 사용하여 클래스 파일
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; } }
애플리케이션의 루트 디렉터리로 이동합니다.
$ cd APPLICATION_ROOT
다음 Maven 명령을 사용하여 애플리케이션을 빌드하고 배포합니다.
$ mvn wildfly:deploy
애플리케이션을 테스트합니다.
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
추가 리소스
- MicroProfile SmallR¢ OpenAPI에 정의된 주석 목록은 MicroProfile OpenAPI 주석을 참조하십시오.
4.7.4. 정적 OpenAPI 문서를 제공하도록 JBoss EAP 구성
호스트의 REST 서비스를 설명하는 정적 OpenAPI 문서를 제공하도록 JBoss EAP를 구성합니다.
정적 OpenAPI 문서를 제공하도록 JBoss EAP를 구성하면 Jakarta RESTful Web Services 및 MicroProfile OpenAPI 주석보다 먼저 정적 OpenAPI 문서가 처리됩니다.
프로덕션 환경에서 정적 문서를 제공할 때 주석 처리를 비활성화합니다. 주석 처리를 비활성화하면 변경할 수 없으며 버전이 지정된 API 계약을 클라이언트에 사용할 수 있습니다.
절차
애플리케이션 소스 트리에 디렉터리를 생성합니다.
$ mkdir APPLICATION_ROOT/src/main/webapp/META-INF
APPLICATION_ROOT 는 애플리케이션에 대한
pom.xml
구성 파일이 포함된 디렉터리입니다.OpenAPI 엔드포인트를 쿼리하여 출력을 파일로 리디렉션합니다.
$ curl http://localhost:8080/openapi?format=JSON > src/main/webapp/META-INF/openapi.json
기본적으로 엔드포인트는 YAML 문서를 제공합니다.
format=JSON
은 JSON 문서가 반환되도록 지정합니다.OpenAPI 문서 모델을 처리할 때 주석 스캔을 건너뛰도록 애플리케이션을 구성합니다.
$ echo "mp.openapi.scan.disable=true" > APPLICATION_ROOT/src/main/webapp/META-INF/microprofile-config.properties
애플리케이션을 다시 빌드합니다.
$ mvn clean install
다음 관리 CLI 명령을 사용하여 애플리케이션을 다시 배포합니다.
애플리케이션 배포를 취소합니다.
undeploy microprofile-openapi.war
애플리케이션을 배포합니다.
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
는 클라이언트에 포함할 정규화된 공급자 클래스 이름의 쉼표로 구분된 목록입니다.
추가 리소스
- MicroProfile REST 클라이언트 사양에 대한 자세한 내용은 Rest Client for MicroProfile 을 참조하십시오.
- MicroProfile REST 클라이언트 2.0 기능에 대한 자세한 내용은 MicroProfile REST 클라이언트 2.0 을 참조하십시오.
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
빠른 시작을 참조하십시오.
추가 리소스
- JBoss EAP XP에 포함된 서버 구성 파일에 대한 자세한 내용은 독립 실행형 서버 구성 파일을 참조하십시오.
5.1. 애플리케이션 배포를 위한 OpenShift 준비
애플리케이션 배포를 위해 OpenShift를 준비합니다.
사전 요구 사항
작동 중인 OpenShift 인스턴스를 설치했습니다. 자세한 내용은 Red Hat 고객 포털에서 OpenShift Container Platform 클러스터 설치 및 구성 설명서를 참조하십시오.
절차
-
oc login
명령을 사용하여 OpenShift 인스턴스에 로그인합니다. 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 계정의 사용자 이름과 암호를 사용하거나 저장할 필요가 없습니다.
절차
- Red Hat 고객 포털의 지침에 따라 레지스트리 서비스 계정 관리 애플리케이션을 사용하여 인증 토큰을 생성합니다.
토큰의 OpenShift 시크릿이 포함된 YAML 파일을 다운로드합니다.
토큰의 토큰 정보 페이지의 OpenShift Secret 탭에서 YAML 파일을 다운로드할 수 있습니다.
다운로드한 YAML 파일을 사용하여 OpenShift 프로젝트에 대한 인증 토큰 시크릿을 생성합니다.
oc create -f 1234567_myserviceaccount-secret.yaml
다음 명령을 사용하여 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 이미지 및 이미지 스트림에 대한 완벽한 지원 및 버그 수정을 계속 제공합니다.
절차
다음 명령 중 하나를 사용하여 JBoss EAP XP용 OpenShift 이미지의 최신 JDK 11 이미지 스트림 및 템플릿을 OpenShift 프로젝트의 네임스페이스로 가져옵니다.
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
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 프로젝트 내에서만 사용할 수 있습니다.
일반
openshift
네임스페이스에 대한 관리자 액세스 권한이 있고 모든 프로젝트에서 이미지 스트림 및 템플릿에 액세스할 수 있도록 하려면 명령의oc replace
행에-n openshift
를 추가합니다. 예를 들면 다음과 같습니다.... oc replace -n openshift --force -f \ ...
이미지 스트림과 템플릿을 다른 프로젝트로 가져오려면 명령의
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
명령을 사용합니다.
절차
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
참고템플릿은 많은 템플릿 매개 변수에 기본값을 지정할 수 있으며 일부 또는 모두 기본값을 재정의해야 할 수도 있습니다. 매개 변수 목록과 기본값을 포함하여 템플릿 정보를 보려면
oc describe template TEMPLATE_NAME
명령을 사용합니다.새 OpenShift 애플리케이션을 생성할 때 환경 변수를 구성 하려고 할 수도 있습니다.
빌드 구성의 이름을 검색합니다.
$ oc get bc -o name
이전 단계의 빌드 구성 이름을 사용하여 빌드의 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 외부에서 애플리케이션을 볼 수 있도록 서비스를 노출합니다.
- 애플리케이션을 특정 복제본 수로 스케일링합니다.
절차
다음 명령을 사용하여 애플리케이션의 서비스 이름을 가져옵니다.
$ oc get service
선택 사항: OpenShift 외부에서 애플리케이션에 액세스할 수 있도록 기본 서비스를 경로로 노출합니다. 예를 들어
microprofile-config
빠른 시작의 경우 다음 명령을 사용하여 필요한 서비스와 포트를 노출합니다.참고템플릿을 사용하여 애플리케이션을 생성한 경우 경로가 이미 존재할 수 있습니다. 실행 중인 경우 다음 단계를 계속 진행합니다.
$ oc expose service/eap-xp3-basic-app --port=8080
경로의 URL을 가져옵니다.
$ oc get route
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/
일 수 있습니다.선택적으로 다음 명령을 실행하여 애플리케이션 인스턴스를 확장할 수 있습니다. 이 명령을 실행하면 복제본 수가 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 사양과 호환됩니다.
사전 요구 사항
절차
New Server
(새 서버) 대화 상자에서 새 서버를 설정합니다.- Select server type 목록에서 Red Hat JBoss Enterprise Application Platform 7.4 를 선택합니다.
- Server's host name(서버의 호스트 이름 ) 필드에 localhost 를 입력합니다.
- 서버 이름 필드에 JBoss EAP 7.4 XP 를 입력합니다.
- 다음을 클릭합니다.
새 서버를 구성합니다.
- Home 디렉토리 필드에서 기본 설정을 사용하지 않으려면 새 디렉터리를 지정합니다(예: home/myname/dev/microprofile/runtimes/jboss-eap-7.3 ).
- Execution Environment( 실행 환경)가 JavaSE-1.8 으로 설정되어 있는지 확인합니다.
- 선택 사항: Server 기본 디렉터리 및 Configuration 파일 필드의 값을 변경합니다.
- 완료를 클릭합니다.
결과
이제 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 클라이언트
절차
-
Quickstart parent Artifact에서
pom.xml
파일을 가져옵니다. 사용 중인 빠른 시작에 환경 변수가 필요한 경우 환경 변수를 구성합니다.
서버 개요 대화 상자에서 시작 구성에 환경 변수를 정의합니다.
예를 들어
microprofile-opentracing
빠른 시작에서는 다음 환경 변수를 사용합니다.-
JAEGER_REPORTER_LOG_SPANS
가true
로 설정됨 -
JAEGER_SAMPLER_PARAM
을1
로 설정 -
JAEGER_SAMPLER_TYPE
을const
로 설정
-
추가 리소스
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
입니다.
추가 리소스
- 지원되는 JBoss EAP Galleon 계층에 대한 자세한 내용은 사용 가능한 JBoss EAP 계층을 참조하십시오.
- 프로젝트의 기능 팩을 빌드하기 위해 지원되는 Galleon 플러그인에 대한 자세한 내용은 WildFly Galleon Maven 플러그인 설명서를 참조하십시오.
- JBoss EAP Maven 리포지토리를 구성하는 메서드 선택에 대한 자세한 내용은 Maven 리포지토리 사용을 참조하십시오.
- Maven 프로젝트 디렉터리에 대한 자세한 내용은 Apache Maven 문서 의 표준 디렉터리 레이아웃 소개를 참조하십시오.
8.3. 부팅 가능한 JAR 인수
다음 표의 인수를 보고 부팅 가능 JAR과 함께 사용할 수 있는 지원되는 인수에 대해 알아봅니다.
표 8.1. 지원되는 부팅 가능한 JAR 실행 인수
인수 | 설명 |
---|---|
| 지정된 명령에 대한 도움말 메시지를 표시하고 종료합니다. |
| 부팅 가능 JAR과 관련된 인수입니다. 서버에 배포하려는 애플리케이션을 포함하는 WAR, JAR, EAR 파일 또는 압축을 푼 디렉토리의 경로를 지정합니다. |
| 생성된 Galleon 구성 파일의 내용을 인쇄합니다. |
|
기본적으로 JVM 설정은 부팅 가능한 JAR이 시작된 후 TEMP 디렉터리를 생성하는 데 사용됩니다. install |
| 보안 관리자가 설치된 서버를 실행합니다. |
|
시스템 속성 |
|
공용 인터페이스에 대한 바인드 주소를 구성하는 데 사용되는 시스템 속성 |
| 서버 런타임 시 서버에서 설정하는 시스템 속성을 지정합니다. 부팅 가능한 JAR JVM은 이러한 시스템 속성을 설정하지 않습니다. |
| 지정된 URL에서 시스템 속성을 로드합니다. |
| 보안 속성을 설정합니다. |
|
구성 파일의 socket-binding 요소에서 멀티캐스트 주소를 구성하는 데 사용되는 시스템 속성 |
| 애플리케이션 서버 버전을 표시하고 종료합니다. |
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 기능 팩의 빌드 번호입니다. X 및 BUILD_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>
절차
- 애플리케이션을 실행하는 데 필요한 기능을 제공하는 지원되는 JBoss EAP Galleon 계층을 식별합니다.
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 캐시를 구성합니다.
추가 리소스
- 사용 가능한 기본 계층에 대한 자세한 내용은 기본 계층을 참조하십시오.
- 프로젝트의 기능 팩을 빌드하기 위해 지원되는 Galleon 플러그인에 대한 자세한 내용은 WildFly Galleon Maven 플러그인 설명서를 참조하십시오.
- JBoss EAP Maven 리포지토리를 구성하는 방법을 선택하는 방법에 대한 자세한 내용은 Maven 및 JBoss EAP MicroProfile Maven 리포지토리를 참조하십시오.
- Maven 종속성 관리에 대한 자세한 내용은 Apache Maven Project 문서의 종속성 관리를 참조하십시오.
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 기능 팩의 빌드 번호입니다. X 및 BUILD_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>
절차
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
구성과 동일한 구성이 포함되어 있습니다.애플리케이션을 부팅 가능한 JAR로 패키징합니다.
$ mvn package
애플리케이션을 시작합니다.
$ NAME="foo" java -jar target/microprofile-config-bootable.jar
참고이 예제에서는
NAME
을 환경 변수로 사용하지만 기본값인jim
을 사용하도록 선택할 수 있습니다.참고지원되는 부팅 가능한 JAR 인수 목록을 보려면
java -jar target/microprofile-config-bootable.jar
명령의 끝에--help
를 추가합니다.MicroProfile Config 애플리케이션에 액세스하려면 웹 브라우저에서 다음 URL을 지정합니다.
http://localhost:8080/config/json
검증: 터미널에서 다음 명령을 실행하여 애플리케이션이 제대로 작동하는지 테스트합니다.
curl http://localhost:8080/config/json
예상 출력은 다음과 같습니다.
{"result":"Hello foo"}
추가 리소스
- 사용 가능한 MicroProfile Config 기능에 대한 자세한 내용은 MicroProfile Config 를 참조하십시오.
-
ConfigSources
에 대한 자세한 내용은 MicroProfile Config 참조를 참조하십시오.
8.6. JBoss EAP 베어 메탈 플랫폼에서 부팅 가능한 JAR 생성
JBoss EAP 베어 메탈 플랫폼에서 부팅 가능 JAR로 애플리케이션을 패키징할 수 있습니다.
상용 부팅 가능한 JAR에는 JBoss EAP 서버만 포함되어 있습니다. hollow 부팅 가능 JAR은 JBoss EAP JAR Maven 플러그인에 의해 패키지됩니다. 애플리케이션은 서버 런타임에 제공됩니다. hollow 부팅 가능 JAR은 다른 애플리케이션의 서버 구성을 다시 사용해야 하는 경우에 유용합니다.
사전 요구 사항
- Maven 프로젝트를 생성하고, 상위 종속성을 설정하며, 애플리케이션 생성을 위한 종속성을 추가했습니다. MicroProfile Config development 를 참조하십시오.
-
JBoss EAP 베어 메탈 플랫폼에서 부팅 가능한 JAR 사용에서 설명하는
pom.xml
파일 구성 단계를 완료했습니다. -
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 기능 팩의 빌드 번호입니다. X 및 BUILD_NUMBER 는 JBoss EAP XP 3.0.0 제품 라이프사이클 동안 발전할 수 있습니다. /ga/org/jboss/eap/wildfly-galleon-pack 인덱스 를 참조하십시오.
절차에 표시된 예제에서는 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>
절차
-
상용 부팅 가능 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에 애플리케이션을 포함하지 않습니다.
빈 부팅 가능한 JAR을 빌드합니다.
$ mvn clean package
hollow 부팅 가능한 JAR을 실행합니다.
$ java -jar target/microprofile-config-bootable.jar --deployment=target/microprofile-config.war
중요서버에 배포할 WAR 파일의 경로를 지정하려면 다음 인수를 사용합니다. 여기서
<PATH_NAME>
은 배포 경로입니다.--deployment=<PATH_NAME>
애플리케이션에 액세스합니다.
$ curl http://localhost:8080/microprofile-config/config/json
참고루트 디렉터리에 웹 애플리케이션을 등록하려면 애플리케이션 이름을
ROOT.war
로 지정합니다.
추가 리소스
- 사용 가능한 MicroProfile 기능에 대한 자세한 내용은 MicroProfile Config 를 참조하십시오.
- JBoss EAP XP 3.0.0에서 지원되는 JBoss EAP JAR Maven 플러그인에 대한 자세한 내용은 JBoss EAP Maven 플러그인을 참조하십시오.
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 스크립트 속성
인수 | 설명 |
---|---|
| 파일을 스크립팅할 경로 목록. |
|
속성 파일의 경로를 지정하는 선택적 속성입니다. 이 파일에는 |
|
부울 값이 포함된 선택적 속성입니다. 작업 요청을 서버로 보내기 전에 시스템 속성 또는 표현식을 해석할지 여부를 나타냅니다. 기본값은 |
-
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 기능 팩의 빌드 번호입니다. X 및 BUILD_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>
절차
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/애플리케이션을 패키징합니다.
$ mvn package
-
oc login
명령을 사용하여 OpenShift 인스턴스에 로그인합니다. OpenShift에서 새 프로젝트를 만듭니다. 예를 들면 다음과 같습니다.
$ oc new-project bootable-jar-project
다음
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
참고OpenShift는 부팅 가능한 JAR 구성 파일에 CLI 스크립트 명령 집합을 적용하여 클라우드 환경에 맞게 조정합니다. Maven 프로젝트
/target 디렉터리에서
bootable-jar-build-artifacts/generated-cli-script.txt
파일을 열어 이 스크립트에 액세스할 수 있습니다.검증:
다음 명령을 실행하여 사용 가능한 OpenShift 포드 목록을 확인하고 포드 빌드 상태를 확인합니다.
$ oc get pods
빌드된 애플리케이션 이미지를 확인합니다.
$ oc get is microprofile-config-app
출력에는 이름 및 이미지 리포지토리, 태그 등과 같은 빌드된 애플리케이션 이미지 세부 정보가 표시됩니다. 이 절차의 예에서 이미지 스트림 이름 및 태그 출력에
microprofile-config-app:latest
가 표시됩니다.애플리케이션을 배포합니다.
$ 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"
새 애플리케이션이 생성 및 시작됩니다. 애플리케이션 구성은 새 서비스로 노출됩니다.
검증: 터미널에서 다음 명령을 실행하여 애플리케이션이 제대로 작동하는지 테스트합니다.
$ curl http://$(oc get route microprofile-config-app --template='{{ .spec.host }}')/config/json
예상 출력 :
{"result":"Hello jim"}
추가 리소스
- MicroProfile에 대한 자세한 내용은 MicroProfile Config 를 참조하십시오.
-
ConfigSources
에 대한 자세한 내용은 기본 MicroProfile 구성 특성을 참조하십시오.
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
:gcJAVA_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 사용을 참조하십시오.
절차
프로젝트의 루트 디렉터리에
scripts
라는 디렉터리를 생성합니다. 예를 들면 다음과 같습니다.$ mkdir scripts
cli.properties
파일을 만들고 파일을/scripts
디렉토리에 저장합니다. 이 파일에config.path
및config.ordinal
시스템 속성을 정의합니다. 예를 들면 다음과 같습니다.config.path=/etc/config config.ordinal=200
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
를 생성하여 일반 및 경로 값을 속성 파일에서 검색할 수 있습니다.-
스크립트를 프로젝트의 루트 디렉터리에 있는
/scripts
디렉터리에 저장합니다. 기존 플러그인
<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>
애플리케이션을 패키징합니다.
$ mvn package
-
oc login
명령을 사용하여 OpenShift 인스턴스에 로그인합니다. 선택 사항: 이전에
target/openshift
하위 디렉터리를 생성하지 않은 경우 다음 명령을 실행하여 suddirectory를 생성해야 합니다.$ mkdir target/openshift
패키지된 애플리케이션을 생성된 하위 디렉터리에 복사합니다.
$ cp target/microprofile-config-bootable.jar target/openshift
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
파일을 열어 이 스크립트에 액세스할 수 있습니다.ConfigMap
생성. 예를 들면 다음과 같습니다.$ oc create configmap microprofile-config-map --from-literal=name="Name comes from Openshift ConfigMap"
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
명령을 실행하면 애플리케이션이 새 구성 설정으로 다시 배포됩니다.출력을 테스트합니다.
$ curl http://$(oc get route microprofile-config-app --template='{{ .spec.host }}')/config/json
예상 출력은 다음과 같습니다.
{"result":"Hello Name comes from Openshift ConfigMap"}
추가 리소스
-
MicroProfile
ConfigSources
속성에 대한 자세한 내용은 기본 MicroProfile 구성 특성을 참조하십시오. - 부팅 가능한 JAR 인수에 대한 자세한 내용은 지원되는 부팅 가능한 JAR 인수를 참조하십시오.
8.11. 부팅 가능한 JAR Maven 프로젝트 생성
절차의 단계에 따라 예제 Maven 프로젝트를 생성합니다. 다음 절차를 수행하기 전에 Maven 프로젝트를 생성해야 합니다.
- 부팅 가능한 JAR에 대한 JSON 로깅 활성화
- 여러 부팅 가능한 JAR 인스턴스의 웹 세션 데이터 스토리지 활성화
- CLI 스크립트를 사용하여 부팅 가능한 JAR에 대한 HTTP 인증 활성화
- Red Hat Single Sign-On으로 JBoss EAP 부팅 가능한 JAR 애플리케이션 보안
프로젝트 pom.xml
파일에서 부팅 가능한 JAR를 빌드하는 데 필요한 프로젝트 아티팩트를 검색하도록 Maven을 구성할 수 있습니다.
절차
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
입니다.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>
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>
다음 예와 같이 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>
추가 리소스
- JBoss EAP Maven 플러그인에 대한 자세한 내용은 JBoss EAP Maven 플러그인을 참조하십시오.
- Galleon 계층에 대한 자세한 내용은 부팅 가능한 JAR 서버의 Galleon 계층 지정을 참조하십시오.
- 프로젝트에 Red Hat Single Sign-On Galleon 기능 팩을 포함하는 방법에 대한 자세한 내용은 Red Hat Single Sign-On을 사용하여 JBoss EAP 부팅 가능한 JAR 애플리케이션 보안을 참조하십시오.
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 기능 팩의 빌드 번호입니다. X 및 BUILD_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>
-
Maven 플러그인 버전의
절차
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>
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>
Java 파일을 저장할 디렉터리를 생성합니다.
$ mkdir -p APPLICATION_ROOT/src/main/java/com/example/logging/
여기서
APPLICATION_ROOT
는 애플리케이션에 대한pom.xml
구성 파일이 포함된 디렉터리입니다.다음 내용으로 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 { }
다음 내용으로 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(); } }
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)
플러그인
<configuration>
요소에 다음 구성 추출을 추가합니다.<cli-sessions> <cli-session> <script-files> <script>scripts/logging.cli</script> </script-files> </cli-session> </cli-sessions>
이 예에서는 애플리케이션에 대한 JSON
로깅을 활성화하도록 서버 로깅 구성 파일을 수정하는 logging.cli
CLI 스크립트를 보여줍니다.애플리케이션을 부팅 가능한 JAR로 패키징합니다.
$ mvn package
선택 사항: JBoss EAP 베어 메탈 플랫폼에서 애플리케이션을 실행하려면 다음 차이점을 사용하여 JBoss EAP 베어 메탈 플랫폼에서 부팅 가능한 JAR 사용에서 설명하는 단계를 따르십시오.
애플리케이션을 시작합니다.
mvn wildfly-jar:run
검증: 브라우저에서 URL을 지정하여 애플리케이션에 액세스할 수 있습니다 . http://127.0.0.1:8080/hello.
예상 출력 : 애플리케이션 콘솔에서
com.example.logging.HelloWorldEndpoint
디버그 추적을 포함하여 JSON 형식 로그를 볼 수 있습니다.
선택 사항: JBoss EAP OpenShift 플랫폼에서 애플리케이션을 실행하려면 다음 단계를 완료합니다.
<cloud/>
요소를 플러그인 구성에 추가합니다. 예를 들면 다음과 같습니다.<plugins> <plugin> ... <!-- You must evolve the existing configuration with the <cloud/> element --> <configuration > ... <cloud/> </configuration> </plugin> </plugins>
애플리케이션을 다시 빌드합니다.
$ mvn clean package
-
oc login
명령을 사용하여 OpenShift 인스턴스에 로그인합니다. OpenShift에서 새 프로젝트를 만듭니다. 예를 들면 다음과 같습니다.
$ oc new-project bootable-jar-project
다음
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
애플리케이션을 배포합니다.
$ oc new-app logging $ oc expose svc/logging
경로의 URL을 가져옵니다.
$ oc get route logging --template='{{ .spec.host }}'
이전 명령에서 반환된 URL을 사용하여 웹 브라우저에서 애플리케이션에 액세스합니다. 예를 들면 다음과 같습니다.
http://ROUTE_NAME/hello
검증: 다음 명령을 실행하여 사용 가능한 OpenShift 포드 목록을 보고 포드 빌드 상태를 확인합니다.
$ oc get pods
애플리케이션의 실행 중인 포드 로그에 액세스합니다. 여기서
APP_POD_NAME
은 실행 중인 포드 로깅 애플리케이션의 이름입니다.$ oc logs APP_POD_NAME
예상 결과 : 포드 로그는 JSON 형식이며
com.example.logging.HelloWorldEndpoint
디버그 추적을 포함합니다.
추가 리소스
- JBoss EAP의 로깅 기능에 대한 자세한 내용은 구성 가이드에서 JBoss EAP 로깅 을 참조하십시오.
- OpenShift에서 부팅 가능한 JAR 사용에 대한 자세한 내용은 JBoss EAP OpenShift 플랫폼에서 부팅 가능한 JAR 사용을 참조하십시오.
- 프로젝트의 JBoss EAP JAR Maven을 지정하는 방법에 대한 자세한 내용은 부팅 가능한 JAR 서버의 Galleon 계층 지정을 참조하십시오.
- CLI 스크립트 생성에 대한 자세한 내용은 CLI 스크립트를 참조하십시오.
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 기능 팩의 빌드 번호입니다. X 및 BUILD_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>
-
Maven 플러그인 버전의
절차
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 계층을 사용하여 웹 세션 공유를 활성화합니다.다음 구성을 사용하여
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/>
태그는 이 서블릿을 여러 서버에 배포할 수 있음을 나타냅니다.Java 파일을 저장할 디렉터리를 생성합니다.
$ mkdir -p APPLICATION_ROOT /src/main/java/com/example/webclustering/
여기서
APPLICATION_ROOT
는 애플리케이션에 대한pom.xml
구성 파일이 포함된 디렉터리입니다.다음 콘텐츠를 사용하여 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 요청을 보내는 엔드포인트를 정의합니다.다음 콘텐츠를 사용하여 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; } }
애플리케이션을 패키징합니다.
$ mvn package
선택 사항: JBoss EAP 베어 메탈 플랫폼에서 애플리케이션을 실행하려면 다음 차이점을 사용하여 JBoss EAP 베어 메탈 플랫폼에서 부팅 가능한 JAR 사용에서 설명하는 단계를 따르십시오.
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
검증: 노드 1 인스턴스에서 애플리케이션에 액세스할 수 있습니다: http://127.0.0.1:8080/clustering. 사용자 세션 ID와 사용자 생성 시간을 확인합니다.
이 인스턴스를 종료한 후 노드 2 인스턴스에 액세스할 수 있습니다: http://127.0.0.1:8090/clustering. 사용자는 node 1 인스턴스의 세션 ID 및 사용자 생성 시간과 일치해야 합니다.
선택 사항: JBoss EAP OpenShift 플랫폼에서 애플리케이션을 실행하려면 JBoss EAP OpenShift 플랫폼에서 부팅 가능한 JAR 사용에 설명된 단계를 수행하되 다음 단계를 완료합니다.
<cloud/>
요소를 플러그인 구성에 추가합니다. 예를 들면 다음과 같습니다.<plugins> <plugin> ... <!-- You must evolve the existing configuration with the <cloud/> element --> <configuration > ... <cloud/> </configuration> </plugin> </plugins>
애플리케이션을 다시 빌드합니다.
$ mvn clean package
-
oc login
명령을 사용하여 OpenShift 인스턴스에 로그인합니다. OpenShift에서 새 프로젝트를 만듭니다. 예를 들면 다음과 같습니다.
$ oc new-project bootable-jar-project
JBoss EAP OpenShift 플랫폼에서 웹 클러스터 애플리케이션을 실행하려면 포드가 실행 중인 서비스 계정에 대한 권한 액세스 권한을 부여해야 합니다. 그러면 서비스 계정이 Kubernetes REST API에 액세스할 수 있습니다. 다음 예는 서비스 계정에 부여되는 권한 액세스 권한을 보여줍니다.
$ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
다음
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
애플리케이션을 배포합니다.
$ oc new-app web-clustering -e KUBERNETES_NAMESPACE=$(oc project -q) $ oc expose svc/web-clustering
중요현재 OpenShift 네임스페이스의 다른 Pod를 보려면
KUBERNETES_NAMESPACE
환경 변수를 사용해야 합니다. 그렇지 않으면 서버에서기본
네임스페이스에서 포드를 검색하려고 합니다.경로의 URL을 가져옵니다.
$ oc get route web-clustering --template='{{ .spec.host }}'
이전 명령에서 반환된 URL을 사용하여 웹 브라우저에서 애플리케이션에 액세스합니다. 예를 들면 다음과 같습니다.
http://ROUTE_NAME/clustering
사용자 세션 ID와 사용자 생성 시간을 확인합니다.
애플리케이션을 두 개의 포드로 확장합니다.
$ oc scale --replicas=2 deployments web-clustering
다음 명령을 실행하여 사용 가능한 OpenShift 포드 목록을 보고 포드 빌드 상태를 확인합니다.
$ oc get pods
-
oc delete pod web-clustering-POD_NAME
명령을 사용하여 가장 오래된 포드를 종료합니다. 여기서 POD_NAME 은 가장 오래된 포드의 이름입니다. 애플리케이션에 다시 액세스합니다.
http://ROUTE_NAME/clustering
예상 결과 : 새 포드에서 생성한 세션 ID 및 생성 시간은 종료된 포드의 값과 일치합니다. 이는 웹 세션 데이터 스토리지가 활성화되어 있음을 나타냅니다.
추가 리소스
- 배포 가능한 웹 세션 관리 프로필에 대한 자세한 내용은 개발 가이드에서 배포 가능한 웹 세션 구성의 배포 가능-웹 하위 시스템을 참조하십시오.
- JGroups 프로토콜 스택 구성에 대한 자세한 내용은 The Getting Started with JBoss EAP for OpenShift Container Platform 가이드에서 JGroups 검색 메커니즘 구성을 참조하십시오.
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 기능 팩의 빌드 번호입니다. X 및 BUILD_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>
-
Maven 플러그인 버전의
절차
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 계층을 보여줍니다.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>
Java 파일을 저장할 디렉터리를 생성합니다.
$ mkdir -p APPLICATION_ROOT/src/main/java/com/example/authentication/
여기서
APPLICATION_ROOT
는 Maven 프로젝트의 루트 디렉터리입니다.다음 내용으로 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(); } }
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)
플러그인
<configuration>
요소에 다음 구성 추출을 추가합니다.<cli-sessions> <cli-session> <script-files> <script>scripts/authentication.cli</script> </script-files> </cli-session> </cli-sessions>
이 예에서는 서버에 대해 정의된 보안 도메인에 default
undertow
보안 도메인을 구성하는authentication.cli
CLI 스크립트를 보여줍니다.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
다음
extra-content-content-dirs
요소를 기존<configuration>
요소에 추가합니다.<extra-server-content-dirs> <extra-content>extra-content</extra-content> </extra-server-content-dirs>
extra-content
디렉터리에는 속성 파일이 포함되어 있습니다.애플리케이션을 부팅 가능한 JAR로 패키징합니다.
$ mvn package
애플리케이션을 시작합니다.
mvn wildfly-jar:run
서블릿을 호출하지만 인증 정보를 지정하지 마십시오.
curl -v http://localhost:8080/hello
예상 출력 :
HTTP/1.1 401 Unauthorized ... WWW-Authenticate: Basic realm="Example Realm"
서버를 호출하고 자격 증명을 지정합니다. 예를 들면 다음과 같습니다.
$ curl -v -u testuser:bootable_password http://localhost:8080/hello
부팅 가능한 JAR에 대해 HTTP 인증이 활성화되었음을 나타내는 HTTP 200 상태가 반환됩니다. 예를 들면 다음과 같습니다.
HTTP/1.1 200 OK .... Hello testuser
추가 리소스
-
undertow
보안 도메인에 대한 HTTP 인증 활성화에 대한 자세한 내용은 서버 보안 구성 방법에서 CLI 보안 명령을 사용하여 애플리케이션에 대한 HTTP 인증 활성화를 참조하십시오.
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 기능 팩의 빌드 번호입니다. X 및 BUILD_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 기능 팩의 빌드 번호입니다. X 및 BUILD_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>
-
Maven 플러그인 버전의
-
절차
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을 사용하여 애플리케이션과 서비스를 보호하는 라이브러리입니다.프로젝트
pom.xml
파일에서 플러그인 구성에서<context-root>
를false로 설정합니다
. 그러면simple-webapp
리소스 경로에 애플리케이션이 등록됩니다. 기본적으로 WAR 파일은 root-context 경로 아래에 등록됩니다.<configuration> ... <context-root>false</context-root> ... </configuration>
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 파일의 이름입니다.프로젝트
pom.xml
파일에서 기존 플러그인<configuration>
요소에 다음 구성 추출을 추가합니다.<cli-sessions> <cli-session> <script-files> <script>scripts/configure-oidc.cli</script> </script-files> </cli-session> </cli-sessions>
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>
선택 사항: 또는 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>
다음 콘텐츠를 사용하여
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>"); } } }
애플리케이션을 부팅 가능한 JAR로 패키징합니다.
$ mvn package
애플리케이션을 시작합니다. 다음 예제에서는 지정된 부팅 가능 JAR 경로에서
simple-webapp
웹 애플리케이션을 시작합니다.$ java -jar target/simple-webapp-bootable.jar
Red Hat Single Sign-On으로 보안된 웹 페이지에 액세스하려면 웹 브라우저에서 다음 URL을 지정합니다. 다음 예는 보안
simple-webapp
웹 애플리케이션의 URL을 보여줍니다.http://localhost:8080/simple-webapp/secured
- Red Hat Single Sign-On 영역에서 사용자로 로그인합니다.
검증: 웹 페이지에서 다음 출력을 표시하는지 확인합니다.
Current Principal '<principal id>'
추가 리소스
- Red Hat Single Sign-On 어댑터 하위 시스템 구성에 대한 자세한 내용은 애플리케이션 보안 및 서비스 가이드에서 JBoss EAP 어댑터 를 참조하십시오.
- 프로젝트의 JBoss EAP JAR Maven을 지정하는 방법에 대한 자세한 내용은 부팅 가능한 JAR 서버의 Galleon 계층 지정을 참조하십시오.
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 플러그인을 지정했습니다.
절차
개발 모드에서 부팅 가능한 JAR을 빌드하고 시작합니다.
$ mvn wildfly-jar:dev
dev
모드에서 서버 배포 스캐너는대상/배포 디렉터리를
모니터링하도록 구성됩니다.다음 명령을 사용하여 JBoss EAP Maven 플러그인을 요청하여 애플리케이션을
target/deployments
디렉터리에 복사하십시오.$ mvn package -Ddev
부팅 가능 JAR 내부에 패키징된 서버는
target/deployments
디렉터리에 저장된 애플리케이션을 배포합니다.- 애플리케이션 코드에서 코드를 수정합니다.
-
mvn package -Ddev
를 사용하여 JBoss EAP Maven 플러그인에 대한 메시지를 표시하여 애플리케이션을 다시 빌드하고 다시 배포합니다. 서버를 중지합니다. 예를 들면 다음과 같습니다.
$ mvn wildfly-jar:shutdown
애플리케이션 변경 사항을 완료한 후 애플리케이션을 부팅 가능한 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
는 부팅 가능한 JAR에 아카이브 패치를 적용하는 것과 관련이 있습니다. 이 방법은 일반 JBoss EAP 배포에 패치를 적용하는 것과 유사합니다.
-patch-cli-script>의 접두사 legacy-
*
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 패치
절차
부팅 가능한 JAR에 적용할 레거시 패치를 정의하는 CLI 스크립트를 생성합니다. 스크립트에는 하나 이상의 패치 적용 명령이 포함되어야 합니다. Galleon 계층으로 잘린 서버를 패치할 때
--override-all
명령이 필요합니다. 예를 들면 다음과 같습니다.patch apply patch-oneoff1.zip --override-all patch apply patch-oneoff2.zip --override-all patch info --json-output
-
pom.xml
파일의<legacy-patch-cli-script>
요소에서 CLI 스크립트를 참조합니다. - 부팅 가능한 JAR을 다시 구축합니다.
추가 리소스
- JBoss EAP MicroProfile Maven 리포지토리 다운로드에 대한 자세한 내용은 아카이브 파일로 JBoss EAP MicroProfile Maven 리포지토리 패치 다운로드를 참조하십시오.
- CLI 스크립트 생성에 대한 자세한 내용은 CLI 스크립트를 참조하십시오.
- 기술 프리뷰 기능에 대한 자세한 내용은 Red Hat 고객 포털의 기술 프리뷰 기능 지원 범위를 참조하십시오.
9장. reference
9.1. MicroProfile 구성 참조
9.1.1. 기본 MicroProfile 구성 특성
MicroProfile Config 사양은 기본적으로 3개의 ConfigSources
를 정의합니다.
ConfigSources
는 서수에 따라 정렬됩니다. 이후 배포를 위해 구성을 덮어써야 하는 경우 상위 서수 ConfigSource
보다 낮은 서수적 ConfigSource
를 덮어씁니다.
표 9.1. 기본 MicroProfile 구성 특성
ConfigSource | 서수 |
---|---|
시스템 속성 |
|
환경 변수 |
|
클래스 경로에 있는 속성 파일 |
|
9.1.2. MicroProfile Config SmallRye ConfigSources
microprofile-config-smallrye
프로젝트는 기본 MicroProfile ConfigSources
외에도 사용할 수 있는 추가 ConfigSources
를 정의합니다.
표 9.2. 추가 MicroProfile 구성 특성
ConfigSource | 서수 |
---|---|
하위 시스템의 |
|
디렉토리의 |
|
클래스의 |
|
이러한 ConfigSources
에 대해 명시적인 ordinal이 지정되지 않았습니다. MicroProfile Config 사양에 있는 기본 ordinal 값을 상속받습니다.
9.2. MicroProfile 오류 허용 오차 참조
9.2.1. MicroProfile Fault 허용 오차 구성 속성
smallrye Fault Tolerance 사양은 MicroProfile Fault Tolerance 사양에 정의된 속성 외에도 다음 속성을 정의합니다.
표 9.3. MicroProfile Fault 허용 오차 구성 속성
속성 | 기본값 | 설명 |
---|---|---|
|
| 내결함성 메커니즘에 사용되는 스레드 수입니다. 여기에는 bulkhead 스레드 풀이 포함되지 않습니다. |
|
| 시간 제한 예약에 사용되는 스레드 풀의 크기입니다. |
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 | NONE |
공개 키의 위치는 상대 경로 또는 URL일 수 있습니다. |
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 속성
속성 | 기본값 | 설명 |
---|---|---|
|
| OpenAPI 엔드포인트 등록을 활성화하거나 비활성화합니다.
이 속성을 매개 변수화하여 프로덕션 또는 개발과 같은 다양한 환경에서 이 속성을 사용하여 MicroProfile OpenAPI 모델을 생성해야 하는 가상 호스트와 연결된 애플리케이션을 제어할 수 있습니다. |
|
| 이 속성을 사용하여 가상 호스트와 연결된 여러 애플리케이션에 대한 OpenAPI 문서를 생성할 수 있습니다.
동일한 가상 호스트와 연결된 각 애플리케이션에 고유한 |
|
| 자동 생성된 서버 레코드가 절대 또는 OpenAPI 엔드포인트 위치와 상대적인지 여부를 나타냅니다. 루트가 아닌 컨텍스트 경로가 있으면 서버 레코드가 OpenAPI 문서 소비자가 OpenAPI 엔드포인트 호스트와 관련된 REST 서비스에 유효한 URL을 구성할 수 있는지 확인해야 합니다.
|