1.5. OSGi 번들
1.5.1. 개요
OSGi를 사용하면 애플리케이션을 번들로 모듈화할 수 있습니다. 각 번들은 외부 종속성을 명시적으로 선언하는 클래스, JAR 및 구성 파일의 밀접하게 결합된 동적으로 로드 가능한 컬렉션입니다. OSGi에서 번들은 기본 배포 형식입니다. 번들은 JAR에 패키지로 제공되는 애플리케이션이며 설치, 시작, 중지, 업데이트 및 제거할 수 있습니다.
OSGi는 번들 개발을 위한 동적이고 간결하며 일관된 프로그래밍 모델을 제공합니다. 개발 및 배포는 서비스의 사양(Java 인터페이스)을 구현에서 분리하여 간소화됩니다.
OSGi 번들 추상화를 사용하면 모듈에서 Java 클래스를 공유할 수 있습니다. 이는 정적 형태의 재사용입니다. 종속 번들이 시작될 때 공유 클래스를 사용할 수 있어야합니다.
번들은 OSGi 매니페스트 파일에 메타데이터가 있는 JAR 파일입니다. 번들에는 클래스 파일 및 선택적으로 다른 리소스 및 네이티브 라이브러리가 포함되어 있습니다. 번들의 어떤 패키지가 외부에 표시되는지(내보냄 패키지)와 번들에 필요한 외부 패키지(가져오기 패키지)를 명시적으로 선언할 수 있습니다.
모듈 계층은 번들과 다른 번들의 패키지 숨기기 간 Java 패키지 패키징 및 공유를 처리합니다. OSGi 프레임워크는 번들 간의 종속성을 동적으로 확인합니다. 프레임워크는 가져온 패키지 및 내보낸 패키지와 일치하도록 번들 확인을 수행합니다. 배포된 번들의 여러 버전을 관리할 수도 있습니다.
1.5.2. OSGi에서 클래스 로드
OSGi는 트리 모델이 아닌 클래스 로드에 그래프 모델을 사용합니다(JVM에서 사용됨). 번들은 런타임 클래스 로드 충돌 없이 클래스를 표준화된 방식으로 공유하고 다시 사용할 수 있습니다.
각 번들에는 고유한 내부 클래스 경로가 있으므로 필요한 경우 독립적인 단위로 사용될 수 있습니다.
OSGi에서 클래스 로드의 이점은 다음과 같습니다.
- 번들 간에 클래스를 직접 공유합니다. JAR을 상위 클래스 로더로 승격할 필요가 없습니다.
- 충돌 없이 동일한 클래스의 다른 버전을 동시에 배포할 수 있습니다.