OSGi가 무엇인가요?
프로젝트를 진행하면서 OSGi라는 용어를 처음 접하게 되었어요.
OSGi 기반, OSGi Container, OSGi Framework... 다 무슨 말이지?
궁굼해서 구글에 OSGi를 검색해 봤죠! 가장 먼저 본 자료는 역시 '위키백과'!
위키백과는 OSGi에 대해 이렇게 설명해주고 있어요.
OSGi 프레임워크는 독립적인 자바/가상 머신 환경에서 제공하고 있지 않는 세련되고, 완전하며 동적인 SOA(Service Oriented Architecture) 기반의 컴포넌트 모델을 구현한다.
...
OSGi (개방형 서비스 게이트웨이 이니셔티브) 은 모듈형 소프트웨어 프로그램과 라이브러리를 개발 및 배포하기위한 자바 프레임워크입니다. 각 번들은 강하게 결합하고, 동적으로 로딩이 가능한 class, jar 그리고 명시적으로 외부 종속성을 선언하는 환경설정파일의 모음입니다.
출처 : https://ko.wikipedia.org/wiki/OSGi
뭔가 어렴풋이 알 것 같으면서도 어렵네요.
OSGi가 진짜로 뭘까요?
먼저 OSGi는 '위키백과'에서 설명하고 있는 것처럼 SOA(Service Oriented Architecture) 기반으로
컴포넌트를 구성하고 관리하는 미들웨어 프레임워크에요.
그리고 자바 가상 머신(JVM) 환경에서 동작하기 때문에 OS나 플랫폼에 독립적이라고 할 수 있어요.
※ SOA(Service Oriented Architecture)
서비스 지향 아키텍처(SOA)는 네트워크에서 공통의 통신 언어를 사용하는 서비스 인터페이스를 활용하여 소프트웨어 구성 요소를 다시 사용할 수 있게 만드는 소프트웨어 설계 유형입니다.
출처 : https://www.redhat.com/ko/topics/cloud-native-apps/what-is-service-oriented-architecture
OSGi는 번들(Bundle)이라고 불리는 모듈 형태의 컴포넌트들로 구성되어 있어요.
이 번들(Bundle)을 통해 프로그램과 라이브러리들을 개발하게 되는데요.
예를 들어 회원 정보를 관리하는 모듈과 게시판을 관리하는 모듈을 각각의 번들(Bundle)로 개발하게 되는 것이죠.
OSGi는 이렇게 개발된 번들(Bundle)들을 OSGi Container라 불리는 컨테이너에 등록되고
사람들이 서비스를 필요로 할 때마다 Container에서 찾아서 제공해줘요.
(아! 번들이 등록되는 곳은 정확히 말하면 OSGi Container 안에 있는 Service Registry에 등록된답니다.)
즉, 하나의 프로젝트에 회원 관리, 게시판, 이메일 전송, 인증 등을 한꺼번에 개발하는게 아니라
각각의 모듈로 개발해서 OSGi를 통해 하나의 프로젝트처럼 관리할 수 있어요.
OSGi를 쓰면 뭐가 좋은가요?
가장 먼저 기능을 중복해서 개발하지 않아도 돼요.
모듈을 각각 개발하기 때문에 필요한 기능은 Container를 통해 호출해서 사용하기만 하면 돼요.
그 덕분에 코드 관리와 프로젝트 관리가 쉬워지겠죠?
그리고 모듈을 각각 개발하기 때문에 재사용성이 높아요.
다른 프로젝트를 진행하여도 필요한 모듈을 가져다 쓰면 되기 때문이죠!
그럼 게시판을 작성하는 모듈이 따로 있고 회원 정보를 관리하는 모듈이 따로 있다고 했는데
게시판을 작성할 때 작성자 정보는 어떻게 가져올까요?
이 역할도 OSGi 프레임워크, 조금 더 정확히 말하면 OSGi Container가 알아서 해줘요.
앞에서 이미 개발된 번들(Bundle)은 모두 OSGi Container에 등록된다고 했죠?
게시판을 작성할 때 작성자의 회원 정보가 필요한데 별개의 모듈로 개발되어 있네요.
그러면 게시판 모듈이 OSGi Container에 '지금 로그인한 회원 정보가 필요해요!'라고 요청하게 되고
OSGi Container는 Service Registry에 회원 모듈이 등록되어 있는지 확인하게 되요.
그리고 등록된 회원 모듈에서 정보를 가져와서 게시판 모듈에게 알려주는거죠.
이렇게 필요한 정보를 바인딩하여 각 모듈 간의 의존성을 관리해주는 역할을 해요.
개발자가 각 모듈 간의 의존 관계를 설정하지 않아도 되니 프로젝트를 개발하는데 효율적이에요.
그리고 프로젝트들은 보통 한 번 개발하고 끝나는 것이 아니잖아요?
그럼 더 좋은 성능을 위해, 발생한 문제를 해결하기 위해 모듈을 개선해야 돼요.
그런데 모듈이 필수적으로 개선되어야 하는데 개선된 모듈로 인해 어떤 기능을 사용할 수 없게 되면 큰일이겠죠?
이러한 문제를 해결하기 위해 OSGi는 Bundle의 버전을 관리해줘요.
버전 관리를 통해 혹시라도 개선된 번들(Bundle)로 인해 문제가 발생하지 않도록
이전 버전의 번들(Bundle) 기능을 사용할 수 있게 해주죠.
OSGi는 어디에서 사용되나요?
처음에는 셋톱 박스와 홈 게이트웨이를 위해 OSGi 프레임워크가 만들어졌어요.
그러나 OSGi 프레임워크를 계속 발전시키면서 다양하게 응용할 수 있다는 것을 알게되었고,
현재는 IDE, 애플리케이션 서버, 이메일 시스템, 컨텐츠 관리 시스템을 구현하는데 사용되고 있어요.
뿐만 아니라 응용 분야가 광범위해져서 IoT, 스마트 홈, 의료, 자동차, 에너지 관리를 넘어 로보틱스 분야까지
다양한 산업 분야에서 OSGi를 사용하고 있죠.
여러분들이 사용하고 있는 개발 툴(IDE)인 Eclipse나 IntelliJ도 OSGi를 사용하고
협업 툴인 Jira도 OSGi를 사용한다고 하니
우리도 모르는 사이에 OSGi를 이용하고 있다는 것을 알 수 있어요.
OSGi 구조(Architecture)
- Bundle
- Bundles are the OSGi components made by the developers.
- 개발자들이 구현하는 OSGi 컴포넌트
- services
- The services layer connects bundles in a dynamic way by offering a publish-find-bind model for plain old Java objects.
- 자바 객체에 대한 바인등 모델을 제공하여 번들을 동적으로 연결
- 즉, 번들 간의 의존성을 관리
- LifeCycle
- The API to install, start, stop, update, and uninstall bundles.
- 번들을 설치, 시작, 중지, 업데이터, 제거할 수 있는 API
- 번들의 Life Cycle을 관리
- Modules
- The layer that defines how a bundle can import and export code.
- 번들이 코드를 가져오고 내보낼 수 있는 방법을 정의하는 계층
- Security
- The layer that handles the security aspects.
- 보안 관리를 위한 계층
- Execution Environment
- Defines what methods and classes are available in a specific platform.
- 특정 플랫폼에서 사용할 수 있는 클래스와 메서드를 정의
'IT 잡학다식' 카테고리의 다른 글
로지텍 블루투스 키보드 fn(Function) 키 설정 해제하기 (1) | 2024.12.24 |
---|---|
Windows 10 설치 오류 : 0x800703EE (0) | 2024.12.23 |
Windows 자판 배열 전환 및 해제 방법 (0) | 2023.02.24 |
Windows 정품인증 워터마크 지우기 (0) | 2023.02.14 |
포틀릿(Portlet)이란? (0) | 2022.06.06 |