작년 Spring Experience에서 아드리안이 발표했던 OSGI에 관한 발표 영상이 조금 전에 올라왔습니다. 다음 한국 스프링 사용자 모임 세미나의 주제이기도 하니까... 미리 봐두면 좋겠다 싶어서. 예습 삼아 동영상을 보며 정리해보았습니다. 물론 영어라 많이 놓칩니다.

발표 순서는 다음과 같습니다.
1. OSGi란 무엇인가?
2. 어떤 도움을 주는가?
3. 어떻게 동작하는가?
4. Spring이 들어맞는 곳은 어디?
5. Spring-OSGi

1. OSGi란 무엇인가?
Open Services Gateway Initiative
자바를 위한 다이나믹 모듈 시스템

모듈 시스템?
시스템을 여러 모듈(번들)로 나눠 놓은 것
매우 엄격한 경계선(visibility role)
Resolution process(모듈 간의 종속성 해결)
Understand 버전잉

다이나믹?
런타임 시에 모듈들이 설치되고, 시작, 멈춤, 재설치, 수정이 가능하다.

그리고 서비스 지향적이기까지 하다.

2. 무엇이 어떤 도움을 주는가?(어떤 문제 해결에 도움이 되는가?)

무엇이?
Visibility
Versioning
Operatinal Control

Visivility
모듈들은 기본적으로 완전 블랙 박스다.
리플렉션이건 클래스로딩 트리커리건 안 통한다.
만약 다른 번들들에게 타입을 공개(expose)하고 싶다면 명시적으로 해야 한다.(버전과 함께)
번들은 하나 이상의 패키지를 공개(export) 할 수 있다.
오직 공개된(exported) 패키지들만 밖에서 참조할 수 있다.
- 개발 주기가 빨라지고,
- 독립적인 개발이 가능해 진다.
- 의도하지 않은 종속성이 생기지 않으며,
- 보안이 좋다.
사용자 삽입 이미지
Versioning
같은 타입의 모듈이 여러 개 있고, 그 중에 최신 버전으로 교체하고 싶다면, OSGI에서 런타임 때 이전 버전의 모듈을 새 버전의 모듈로 교체할 수 있다.

Operatinal Control
모든 모듈과 그들의 상태를 볼 수 있다.(JMX, OSGI 콘솔)
wiring에 관한 정보를 참조 할 수 있다.
새로운 번들 추가.
번들 활성화(서비스 퍼블리싱)
번들 비활성화(서비스 등록해지)
번들 리프래쉬
번들 멈추기
번들 제거하기.
- 이 모든 것들을 애플리케이션을 멈추거나 재시작 하는 일 없이 할 수 있다.

3. 어떻게 동작하는가?
번들 만들기
- 그냥 JAR 파일 만드는 거다.
사용자 삽입 이미지- 복잡한 툴이나 패키징은 필요 없다.
- Maven OSGI 플러그인
- 이클립스의 지원
    -이클립스에서 플러그인 만드는 것이 OSGI 번들 만다는 것이다.
    -Menifest 편집기

패키지 공개하기(Export-Package)
-Menifest  파일에 Export-Package 헤더를 사용하여 나타낸다.
-인터페이스와 구현체를 페키지로 분류해둬라.(어찌됐든, 이것이 베스트 프랙티스다!!)
-예) Export-Package: org.foo.service, org.bar.service
- 버전 넘버와 함께 공개하기
사용자 삽입 이미지
필요한 패키지 불러오기(Import-Package)
-역시 Import-Package 헤더 사용
-가장 최신 버전의 번들과 엮이게 된다.
-버전 제약 사항 기술하기
사용자 삽입 이미지
클래스로딩
- 플로우차트가 잘 안 보임. 발표 자료 구하고 싶어짐;

Resolutioning
- import와 Export 매칭 시키기
- 복잡한 알고리즘
- 가능한 최상위 버전으로 와이어링 함.

번들의 라이프사이클
사용자 삽입 이미지
BundleActivator

Service Registry
- 인터페이스를 기반으로 ServiceRegistry에 서비스를 공개할 수 있다.
- 번들들은 레지스트리에 등록된 서비스를 찾거나 엮을 수 있다.
- 런타임시에 서비스를 등록하거나 제거 할 수 있다.

JSR 277
- 자바 모듈 시스템
- OSGI의 RequireBundle과 비슷한 매커니즘이 있다.

JSR 291
- 자바 SE에서의 다이나믹 컴포넌트 서포트

======================================================================================
여기서 잠깐 자야겠습니다.
1시간 25분 19초 짜리 동영상인데 현재 45분 41초 까지 보면서 요약을 했습니다.
이 다음 부터는 본격적으로 Spring에 대한 내용으로 이어집니다.
4. Spring이 들어맞는 곳은 어디?
5. Spring-OSGi
두 개는 내일..