지난 주에 레코딩한 SpringDM  for OSGi의 첫번째 스크린캐스트가 IBM DeveloperWorks에 공개됐다. 영회의 OSGi 기초 시리즈(part1,part2,part3)에 이은 SpringDM 시리즈 3개중 첫번째이다. OSGi나 SpringDM모두 생소한 개념이고 기술적인 설명을 하자면 엄청난 분량이 요구된다. 그것을 제한된 시간의 스크린캐스트 내에서 설명하기 위해서 간결하지만 가장 핵심적인 개념과 그 구현코드를 시연하는 것을 목표로 삼았다.

첫번째 시리즈의 주제는 OSGi Dynamic Service와 SpringDM의 관계이다. 어쩌면 SpringDM이 왜 필요한가에 대한 설명일 수도 있겠다. 핵심은 POJO 프로그래밍이다. 내용은 스크린캐스트를 보면 잘 나와있다. 이번에 하고 싶은 얘기는 Spring이 OSGi의 부족한 부분을 어떻게 보완해주는 가이다. 다음번에는 반대로 스프링 입장에서 OSGi의 필요성을 어떻게 SpringDM이 충족시키는가에 대해서 설명할 생각이다.

내용에도 나오지만 기본 OSGi 번들과 서비스에 대한 개념이 필요하다. SDM/OSGi를 처음 접한다면 영회의 part1,2,3을 반드시 먼저 보도록. 혹시 부족함을 느낀다면 영어로 된 자료로 http://www.theserverside.com/tt/articles/article.tss?l=OSGiforBeginners 도 볼만하다. 내가 가장 자주 권장하는 기초 OSGi tutorial인 http://neilbartlett.name/blog/osgi-articles/ 도 적극 추천한다.

DeveloperWorks의 스크린캐스트 플레이어가 좋긴한데 화면 사이즈가 작다. 기본 사이즈에서는 1024×768화면에서 레코딩된 코딩 시연은 보기가 불가능하다. 플레이어의 Full 버튼을 이용하면 크게 볼 수 있다. 다만, 사용하는 해상도에 따라서 지나치게 커져서 역시 폰트가 뭉개지는 현상이 있을 수 있다는 것이 조금 아쉽다. 혹시 깨긋한 원본사이즈로 보고 싶은 분들이 있다면 "퍼가기"메뉴의 링크주소 안에 나와있는 동영상파일을 바로 다운 받아서 플래쉬 무비플레이어(flvplayer)나 곰플레이어 등으로 보는 방법도 있다.

SpringDM과 관련된 궁금증이 있다면 KSUG의 포럼에 오면 이런 저런 SDM/OSGi 전문가들이 있으니 좋은 정보를 얻을 수 있을 것이다.

본격적인 Enterprise OSGi 시대의 표준이 될 OSGi 4.2의 스펙 작업이 한창이다. Craig에 따르면 OSGi의 다음버전인 4.2의 earlydraft에 소개된 "A Component Model for OSGi"의 내용은 SpringDM 그 자체를 옮겨놓은 듯 하다고 한다. OSGi Alliance와 초기부터 긴밀하게 함께 작업해온 SpringSource 팀이 내놓은 결과물이다.

스펙의 내용을 살펴보면 SpringSource의 Adrian Colyer가 실질적인 스펙을 주도하고 있음을 알 수 있다. Gavin King이 주도했던 EJB3의 초기 엔티티빈(지금은 JPA)의 스펙을 볼 때와 비슷한 느낌이다. EJB3 CMP = Hibernate3라는 오해(과연 오해일까?)를 불러오기도 했을 정도니까.

다음은 OSGi 스펙에 나와있는 새플 코드들이다. 어디서 많이 본 것 같지 않은가?

<component id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"  
      destroy-method="close"> 
   <!– results in a setDriverClassName(String) call –> 
   <property name="driverClassName"> 
     <value>com.mysql.jdbc.Driver</value> 
   </property> 
   <property name="url"> 
     <value>jdbc:mysql://localhost:3306/mydb</value> 
   </property> 
   <property name="username"> 
     <value>root</value> 
   </property> 
   <property name="password"> 
     <value>masterkaoli</value> 
   </property> 
</component> 

 

<component id="compOne" class="ExampleComponent" depends-on="manager,accountDao">
  <property name="manager" ref="manager" />
</component>
<component id="manager" class="ManagerComponent" />

 

<service ref="compToBeExported" interface="com.xyz.MessageService"/>
<component id="compToBeExported"  scope="bundle" class="com.xyz.MessageServiceImpl"/>

 

스펙의 내용을 살펴보면 SpringDM의 개념이 그대로 잘 녹아져 있다. 스프링 스타일의 IoC/DI도 사용할 수 있는데 단지 <bean>태그를 <component>로 바꾸기만 하면 된다. 결국 OSGi 4.2의 Component Model 스펙은 SpringDM의 수퍼셋이 될 듯 하다. SpringDM의 그것을 가장 잘 구현하고 확장한 기술이 될테고.

 

다만, 워낙 많은 벤더와 오픈소스 팀들이 치열하게 저마다 OSGi를 공략하려고 발벗고 나서고 있고, 제각각 자기만의 component model을 들고 나오고 있으니 앞으로 최종 스펙까지 치열한 태클이 예상되기도 한다. 하지만 워낙 일찍 시작해서 지금은 멀찍이 앞서 나가고 있는 SpringDM이고 또 BEA 같은 벤더들이 자사 제품에 적용해주면서 힘을 실어주고 있으니 SpringDM = OSGi 4.2가 되는 것은 매우 가능성이 높아 보인다.

 

워낙 표준이 무시되는 시대이니 엔터프라이즈 OSGi기술이 표준을 따르지 않고 제각각 OSGi 기반의 독립적인 기술을 들고 나올 것도 충분히 예상된다. 벌써 SpringDM이 무슨 무슨 기술을 배꼈다고 투덜거리는 Geronimo 팀도 있고, Enterprise OSGi 자체를 자기들이 직접 새로 설계하겠다는 JBoss팀도 있고, iPOJO라는 나름 독특한 component model을 가지고 있는 Apache Felix팀도 있으니 말이다.

 

올해 초 JCO컨퍼런스에서 OSGi를 발표했을 때 예견했던 것들이 이제 하나 둘 씩 그 정체를 드러내고 있다. 다음 세대 기술을 미리 준비하려는 개발자라면 지금 당장 OSGi/SpringDM을 공부하는 것이 좋을 것이다.

OSGi는 이제 신기술 매니아 내지는 한가한 블로거들이 떠들어대는 buzzword가 더 이상 아니다. JSR에서 관련 기술들이 구체적으로 논의되고 있고 대부분의 주요 자바 벤더들과 오픈소스 프로젝트들이 열정적으로 동참하고 있는 손에 잡히는 실체이다. OSGi에 대해 잘 정리된 가이드를 하나 발견했다. 글에 나오는 링크를 따라서 한번 훑어본다면 현재 OSGi의 흐름을 이해하는데 많은 도움이 될 것이다.

 

이클립스에서 제공하는 OSGi/Equinox Portal도 좋은 리소스가 많다. Equinox를 이용한 server-side 개발에 관한 좋은 스크린캐스트데모들도 찾아볼 수 있다. 이번달 부터 KSUG와 I모 사이트에 영회가 공개할 "OSGi 스크린캐스트 시리즈"는 이보다 더 좋은 내용이 듬뿍 담겨있으리라 기대를 해본다.

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha