http://www.yes24.com/Product/Goods/3516046

 

실전 OSGi & Spring DM - YES24

자바에 대해서 초급 이상의 지식이 있는 개발자를 대상으로 OSGi를 설명한 책이다. OSGi를 배우는 도중에 발생하는 문제들에 대해서 가능한 많이 설명하고자 노력한 이 책은 OSGi 프레임워크의 기

www.yes24.com

원문: http://beyondj2ee.egloos.com/293629

 

BeyondJ2EE

 

beyondj2ee.egloos.com

최근에 제가 가장 관심을 갖고 있는 분야가 OSGi 입니다.
(특히 Spring DM Server ^^)
OSGi는 오래전부터 그들만의 리그 처럼 묵묵히 조용히 지내고 있었던
기술 이였습니다. 그러다가 최근에 스마트폰 광풍에 힘입어
구글 안드로이가 출시되면서 급 호감을 갖게 되었습니다.
(구글 안드로이드는 OSGi 플랫폼으로 구성되었죠)
거기다가 소형 가전기기 전용 플랫폼이였던 OSGi가
SpringSource에서 차세대 J2EE 플랫폼으로
Spring DM Server를 릴리즈 함으로 이제는 반드시
알아야 할 기술이 되었습니다.
그러면 과연 OSGi는 어느날 갑자기 안드로메다에서 온 기술일까요?
일반 블로그나 사이트에서 OSGi 관련 내용을 보면 개괄적인 내용과
다소 쉽게 이해가 가지 않은 개념(Bundle,Activator,Service)들에
대한 이론적 설명이 많았습니다.
그래서 제가 OSGi를 공부하면서 detail한 설명 보다
개발자로써 조금이나마 전체적인 맥을 잡고 OSGi에
대해서 두려움 없이 접근하시는데 도움이 되고자 말씀
드립니다.

    * OSGi's Feature

Apress Spring DM Server를 보면 아래와 같이 OSGi 특징에 대해서
기술되어 있습니다.

(1) OSGi는 전체 시스템를 restart 하지 않고 각가의 모듈을 동적으로 추가,변경,삭제를
할 수 있습니다.

(2) OSGi는 전체 시스템에 버전이 각각 다른 모듈을 동시에 사용 할 수 있습니다.

(3) OSGi는 각 모듈관에 의존성을 관리 합니다.

(4) OSGi는 SOA처럼 각 모듈을 서비스 레지스터리에 등록해서 필요한 한 곳에서
가져다가 쉽게 재사용 할 수 있습니다.


    * How to Use OSGi

위에서 저도 모르게 OSGi에 대한 개괄적인 설명을 했네요 쩝.
자 이제 글면 과연 OSGi를 어떻게 사용하는지 말씀 드리겠습니다.
외국에서는 OSGi Container라고 얘기를 합니다.
Container라함은 JVM 상에서 오브젝트에 대해서 생명주기
를 관리하는 서버라고 생각 하시면 됩니다.
비슷한 것들이 Servlet Container,EJB Container들이 있습니다.
(급 어려운얘기? Sorry)
쉽게 말해서 Servlet Container에서 동작하는 모듈을 만드려면
그냥 만드는 것이 아니라 Servlet을 만들어야만 동작하듯
OSGi Container도 마찬가지로 Bundle이라는 것을 만들어서 동작을
합니다.
OSGi 기동 방법은
java -jar org.eclipse.osgi._3.4.3....jar -console
이렇게 컨테이너를 띄우고 번들들을 인식하도록 하면 Container가
뜨면서 번들을 초기화 합니다. 마치 Servlet들을 초기화
하듯이 말이죠
이렇게 OSGi Container가 뜨고 나면 콘솔을 통해서 현재 등록된
번들의 상태를 화면을 통해서 볼 수가 있습니다.
마치 DOS상에서 커맨드를 치듯이 말이죠.
명령어를 통해서 번들을 추가하고,수정하고,삭제하고
즉 정리 하면 서블릿 Container 처럼 OSGi Container를
실행하고 OSGi에서 인식할수 있는 bundle 스펙을
구현해서 넣으면 됩니다. 그리고 위에서 동적으로
변경할수 있다는 얘기들은 마치 Servlet를 동적으로 추가,변경,삭제
할 수있다는 얘기와 같습니다.

    * OSGi Container 종류

Servlet 컨테이너도 jetty,tomcat,jboss 처럼 다양하게 있듯이
OSGi 컨테이너도 다양하게 있습니다.
Eclipse에서 제공하는 equinox,Apache에서 제공하는 Felix등
있습니다.
기본적으로 OSGi 스펙들을 구현한 Container들이며
자기 입맛에 맛는 Container를 사용 하시면 됩니다.
저는 개인적으로 아무래도 equinox를 사용합니다.
(이유인즉 spring dm이 이넘을 사용하거든요..)

    * Spring dm Server

SpringSource에서 OSGi 기반 J2EE 플랫폼이 Spring dm 입니다.
제가 정말 궁금한 것은 어떻게 OSGi가 어떻게 웹 어플리케이션을
지원할까 하는 문제 입니다. 물론 OSGi 자체에서 제공하는
Http 서비스가 있습니다.
하지만 제약사항이 많고 다소 허접합니다. 이유인즉
war 형식을 지원하지 않습니다. 아무래도 가전기기에 올라가다
보니 http 기능을 최소화 한것 같습니다.
그래서 우리가 사용하는 war 형태의 어플리케이션을
구동하기를 원합니다.
OSGi를 모른 상태에서 생각이 톰캣안에서 OSGi를 넣는건가
이런 생각을 했습니다.
하지만 그런 개념이 아니였습니다.
대장은 OSGi가 일단 구동 합니다. 그리고 톰캣이나 jetty 서버를
번들화 합니다.(이건 이미 spring source respository에 maven
형태로 되어 있습니다.)
그리고 내가 만든 웹 어플을 번들로 추가 합니다.
즉 OSGi 컨테이너가 구동하고
tomcat server bundle,my war bundle
이렇게 구동합니다. tomcat server bundle은 현재 번들 중에서
패키징이 "war"이거나 "WEB-INF" 디렉토리가 있으면
찾아서 디플로이 합니다.
모든게 OSGi 컨테이너안에서 이루어 집니다.

    * 마무리

참 제가 생각해도 주저리 주저리 적었지만 OSGi에 대해서
블러깅 한다는게 정말 한계가 있네요
앞으로 OSGi 관련해서 틈틈히 블로깅 하려고 합니다.
아무튼 OSGi 컨테이너를 사용하고 거기에 동작하는 모듈 스펙은
bundle이며 컨테이너에서 동작하기 때문에 당연히 생명주기가 있겠죠
생명주기에 맞게 처리 하고 콘솔을 통해서 restart 없이
모듈상태를 바꾸고 이게 대부분이라고 할 수있습니다.
이런 관점으로 OSGi를 생각하고 접근 하시면 좀더 편하게
이해 하실것 같습니다.
우리나라에서 "OSGi & Spring DM" 책이 출간 되었습니다.
개인적으로 이책에 도움을 많이 받았습니다.
소스 중심이라서 좀 지루할 수 있지만 예제가 정말 잘되어
있어서 좋습니다.
꼭 읽어 보시기 바랍니다.

 

+ Recent posts