7장. 동적 플러그인
7.1. 동적 플러그인 개요
7.1.1. 동적 플러그인 정보
동적 플러그인은 런타임 시 원격 소스에서 로드되고 해석됩니다. 동적 플러그인을 콘솔에 제공하고 노출하는 한 가지 방법은 OLM Operator를 사용하는 것입니다. Operator는 HTTP 서버와 함께 플랫폼에 배포를 생성하여 플러그인을 호스팅하고 Kubernetes 서비스를 사용하여 노출합니다.
					동적 플러그인을 사용하면 런타임 시 콘솔 사용자 인터페이스에 사용자 정의 페이지 및 기타 확장을 추가할 수 있습니다. ConsolePlugin 사용자 정의 리소스는 콘솔에 플러그인을 등록하고 클러스터 관리자는 콘솔 Operator 구성에서 플러그인을 활성화합니다.
				
7.1.2. 주요 기능
동적 플러그인을 사용하면 OpenShift Container Platform 환경에 대해 다음과 같은 사용자 정의를 수행할 수 있습니다.
- 사용자 지정 페이지를 추가합니다.
- 관리자 및 개발자 이외의 화면을 추가합니다.
- 검색 항목을 추가합니다.
- 탭과 작업을 리소스 페이지에 추가합니다.
7.1.3. 일반 지침
플러그인을 생성할 때 다음 일반 지침을 따르십시오.
- 
							Node.js및yarn은 플러그인을 빌드하고 실행하는 데 필요합니다.
- 
							충돌을 방지하려면 CSS 클래스 이름을 플러그인 이름으로 접두사로 지정합니다. 예를 들면 my-plugin__heading및my-plugin_\_icon입니다.
- 다른 콘솔 페이지에서 일관된 모양, 느낌 및 동작을 유지합니다.
- 플러그인을 생성할 때 react-i18next 현지화 지침을 따르십시오. 다음 예제에서와 같이 - useTranslation후크를 사용할 수 있습니다.- conster Header: React.FC = () => { const { t } = useTranslation('plugin__console-demo-plugin'); return <h1>{t('Hello, World!')}</h1>; };- conster Header: React.FC = () => { const { t } = useTranslation('plugin__console-demo-plugin'); return <h1>{t('Hello, World!')}</h1>; };- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 요소 선택기와 같은 플러그인 구성 요소 외부의 DestinationRule에 영향을 줄 수 있는 선택기를 사용하지 마십시오. 이는 API가 아니며 변경될 수 있습니다. 이를 사용하면 플러그인이 손상될 수 있습니다. 플러그인 구성 요소 외부에서 4.6.1에 영향을 줄 수 있는 요소 선택기와 같은 선택기를 사용하지 마십시오.
- 
							플러그인 웹 서버에서 제공하는 모든 자산에 대해 Content-Type응답 헤더를 사용하여 유효한 JavaScript Multipurpose Internet Mail Extension(MIME) 유형을 제공합니다. 각 플러그인 배포에는 지정된 플러그인의 생성된 자산을 호스팅하는 웹 서버가 포함되어야 합니다.
- Webpack 버전 5 이상을 사용하여 Webpack 플러그인을 빌드해야 합니다.
- 
							충돌을 방지하려면 CSS 클래스 이름 앞에 플러그인 이름을 붙여야 합니다. 예를 들면 my-plugin__heading및my-plugin_\_icon입니다.
- 다른 콘솔 페이지와 일관된 모양, 느낌 및 동작을 유지해야 합니다.
- 요소 선택기와 같이 플러그인 구성 요소 외부의 태그에 영향을 줄 수 있는 선택기를 피해야 합니다. 이는 API가 아니며 변경될 수 있습니다.
- 
							플러그인 웹 서버에서 제공하는 모든 자산에 대해 Content-Type응답 헤더를 사용하여 유효한 JavaScript Multipurpose Internet Mail Extension(MIME) 유형을 제공해야 합니다. 각 플러그인 배포에는 지정된 플러그인의 생성된 자산을 호스팅하는 웹 서버가 포함되어야 합니다.
7.1.4. PatternFly 지침
플러그인을 생성할 때 PatternFly 사용에 대한 다음 지침을 따르십시오.
- PatternFly 구성 요소 및 PatternFly CSS 변수를 사용합니다. 핵심 PatternFly 구성 요소는 SDK를 통해 사용할 수 있습니다. PatternFly 구성 요소 및 변수를 사용하면 플러그인이 향후 콘솔 버전에서 일관성을 유지하는 데 도움이 됩니다. - OpenShift Container Platform 버전 4.14 및 이전 버전을 사용하는 경우 Patternfly 4.x를 사용하십시오.
- OpenShift Container Platform 4.15 이상을 사용하는 경우 Patternfly 5.x를 사용하십시오.
 
- PatternFly의 접근성 기본 사항에 따라 플러그인에 액세스할 수 있도록 합니다.
- 
							Bootstrap 또는 Tailwind와 같은 다른 CSS 라이브러리는 사용하지 마십시오. PatternFly와 충돌할 수 있으며 콘솔의 나머지 부분과 일치하지 않을 수 있습니다. 플러그인은 기본 PatternFly 스타일에서 평가할 사용자 인터페이스에 고유한 스타일만 포함해야 합니다. 플러그인의 @patternfly/react-styles/*/.css또는 모든 스타일에서@patternfly/patternfly패키지와 같은 스타일을 가져오지 마십시오.
- 콘솔 애플리케이션은 지원되는 모든 PatternFly 버전에 대한 기본 스타일을 로드합니다.
7.1.4.1. react-i18 next로 메시지 번역
플러그인 템플릿 은 react-i18 next 를 사용하여 메시지를 변환하는 방법을 보여줍니다.
사전 요구 사항
- 플러그인 템플릿이 로컬에 복제되어 있어야 합니다.
- 선택 사항: 플러그인을 로컬에서 테스트하려면 컨테이너에서 OpenShift Container Platform 웹 콘솔을 실행합니다. Docker 또는 Podman 3.2.0 이상을 사용할 수 있습니다.
프로세스
- 이름 충돌을 방지하려면 name에 - plugin__접두사를 추가합니다. 플러그인 템플릿은 기본적으로- plugin__console-plugin-template네임스페이스를 사용하며,- plugin__my-plugin과 같은 플러그인 이름을 바꿀 때 업데이트해야 합니다.- useTranslation후크를 사용할 수 있습니다. 예를 들면 다음과 같습니다.- conster Header: React.FC = () => { const { t } = useTranslation('plugin__console-demo-plugin'); return <h1>{t('Hello, World!')}</h1>; };- conster Header: React.FC = () => { const { t } = useTranslation('plugin__console-demo-plugin'); return <h1>{t('Hello, World!')}</h1>; };- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 중요- i18n네임스페이스와- ConsolePlugin리소스 이름을 일치시켜야 합니다.
- 필요한 동작을 기반으로 - spec.i18n.loadType필드를 설정합니다.- 예 7.1. - plugin__console-demo-plugin- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 로드 중 동적 플러그인 후i18n네임스페이스에서 모든 플러그인의 현지화 리소스를 로드합니다.
 
- console-extensions.json의 라벨에- %plugin__console-plugin-template~My Label%형식을 사용합니다. 콘솔은- plugin__console-plugin-template네임스페이스에서 현재 언어의 메시지로 값을 대체합니다. 예를 들면 다음과 같습니다.- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- i18next-parser 의 TypeScript 파일에 주석을 포함하여 - console-extensions.json의 메시지를 메시지 카탈로그에 추가합니다. 예를 들면 다음과 같습니다.- // t('plugin__console-demo-plugin~Demo Plugin')- // t('plugin__console-demo-plugin~Demo Plugin')- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 메시지를 추가하거나 변경할 때 플러그인 템플릿의 - locales폴더에 있는 JSON 파일을 업데이트하려면 다음 명령을 실행합니다.- yarn i18n - $ yarn i18n- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow