OSGi Service Platform Release 4 의 기본 개념을 이해할 수 있다.
OSGi 소개
OSGi 는 OSGi Alliance 에 의해 만들어진 Java 기반 원격 관리 플랫폼이다.
OSGi 의 특징은 다음과 같이 정리될 수 있다.
Java 플랫폼을 위한 모듈 시스템
Visibility Rules 과 Bundle 들간의 Dependency 관리 및 Versioning 등의 기능 포함.
동적 플랫폼
Bundle 의 Installing, starting, stopping, updating, uninstalling 같은 모든 동적인 동작이 모두 JVM 이 실행중에 일어남.
Service Oriented
Service 는 JVM 이 실행중일 때 등록되고 쓰여질 수 있음.
OSGi 의 핵심은 Application Life Cycle Management 모델에 관한 Framework 과 Service Registry 와 Execution Environment 와 Module 들이다. 이를 기반으로 많은 수의 OSGi 레이어와 API, 각종 서비스들이 정의되어 있다.
OSGi 를 통해 얻을 수 있는 이익은 다음과 같다.
JAR file hell 을 피할 수 있음.
Reuse code "out of the box"
Simplifies multi-team projects
Enables smaller systems
Manages deployments local or remotely
Extensive tool support
No lock in, many providers of core technology
including many open source
Very high adoption rate
OSGi 시작과 현재 상태
OSGi 는 처음에 다음과 같은 문제점들에 대한 대응을 하기 위해 시작되었다.
짧아진 제품주기, 폭증한 요구사항, H/W 와 O/S 에 따른 제품의 커스터마이징 범위 증가 등에 의해 S/W 복잡성이 증가했으며, 이로 인한 비용증가가 개발비용증가의 상당부분을 차지하고 있음.
표준화된 Library 들을 이용해서 많은 기능들을 구현해왔으나 이들 Library 를 사용하는데에 따르는 사용상 문제점도 같이 많아지고 있음.
UI 던 내부로직이던 매우 복잡해진 S/W 로 인해 테스팅 비용도 같이 상승했음.
이러한 문제점들은 여러 S/W 개발부품들을 통합하는 관점에 대한 표준화의 요구를 가져왔으며, OSGi 는 이러한 문제점에 대해 다음과 같은 해결책을 제시한다.
Java 가 상이한 플랫폼상에서 동일한 인터페이스를 제공하는 추상화 플랫폼을 만들듯이, OSGi 는 재사용 가능하고 상호작용이 되는 작은 컴포넌트들을 서로 엮어서 Application 을 만들어내는 기본적인 기능의 표준을 제공함.
OSGi 는 시스템 재시작이 없이도 다양한 네트워크상의 장치들간의 상호구성상태를 바꿀 수 있는 기능을 제공함. 이를 위해 모든 상호작용을 위해 컴포넌트 상호간을 동적으로 탐색하게 할 수 있는 서비스 지향적인 아키텍처를 제공해서 상호 의존성을 최소화함.
OSGi 기술에 의해 미리 만들어지고 테스트된 컴포넌트라면 필드상에서 바로 쓰일 수 있을 정도의 신뢰성을 제공함.
2000년 5월에 Release 1 이 발표되었고, 2007년 5월에 Release 4.1 이 릴리스되었다.
OSGi 를 이용해보기 위해 필요한 Core Framework 런타임으로는 Eclipse 의 Equinox 가 있다. Equinox 는 OSGi Service Platform Release 4 의 Core Framework 과 기타 부수적인 서비스들을 구현하고 있다.
OSGi Service Platform
OSGi Service Platform 은 Core Specification 과 Service Compendium 으로 구성된다.
Core Specification 은 OSGi Service Platform 을 규정하며, 필수 서비스 집합인 Framework Services 을 규정한다. 이를 구현한 것이 Framework 혹은 Core Framework 이다.
Service Compendium 은 기타 서비스들을 규정한다.
OSGi Service Platform 의 Architecture 는 다음 그림과 같다.
OSGi Core Framework
Bundle 을 위한 표준화된 기본 환경을 제공한다.
Framework 은 다음과 같은 Layer 로 나뉜다.
L0: Execution 환경은 Java 런타임에서 Bundle 이 실행에 대한 실행환경 규약이다. 애초에 Java ME 에만 초점이 맞춰져 있었지만, 이제는 Java SE 나 Java EE 로 확대되었다. 애초의 실행환경은 다음과 같이 규정되었었다.
Small Devices
Collaboration model
Continously up and running VM
Life cycle management
L1: Modules 레이어는 클래스 로딩 정책을 정의한다. Java 를 하위레이어로 두고 있으면서 기본 클래스패스 외에 모듈간의 상호조율에 대한 고려가 되어 있는 내부 클래스패스를 추가로 정의한다. 이것은 보안시스템, 공개되지 않은 시스템에 대한 배포등을 지원한다.
L2: Life Cycle Management 레이어는 Bundle 들을 동적으로 설치, 시작, 중지, 갱신, 제거시킨다. Bundle 은 기본적으로 Modules 레이어의 클래스 로딩에 의존하지만, 여기에 추가해서 Life Cycle Management 에서 실행중의 관리를 위한 기능을 Bundle 에 추가시킨다. Life Cycle 은 광범위한 의존성 메커니즘을 사용하며, 보안시스템으로 보호되어서 가상적으로 바이러스의 공격으로부터 안전하게 한다.
L3: Service Registry 는 계정기반으로 클래스들을 bundle 간에 안전하게 동적으로 공유할 수 있게 해서 설치와 제거를 안전하게 지원한다.
Framework Services
Core Framework 은 다음과 같은 Framework Service 들을 제공하며, 이들은 Framework 내에 포함되어 있다.
Permission Admin
Bundle 의 Permission 을 설정하는 서비스이다.
Package Admin
Bundle 들은 Class 와 Resource 를 포함한 Package 를 공유하는데, Bundle 들이 갱신되면 이 공유정보도 갱신되어야 한다. Package Admin 서비스가 이러한 정보를 관리한다.
Start Level
Bundle 들간의 시작에 관한 우선순위를 조정해서 동시에 혹은 선후로 시작해야 하는 Bundle 들의 집합을 정의한다.
URL Handler
Java 에는 URL Handling 에 대한 Provider Model 을 제공하지만, 이것은 OSGi 같은 Collaborative 한 환경에는 맞지 않는다. URL Handler 서비스는 Bundle 에게 새롭고 변형된 형태의 프로토콜을 다룰 수 있게 해준다.
OSGi Service Compendium
OSGi 에 참여하는 업체들은 OSGi Framework 상에 많은 서비스들을 정의하는데, 이 서비스들은 Interface 로 노출되며, Bundle 은 이 Interface 를 구현함으로써 해당 서비스로서 Service Registry 에 등록될 수 있다. 서비스의 클라이언트는 Service Registry 로부터 서비스를 검색할 수 있고, 서비스가 등록되거나 사라졌을 때에 대한 조치도 취할 수 있다.
이런 방식은 웹서비스와 비슷하기도 하지만, 웹서비스가 HTTP 로 연결되는 것과는 달리 OSGi 에서는 메소드 호출을 통해 이루어지는 차이점이 있다.
다음에 나오는 내용은 OSGi Release 4 에서 Framework Services 들을 제외한 나머지 서비스들에 대한 Specification 이다.
Log Service
정보와 경고, 디버그 정보나 에러의 기록을 담당한다. Log System 은 최초 수신처가 되며, 해당 로그에 관심있는 Bundle 들에게 해당 로그를 보낸다.
Http Service
Servlet Runner 서비스이다. OSGi 의 동적인 업데이트 기능을 통해 Http Service 는 재시작이 필요없고 원격으로도 새 Servlet 으로 업데이트가 가능한 웹서버가 된다.
Configuration Admin Service
설정관련 기능을 제공한다.
Metatype Service
Bundle 이 사용하는 각 Property 에 대해 컴퓨터가 이해할 수 있는 포맷으로 기술하는 기능을 제공한다.
Preferences Service
Windows 의 Registry 나 Java 의 Preferences 클래스와 같이 프로퍼티를 계층적으로 관리하는 역할을 한다.
User Admin Service
사용자에 대한 인증과 허용작업을 한다.
Wire Admin Service
설치가 된 후에라도 Bundle 들간에 상호접속정보를 Configuration File 로부터 읽어들여서 Bundle 들을 서로 연결해준다.
IO Connector Service
CDC/CLDC 의 javax.microedition.io 패키지를 서비스로 제공한다.
UPnP Deivce Service
Universal Plug and Play 은 가전제품의 통합표준이다. OSGi UPnP Service 는 UPnP 네트워크상의 장치를 Service Registry 에 매핑시킨다. 또는 OSGi 서비스들을 UPnP Network 에 매핑할 수도 있다.
Declarative Service
Service 를 publish/find/bind 할 때 필요한 정보를 기술하는 서비스를 제공한다.
Event Admin Service
많은 OSGi 이벤트들은 특정한 인터페이스를 가지고 있어서 일반적으로 이벤트를 수신하거나 거르기가 쉽지 않다. Event Admin 은 토픽기반 이벤트 매커니즘같은 일반화된 방식을 제공하며, framework 과 service 간의 이벤트 매핑기능도 제공한다.
Application Admin Service
OSGi Application 들이 각각 필요로 하는 실행환경에 대한 관리를 담당하는 서비스이다.
DMT Admin Service
OMA 는 OMA DM (Device Management) 규격을 DMT (Device Management Tree) Admin 서비스로 제공하고 있다.
Monitor Admin Service
Bundle 이 어떻게 상태정보를 제공해야 하는지와 관리 기능을 가진 Bundle 이 어떻게 각 Bundle 의 상태정보 위치를 알아내고 상태정보를 읽거나 설정할 수 있는지를 관리하는 서비스를 제공한다.
XML Parser Service
JAXP 를 보다 더 쉽고 편리하게 이용하게 해준다.
이 밖에 다음과 같은 내용을 규정하고 있다.
Device Access
Plug and Play 에서처럼 해당 Device 에 적절한 Driver 를 찾고 이를 구현하는 Bundle 을 다운로드하는 것을 관리한다.
Initial Provisioning
OSGi Service Platform 은 Management Agent 를 통해 원격 관리하는데, Management Agent 에 대한 내용을 규정한다.
Deployment Admin
OSGi 에서 배포파일포맷은 JAR/ZIP 이다. 여기에 추가해서 Deployment Admin 은 Deployment Admin 은 Deployment Package 를 제공하는데, 이것은 Bundle 들을 각각의 리소스와 같이 묶어서 한 번에 설치와 제거가 같이 될 수 있도록 한다.
Auto Configuration
Bundle 이 자동 구성될 수 있게 하기 위한 내용을 규정한다.
Foreign Application Access
OSGi Application 이 아닌 Application 과 연동하기 위한 내용을 규정한다.
Service Tracker
OSGi Service Platform 은 재기동없이 Bundle 을 관리할 수 있는데, 이를 위해 Bundle 들간의 Dependency 를 추적하는 내용을 규정한다.
Position
OSGi Application 의 물리적 위치정보를 제공하는 내용을 규정한다. GPS 와 호환될 수 있다.
Measurement and State
OSGi Bundle 을 계측할 수 있는 내용을 규정한다.
Execution Environment
OSGi/Minimum-1.1 실행환경과 CDC-1.1/Foundation-1.1 실행환경에 대한 내용을 규정한다.