OSGi의 구성 요소 시스템은 어떤 이점을 제공합니까?
글쎄, 여기 꽤 목록이 있습니다.
복잡성 감소-OSGi 기술로 개발한다는 것은 번들 (OSGi 구성 요소)을 개발하는 것을 의미합니다. 번들은 모듈입니다. 그들은 다른 번들에서 내부를 숨기고 잘 정의 된 서비스를 통해 통신합니다. 내부를 숨기면 나중에 더 자유롭게 바꿀 수 있습니다. 이렇게하면 버그 수가 줄어들뿐만 아니라 올바른 크기의 번들이 잘 정의 된 인터페이스를 통해 기능을 구현하기 때문에 번들 개발이 더 간단 해집니다. OSGi 기술이 개발 프로세스에서 수행 한 작업을 설명하는 흥미로운 블로그가 있습니다.
재사용 – OSGi 구성 요소 모델을 사용하면 응용 프로그램에서 많은 타사 구성 요소를 매우 쉽게 사용할 수 있습니다. 점점 더 많은 오픈 소스 프로젝트가 OSGi를 위해 JAR을 준비합니다. 그러나 상용 라이브러리도 기성품 번들로 제공되고 있습니다.
현실 세계 -OSGi 프레임 워크는 동적입니다. 번들을 즉시 업데이트 할 수 있으며 서비스가왔다 갔다 할 수 있습니다. 보다 전통적인 Java에 익숙한 개발자는이 기능을 매우 문제가있는 기능으로보고 이점을 보지 못합니다. 그러나 실제 세계는 매우 역동적이며 동적 서비스를 제공하면 많은 실제 시나리오에 완벽하게 일치합니다. 예를 들어, 서비스는 네트워크에서 장치를 모델링 할 수 있습니다. 장치가 감지되면 서비스가 등록됩니다. 장치가 사라지면 서비스가 등록되지 않은 것입니다. 이 동적 서비스 모델과 일치하는 놀라운 실제 시나리오가 있습니다. 따라서 애플리케이션은 자체 도메인에서 서비스 레지스트리의 강력한 기본 요소 (등록, 가져 오기, 표현 필터 언어로 나열 및 서비스가 표시되거나 사라질 때까지 대기)를 재사용 할 수 있습니다. 이것은 코드 작성을 절약 할뿐만 아니라 전 세계 가시성, 디버깅 도구 및 전용 솔루션에 구현 된 것보다 더 많은 기능을 제공합니다. 이러한 역동적 인 환경에서 코드를 작성하는 것은 악몽처럼 들리지만 운 좋게도 대부분의 고통을 없애는 지원 클래스와 프레임 워크가 있습니다.
간편한 배포 -OSGi 기술은 구성 요소의 표준이 아닙니다. 또한 구성 요소의 설치 및 관리 방법을 지정합니다. 이 API는 많은 번들에서 관리 에이전트를 제공하는 데 사용되었습니다. 이 관리 에이전트는 명령 쉘, TR-69 관리 프로토콜 드라이버, OMA DM 프로토콜 드라이버, Amazon EC2 용 클라우드 컴퓨팅 인터페이스 또는 IBM Tivoli 관리 시스템처럼 간단 할 수 있습니다. 표준화 된 관리 API를 사용하면 OSGi 기술을 기존 및 향후 시스템에 매우 쉽게 통합 할 수 있습니다.
동적 업데이트 -OSGi 구성 요소 모델은 동적 모델입니다. 전체 시스템을 중단하지 않고 번들을 설치, 시작, 중지, 업데이트 및 제거 할 수 있습니다. 많은 Java 개발자는 이것이 안정적으로 수행 될 수 있다고 생각하지 않기 때문에 처음에는 이것을 프로덕션에서 사용하지 않습니다. 그러나이를 개발에 한동안 사용한 후 대부분은 실제로 작동하고 배포 시간이 크게 단축된다는 것을 깨닫기 시작합니다.
적응 -OSGi 구성 요소 모델은 구성 요소의 혼합 및 일치를 허용하도록 처음부터 설계되었습니다. 따라서 구성 요소의 종속성을 지정해야하며 선택적 종속성을 항상 사용할 수있는 환경에 구성 요소가 있어야합니다. OSGi 서비스 레지스트리는 번들이 서비스를 등록, 가져 오기 및 청취 할 수있는 동적 레지스트리입니다. 이 동적 서비스 모델을 통해 번들은 시스템에서 사용 가능한 기능을 찾고 제공 할 수있는 기능을 조정할 수 있습니다. 이를 통해 코드를보다 유연하고 탄력적으로 변경할 수 있습니다.
투명성- 번들 및 서비스는 OSGi 환경에서 일류 시민입니다. 관리 API는 번들의 내부 상태 및 다른 번들에 연결되는 방법에 대한 액세스를 제공합니다. 예를 들어, 대부분의 프레임 워크는이 내부 상태를 보여주는 명령 셸을 제공합니다. 특정 문제를 디버깅하기 위해 응용 프로그램의 일부를 중지하거나 진단 번들을 가져올 수 있습니다. 수백만 줄의 로깅 출력을보고 굳 히지 않고 OSGi 응용 프로그램을 라이브 명령 셸로 디버깅 할 수 있습니다.
버전 관리 -OSGi 기술은 JAR 지옥을 해결합니다. JAR 지옥은 라이브러리 A가 라이브러리 B; 버전 = 2에서 작동하지만 라이브러리 C는 B; 버전 = 3에서만 작동하는 문제입니다. 표준 Java에서는 운이 좋지 않습니다. OSGi 환경에서 모든 번들은 신중하게 버전이 지정되며 협업 할 수있는 번들 만 동일한 클래스 공간에서 함께 연결됩니다. 이를 통해 번들 A와 C는 모두 자체 라이브러리와 함께 작동 할 수 있습니다. 이 버전 관리 문제로 시스템을 설계하는 것은 좋지 않지만 경우에 따라 생명을 구할 수 있습니다.
단순성 -OSGi API는 놀랍도록 간단합니다. 핵심 API는 하나의 패키지이며 30 개 미만의 클래스 / 인터페이스입니다. 이 핵심 API는 번들 작성, 설치, 시작, 중지, 업데이트 및 설치 제거에 충분하며 모든 리스너 및 보안 클래스를 포함합니다. API가 거의없는 기능을 제공하는 API는 거의 없습니다.
작음 -OSGi 릴리스 4 프레임 워크는 약 300KB JAR 파일로 구현할 수 있습니다. 이는 OSGi를 포함하여 애플리케이션에 추가되는 기능의 양에 대한 작은 오버 헤드입니다. 따라서 OSGi는 매우 작은 장치에서 작은 장치, 메인 프레임에 이르는 광범위한 장치에서 실행됩니다. 최소한의 Java VM 만 실행하도록 요청하고 그 위에 거의 추가하지 않습니다.
빠름 -OSGi 프레임 워크의 주요 책임 중 하나는 번들에서 클래스를로드하는 것입니다. 전통적인 Java에서는 JAR이 완전히 표시되고 선형 목록에 배치됩니다. 클래스를 검색하려면이 목록을 검색해야합니다 (종종 매우 길지만 150은 드문 일이 아닙니다) 반대로 OSGi는 번들을 사전 배선하고 각 번들에 대해 어떤 번들이 클래스를 제공하는지 정확히 알고 있습니다. 이러한 검색 부족은 시작시 중요한 속도 향상 요소입니다.
게으른- 게으른 소프트웨어가 좋고 OSGi 기술에는 실제로 필요할 때만 작업을 수행 할 수있는 많은 메커니즘이 있습니다. 예를 들어 번들을 열성적으로 시작할 수 있지만 다른 번들이이를 사용할 때만 시작되도록 구성 할 수도 있습니다. 서비스는 등록 할 수 있지만 사용할 때만 만들 수 있습니다. 이 사양은 엄청난 런타임 비용을 절약 할 수있는 이러한 지연 시나리오를 허용하도록 여러 번 최적화되었습니다.
보안 -Java는 맨 아래에 매우 강력한 세분화 된 보안 모델이 있지만 실제로 구성하기가 매우 어려웠습니다. 결과적으로 대부분의 안전한 Java 응용 프로그램은 보안이 없거나 기능이 매우 제한적인 이진 선택으로 실행됩니다. OSGi 보안 모델은 세분화 된 보안 모델을 활용하지만 번들 개발자가 요청 된 보안 세부 사항을 쉽게 감사 양식으로 지정하도록하여 환경 운영자가 완전히 책임을지게함으로써 유용성을 향상시킵니다 (원래 모델 강화). 전반적으로 OSGi는 하드웨어 보호 컴퓨팅 플랫폼을 여전히 사용할 수없는 가장 안전한 애플리케이션 환경 중 하나를 제공 할 것입니다.
비침 입성-OSGi 환경의 애플리케이션 (번들)은 자체적으로 남겨집니다. OSGi가 제한없이 VM의 거의 모든 기능을 사용할 수 있습니다. OSGi의 모범 사례는 Plain Old Java Objects를 작성하는 것이므로 이러한 이유로 OSGi 서비스에는 특별한 인터페이스가 필요하지 않으며 Java String 객체도 OSGi 서비스로 작동 할 수 있습니다. 이 전략을 통해 응용 프로그램 코드를 다른 환경으로 쉽게 이식 할 수 있습니다.
어디서나 실행- 됩니다. Java의 원래 목표는 어디에서나 실행하는 것이 었습니다. Java VM의 기능이 다르기 때문에 모든 코드를 어디에서나 실행할 수는 없습니다. 휴대폰의 VM은 뱅킹 애플리케이션을 실행하는 IBM 메인 프레임과 동일한 라이브러리를 지원하지 않을 수 있습니다. 처리해야 할 두 가지 문제가 있습니다. 먼저, OSGi API는 모든 환경에서 사용 가능한 클래스를 사용해서는 안됩니다. 둘째, 실행 환경에서 사용할 수없는 코드가 포함 된 번들은 시작하지 않아야합니다. 이 두 가지 문제는 OSGi 사양에서 처리되었습니다.
출처 : www.osgi.org/Technology/WhyOSGi