이미 소프트웨어를 갖추고 있지만 기술 사용자가 플랫폼을 확장할 수 있도록 하는 보다 효과적인 방법이 여전히 필요합니다.
OSGi는 대부분의 Java 개발자에게 잘 알려져 있지만 이를 제품에 통합하는 것은 어려운 작업처럼 보일 수 있습니다. OSGi의 정확한 작동에 대한 명확성의 부족은 앞으로의 길을 더욱 혼란스럽게 합니다.
그들이 실험하고 싶은 것과는 대조적으로 OSGi는 많은 Java 개발자에게 넓은 바다를 항해하려는 것처럼 느껴집니다.
이 기사에서는 간단한 프로그램을 사용하여 OSGi Felix 스프링 튜토리얼을 소개하고 그 장점 및 기타 중요한 세부 사항을 살펴봅니다.
그래서 OSGi는 무엇입니까?
모듈 및 구성 요소의 생성 및 배포는 OSGi(Open Service Gateway Initiative)로 알려진 Java 프레임워크에 의해 가능합니다.
이는 기능 캡슐화 및 느슨한 결합을 강조하며, 이는 소스 코드 간에 쉽게 전송할 수 있는 모듈식 기능과 끝없는 종속성을 필요로 하지 않는 테스트를 포함하여 개발자에게 여러 이점을 제공합니다.
OSGi는 어떻게 작동합니까?
Java용 동적 구성 요소 시스템은 OSGi라는 사양 집합으로 정의됩니다. 이러한 사양은 애플리케이션이 여러 부분으로 구축된 다음 번들로 패키징되는 개발 접근 방식을 가능하게 합니다.
이러한 구성 요소는 로컬 및 네트워크 기반 서비스를 사용하여 통신합니다. 프로그램의 핵심 코드를 가능한 한 간결하게 만드는 것이 목표입니다. 이 코드와 여러 구성 요소 간의 높은 결합이 가능합니다.
응용 프로그램의 재사용 가능한 건물 요소를 구성 요소라고 합니다. 전자상거래 웹사이트를 위한 장바구니나 직원 관리 시스템을 위한 급여 애플리케이션과 같은 기능에 대해 생각해 보십시오.
구성 요소는 OSGi를 사용하여 다른 구성 요소에서 구현을 숨기고 서비스를 통해 필요한 데이터만 제공할 수 있습니다.
이것은 구성 요소가 액세스해서는 안 되는 데이터를 의도하지 않게 변경하는 것을 방지하고 종속성을 관리합니다.
OSGi 응용 프로그램의 구성 요소 간의 모든 연결은 이상적인 세계에서 서비스를 통해 이루어집니다. Java 패키지에는 서비스에 대해 지정된 API가 포함되어 있습니다.
서비스 제공자와 고객 간의 협업을 위해서는 API를 구성하는 클래스 및/또는 인터페이스를 사용해야 합니다.
모든 OSGi 구성 요소는 번들로 함께 패키지화되어 있으며, 각 구성 요소에는 기능에 필요한 리소스가 포함되어 있습니다. 번들은 환경에서 무엇이 필요하고 무엇을 할 수 있는지에 대해 매우 명확합니다.
장점
- OSGi 애플리케이션은 외부 번들 저장소에 액세스할 수 있습니다.
- 프레임워크는 모듈 수준에서 서비스 지향 설계를 허용합니다.
- 이를 통해 타사 라이브러리를 표준화하고 쉽게 통합할 수 있을 뿐만 아니라 애플리케이션 번들의 버전 및 종속성을 관리할 수 있습니다.
- 응용 프로그램은 변화하는 요구 사항에 더 적합하고 이식성이 높으며 재설계가 더 빠릅니다.
- A 웹 애플리케이션 Java EE 프로그래밍 모델과 프레임워크의 통합 덕분에 동적 수명을 가진 버전이 지정된 OSGi 번들 그룹으로 배포할 수 있습니다.
- 애플리케이션의 일부로 타사 라이브러리로 설치되는 대신 프레임워크는 애플리케이션 서버 런타임의 일부로 제공되는 표준화된 형식으로 Spring Framework의 선언적 어셈블리 및 간소화된 단위 테스트를 제공합니다.
- 동적 수명 주기가 있는 여러 버전의 번들로 구성된 기업 애플리케이션의 경우 프레임워크는 격리를 제공합니다.
- 여기에는 여러 응용 프로그램에서 사용하는 공유 공통 및 버전이 지정된 번들을 저장할 수 있는 통합 번들 저장소가 포함되어 있어 각 응용 프로그램이 각 공유 라이브러리의 별도 복사본을 배포하는 것을 방지합니다.
OSGi Felix 스프링 시작하기
리소스 얻기
Apache Karaf의 최신 버전을 다운로드하여 이 사이트, 우리는 OSGi 모험을 시작할 수 있습니다.
OSGi 사양의 Apache 구현인 Apache Felix를 기반으로 하는 Apache Karaf는 OSGi 기반 애플리케이션을 위한 플랫폼을 제공합니다.
Karaf는 플랫폼과 통신할 수 있게 해주는 명령줄 인터페이스와 같이 OSGi에 익숙해지는 데 도움이 되는 Felix 위에 다양한 유용한 기능을 제공합니다.
번들 진입점
애플리케이션은 OSGi 환경에서 실행되기 전에 OSGi 번들로 패키징되어야 합니다. 또한 애플리케이션 진입점을 지정해야 합니다. 표준 public static void main(String[] args) 함수가 아닙니다.
먼저 "안녕하세요" OSGi 기반 애플리케이션.
기본 OSGi API 종속성을 설정하는 것으로 시작합니다.
OSGi 런타임은 종속성에 대한 액세스 권한을 가지므로 번들에 포함할 필요가 없습니다. 따라서 공급됨으로 표시됩니다.
이제 간단한 HelloWorld 클래스를 만들어 보겠습니다.
번들의 진입점 역할을 하는 클래스는 OSGi 제공 BundleActivator 인터페이스를 구현해야 합니다.
이 클래스를 포함하는 번들이 시작될 때 OSGi 플랫폼은 start() 함수를 호출합니다. 다른 한편으로는 번들이 중단되기 직전에 stop() 함수가 호출됩니다.
각 번들은 하나의 BundleActivator만 가질 수 있음을 잊지 마십시오. 두 가지 방법 모두 제공된 BundleContext 객체를 사용하여 OSGi 런타임과 통신할 수 있습니다.
번들 생성
필요한 변경을 수행하여 pom.xml을 진정한 OSGi 번들로 만드십시오.
우리는 먼저 우리의 목표가 번들을 생산하는 것임을 분명히 표현해야 합니다.
그런 다음 Apache Felix 커뮤니티의 호의에 따라 maven-bundle-plugin을 사용하여 HelloWorld 클래스를 OSGi 번들로 패키징합니다.
번들의 MANIFEST 파일에 포함하려는 OSGi 헤더의 값은 지침 섹션에 지정됩니다.
Bundle-Activator는 실제로 번들을 시작 및 중지하는 데 사용할 BundleActivator 솔루션의 적절한 자격을 갖춘 이름입니다. 방금 만든 클래스와 호환됩니다.
OSGi 헤더는 아니지만 Private-Package 헤더는 플러그인에 패키지를 번들에 추가하도록 지시하지만 다른 플러그인에서는 액세스할 수 없도록 합니다. 번들을 생성하려면 mvn install 명령을 사용해야 합니다.
번들 설치 및 실행
다음 명령을 실행하여 Karaf를 시작합시다.
여기서 "KARAF HOME"은 Karaf가 설정된 폴더를 나타냅니다. Karaf 콘솔 프롬프트가 나타나면 다음 명령을 사용하여 번들을 설치할 수 있습니다.
로컬 Maven 저장소를 사용하는 것은 Karaf가 번들을 로드하도록 지시하는 방법입니다.
번들의 숫자 ID를 반환하면 Karaf가 이를 기록합니다. 이 ID는 이전에 설치된 번들 수에 따라 다를 수 있습니다. 이제 번들이 성공적으로 설치되었으며 실행 명령은 다음과 같습니다.
패키지를 실행하는 순간 "Hello World by Jay"가 표시됩니다. 이제 다음을 사용하여 번들을 중지하고 제거할 수 있습니다.
콘솔에 "Goodbye World by Jay"가 표시됩니다.
결론
개발자는 OSGi를 사용하여 메인 프로그램의 다른 구성 요소로부터 보안 및 격리를 유지하면서 기존 웹 응용 프로그램에 새로운 기능을 쉽게 추가할 수 있습니다.
우리는 이 게시물에서 OSGi의 작동 방식, 장점 및 간단한 프로그램을 포함하여 OSGi에 대해 배웠습니다. OSGi를 자신의 애플리케이션에 통합하는 것은 어렵지 않습니다.
행복한 코딩!
댓글을 남겨주세요.