월별 글 목록: 2008년 4월월

OSGi 시작하기 1 – 첫번째 번들 : [번역] Getting started with OSGi – Your First Bundle

다소 늦은감이 있지만, EclipseZone 에 연재되었던 Neil Bartlett 의 연재 글 “Getting started with OSGi” 를 번역하려고 합니다. OSGi 기술에 대한 입문용 강의로는 가장 괜찮은듯 합니다. 혹시 오탈자나 이상한 번역이 있으면 댓글로 남겨주세요.

또한, Neil 이 새로 쓰고 있는 무료 OSGi 책(CC by-nc-sa를 따릅니다) 인 “OSGi in Practice”Neil 에게 허락을 받아서 번역 작업 중인데요. 번역이 끝나는 대로 블로그에 공개할 예정입니다. 사실 OiP를 먼저 하려고 했는데, 시작하는 OSGi 개발자 들에게 도움이 될듯하여 먼저 해둡니다.

OSGi 는 “Dynamic Module System for Java” 라고 불리며, 다양한 활용도를 가지는 자바기반의 서비스 플랫폼입니다. Eclipse 내부가 OSGi 를 이용해서 만들어 지고 있으며, 확장이 쉬운 구조로 인해 임베디드 디바이스 부터 서버 기반까지 적용폭을 넓혀 나가고 있습니다. 2008년에 배워둬야 할 Java 기술 5가지중 하나 이기도 합니다. ( 다른 4개는 Cloud Computing,Groovy,GWT,JCR) 근래에는 Spring Framework 이 OSGi 를 지원하는 SpringDM을 발표하면서 수많은 Spring 사용자분들도 관심을 많이 가지고 계신 듯 합니다.

또한 제가 관심두고 있는 IBM Rationale 의 Jazz Platform 과 Team Concert가 OSGi 를 기반으로 하고 있기도 하고 해서, 제가 가장 주목하고, 열심히 공부 하고 있는 기술이기도 합니다. ^^; 잡설이 길었네요. 하여튼 앞으로는 OSGi , Java , Jazz 에 관련 된 글들을 블로그에 간간히 적어보려구 합니다. 기회가 되면 제가 직접 OSGi 강좌를 연재 해보고 싶은 마음도 있지만.. 언제가 될지 모르겠네요.


Getting started with OSGi : OSGi 시작하기 파트 1 – 당신의 첫번째 번들

저자 : Neil Bartlett < njbartlett at gmail dot com >
역자 : 권 정혁 < guruguru at gmail dot com >

글원본 : http://www.eclipsezone.com/eclipse/forums/t90365.html – Getting started with OSGi : Your First Bundle

다음 1-2주간, EclipseZone 에서 OSGi 에 관한 짧은 시리즈 글들을 연재할 예정입니다. 이 글들이 모여서 OSGi 프로그래밍 기술을 마스터 하는 쉬운 경로를 만들어 줄 것입니다. 하지만 각각의 글들은 단 한 개의 새로운 기술만을 소개할 것이며, 약 10분이내에 살펴볼 수 있을 것입니다. 또한 우리는 OSGi 개발이 얼마나 쉬운지를 보여주고 싶으므로, 개발을 위해 Eclipse 를 사용하지 않고 텍스트 에디터와 기본 커맨드 라인 툴 만을 사용할 예정입니다. 자, “Getting started with OSGi” 시리즈에 온 것을 환영합니다.

기본 작업환경을 만들어야 하므로, 첫 번째 글은 다른 글에 비해 다소 길어질 예정입니다. 시작하기 전에, 실행하기 위한 OSGi 프레임워크를 필요로 합니다. 우리가 선택할 수 있는 세 개의 오픈소스 구현 들이 있습니다. Apache Felix , Knopflerfish, 그리고 Equinox. 어떤 것을 선택하든 우리가 작성할 코드는 똑같겠지만 실행방법은 다소 다를 수 있습니다. 여기가 EclipseZone 이므로, 우린 Equinox 를 사용할 것이며, Equinox 는 Eclipse 자체가 사용하는 런타임입니다. 설치된 Eclipse 가 있다면 거기서 복사하실 수 있습니다. org.eclipse.osgi_3.2.1.R32x_v20060919.jar 파일을 찾고 빈 디렉토리로 복사하세요. (NB : 버전 번호는 어떤 Eclipse 버전이 설치되어야 있느냐에 따라 약간 다를수 있습니다. ) 만약 Eclipse 설치본이 없다면, http://download.eclipse.org/eclipse/equinox/ 에서 Jar 파일을 다운로드 할 수 있습니다.

명령들을 짧게 하기 위해, 이 Jar 파일의 이름을 equinox.jar 로 변경합시다. 우리의 개발디렉토리에서 커맨드창을 열고 아래의 커맨드를 실행합니다.

> java -jar equinox.jar -console

몇 초안에, osgi> 프롬프트가 보일 것입니다. 축하합니다. 당신은 이제 OSGi 를 실행하셨습니다!

osgi> 프롬프트는 프레임워크를 컨트롤할 수 있도록 하는 Equinox 의 명령들을 실행할 수 있게 합니다. help 를 입력해서 명령 리스트를 보고, 그 중 몇 개와 놀아 보도록 하세요. 해보셨나요 ? 그럼 ss 를 입력해보세요. 이것은 가장 자주 사용하는 명령입니다. 이것은 “Short Status : 간략한 상태보기” 를 의미하며, 우리에게 설치된 번들의 리스트와 현재 어떤 상태인지를 보여줍니다. ( “번들:Bundle”은 OSGi 개념에서의 모듈입니다. 당신이 만약 Eclipse 개발자라면, 이것을 플러그인 이라고 알고 있을 수도 있습니다. 기본적으로 번들과 플러그인은 같은 것입니다. )

Equinox 는 다음과 같은 내용을 출력합니다.

Framework is launched.
id      State       Bundle
0       ACTIVE      system.bundle_3.2.1.R32x_v20060919

이것은 단 하나의 번들이 설치되어있고, 실행중인 상태(Active)이며 그것이 시스템 번들이라는 것을 알려줍니다. 이것은 OSGi 에서 특수한 번들이며 항상 존재하고, 프레임워크 자신을 나타냅니다.

자, 이제 우리의 번들을 작성해봅시다. 위와 같은 디렉토리에 HelloActivator.java 라는 파일을 만들고 아래의 코드를 그 파일에 복사하세요.

import org.osgi.framework.*;
public class HelloActivator implements BundleActivator {
  public void start(BundleContext context) {
    System.out.println("Hello EclipseZone Readers!");
  }
  public void stop(BundleContext context) {
    System.out.println("Goodbye EclipseZone Readers!");
  }
}

번들은 또한 자신의 다양한 메타데이터 정보(이름,버전과 같은)를 가지고 있는 Manifest 파일을 필요로 합니다. HelloWorld.mf 라는 파일을 만들고 아래의 텍스트를 그 파일에 복사하세요. 이 파일이 마지막에 꼭 한 개의 빈 줄을 가지도록 확인해 주세요, 그렇지 않으면 Jar 커맨드 라인툴이 이 파일을 잘라먹을 겁니다.(역자주 : 만약 번들 시작시에 Activator 가 이상하다는 에러가 난다면 아마 빈 줄을 넣는걸 빠트리신 걸 겁니다. )

Manifest-Version: 1.0
Bundle-Name: HelloWorld
Bundle-Activator: HelloActivator
Bundle-SymbolicName: HelloWorld
Bundle-Version: 1.0.0
Import-Package: org.osgi.framework

자 이제 새로운 커맨드 창을 열고 ( OSGi 가 실행하도록 내버려 두기 위함입니다. ) 다음 커맨드를 이용하여 Jar 파일을 만듭니다.

> javac -classpath equinox.jar HelloActivator.java

> jar -cfm HelloWorld.jar HelloWorld.mf HelloActivator.class

이제 OSGi 콘솔로 돌아가서, install file:HelloWorld.jar 라고 입력합니다. 결과는 "Bundle id is 1" 일겁니다. 다시 ss 를 입력하면 아래와 같은 내용을 보실 수 있습니다.

Framework is launched.
id      State       Bundle
0       ACTIVE      system.bundle_3.2.1.R32x_v20060919
1       INSTALLED   HelloWorld_1.0.0

우리의 HelloWorld 번들이 설치되었습니다만 아직 실행상태(Active)는 아니네요. 이 상태가 무엇을 의미하는지는 차후의 글에서 살펴보기로 하고, 여기선 그냥 start 1 을 입력해서 번들을 시작하도록 합니다. “1” 은 첫 번째 컬럼에 나와있는 번들의 ID 입니다. 이렇게 입력하면 "HelloEclipseZone Readers!" 라는 메시지를 보실 수 있을 것입니다. 다시 stop 1 을 입력하면 "Goodbye EclipseZone Readers!" 를 볼수 있습니다. 지겨울 때까지 반복해보세요. 때때로 ss 를 입력해서 번들의 상태가 바뀌는 것을 보는 것도 잊지 마시구요.

이 안에서 무슨 일이 일어난걸까요 ? 우리의 코드는 BundleActivator 인터페이스를 구현하고, 프레임워크에게 우리한테 중요한 LifeCycle 이벤트를 알릴 수 있도록 하였습니다. 번들이 시작되면, 프레임워크는 start 메소드를 호출하고, 번들이 멈출 때 stop 메소드를 호출하여 줍니다. 이런 일 들은 Manifest 파일에 있는 "Bundle-Activator: HelloActivator" 에 의해 가능해 집니다. 위 라인이 프레임워크에게 우리 번들 안의 어떤 클래스가 Activator 인지를 알려줍니다. 일반적으로 우리는 풀 클래스 이름을 적어주지만, 게을러서 그냥 디폴트 패키지명을 사용했습니다.

이것으로 우리의 첫 번째 글을 마칩니다. 다음에 뵙겠습니다.

하루에 한가지 쇼핑몰 – RSS 로 편하게 보세요

약 40일전에 만들었던 “지름도우미 – 하루에 한가지만 파는 쇼핑몰 한번에 보기“에 너무나 많은분들이 관심보여주셔서 이제는 볼수 있는 사이트가 16개가 넘는 큰 페이지가 되어버렸습니다. 지름도우미 소개페이지에 꽤 많은 분들이 추가할 쇼핑몰도 올려주시고, 의견도 주셔서 몇주간 재미있게 작업한듯 합니다. RSS를 만들어달라고 하셨던게 생각이나서, RSS 페이지를 만들어 봤습니다. 원본 페이지가 복잡해서 RSS용으로 간소화 시켜볼려고 했는데 잘 되지를 않네요. 거의 여기 사이트에 와서 보시는것과 별반 다르지 않게 되었습니다만, RSS 를 원하시는 분들이 꽤 계신듯 해서 공개합니다.

지름도우미 로고 좀 웃기지만 RSS용 로고이미지도 하나 만들어 넣었구요. ^^;
RSS 주소는 http://feeds.feedburner.com/onedays 입니다.
버튼으로 HanRSS 에, BlogLines로 구독하기BlogLines에 추가됩니다.

테스트를 HanRSS와 BlogLines 로만 했기때문에, 다른 RSS 리더기에서 어찌 보일지 잘 모르겠습니다.
이상한부분이 있을시 리플남겨주시면 최대한 보기 좋도록 수정해보겠습니다. 그리고, RSS형식의 특성상 업데이트 되어도 잘 표시가 안되기때문에, 쇼핑몰별로 업데이트 시간이달라 현재 페이지와 달라 보일수도 있음을 염두에 두시기 바랍니다.

참고로 현재 보실수 있는 하루에 한가지만 파는 쇼핑몰들은 다음과 같습니다.
그러고보니, 이젠 사실 하루에 한가지는 아니네요. 몇일에 걸쳐서 몇가지를 특별할인가로 파는 쇼핑몰들.. ㅡ.ㅡ;;

http://www.oneaday.co.kr/ – 원어데이 : 충실한 아이템 선정으로 인기!
http://www.woot.com/ – 오리지널 사이트
http://woot.kr/ – 한국형? Woot 사이트 !
네이버 럭키투데이 – 포털의 발빠른 대응 !
http://www.48hour.co.kr/ – 특이하게 이틀간 같은 물건을 판매합니다.
http://shop.82cook.com/ – 살림정보 가득한 82쿡에서도 살림살이에 도움이 되는것들을 싸게팝니다.
TPL Korea – 국제택배사인 TPL Korea 에서 운영하는 1Day 1Deal
BuyLive One A Day – 쇼핑몰 바이라이브, iPod 터치/나노 같은 전자제품 포함 다양한 물건들을 특가판매
농수산홈쇼핑 Oh Happy Day – 월~금 5일간 하루에 하나씩 특가판매
체리야 – 오늘의 깜짝세일 – 화장품을 하루에 8가지씩 3시간마다 특가판매
다음 온켓 – 오늘만 이가격 – 원체 저렴한 상품을 더 저렴하게 파는 분위기가 강함 ( 만원이하 ?)
인터파크 – 오늘만 e가격 – 상품많은 인터파크는 하루에 총 7-8개씩의 특별할인 상품을 제공
GS이숍 – 오늘의 특가 – 매일 7개씩의 특별한 할인상품
GS이숍 – 금주의 특가 – 원어위크처럼 일주일간 다양한 특별세일상품
GS이숍 – 컴퓨터 주변기기 Today Special – 컴부품 매일 특별한 가격으로 (한제품은 3일간 진행)
카르페디엠 – 오늘을 즐겨라 – 하루상품,일주일상품,핸드폰상품 등 3가지 판매
DHC Korea – 타임 세일 샵 – 하루에 시간대를 나누어서 3-4개의 화장품들을 싸게 판매합니다.
1day fly – 하루에 한가지 – 역시 하루에 한가지 상품을 싸게 판매합니다.
Auction – One day sale – 옥션의 기존 패션상품을 아주 싸게 팝니다. 단 선착순 쿠폰배부라, 시간에 맞춰 움직이셔야 합니다.

심심풀이로 만들어본.. 4월14일 9시의 사이트 선호도 입니다. (4월14일 00시에서 9시까지의 통계입니다. )


Eclipse Content Assist 와 한영변환, Caps Lock 죽이기

Eclipse 의 Content Assist 단축키는 “Ctrl + Space” 입니다.

Eclipse Content Assist

위와 같이 입력수고를 덜어주는 매우 편한 단축키입니다. 이클립스 사용자라면 다들 알고계시겠지만 ^^

저는 개인적으로 한영전환 단축키로 “Shift + Space” 를 사용합니다. 이건 윈도우즈의 키보드 드라이버를 (종류 3) 으로 지정하면 사용이 가능합니다. 문제는 이렇게 할 경우 위의 Eclipse Content Assist 단축키가 전혀 먹지 않는다는 것입니다. 한글 입력은 해야겠구, 개발도 해야겠는데..

그럴때 쓸수 있는 유틸리티가 “ShiftSpace.exe” 입니다. 구창민 이라는 분이 만드신것입니다. 몇년동안 써왔는데 이제서야 이 자리를 빌어 고맙다는 말씀드립니다. 메모리를 8메가 차지하는 상주App 이지만 저에겐 그 이상의 가치가 있습니다.

ShiftSpace.exe 내려받기

실행하면 조용히 트레이바에 키보드 아이콘이 생기면서 윈도우 실행시마다 자동 실행되도록 시작프로그램에 까지 등록이 됩니다. (현재 실행한 위치의 경로로 등록되므로, 내려받으셔서 계속 실행가능한 디렉토리에 복사한후 실행하시기 바랍니다. )

여기에 하나 더 해서, 키보드에서 명당자리를 차지하고 있는 CapsLock 을 Ctrl로 이용해 봅니다.
Ctrl 과 CapsLock 을 바꾸는 레지스트리는 많이 있지만, 그럴경우 익숙해져버린 손에 무리가 가게되므로.. CapsLock 은 Ctrl 로 지정하고, 106키 키보드의 경우 우측 윈도우키와 Ctrl 안에 있는 Menu 키를 CapsLock 으로 지정해서 Menu키를 없애버리고 Caps Lock 과 원래의 Ctrl 까지 두개의 좌측 컨트롤키를 가지게 합니다. Menu 키가 생긴이후로 눌러본건 아마 마우스가 고장났을때 뿐인듯 합니다. 그것도 그나마 Shift + F10 단축키를 사용하는 경우가 더 많았던듯..

KeyTweak 내려받기

위의 KeyTweak 을 내려받고 실행하면 다음과 같은 화면이 뜹니다. (일부만 캡쳐했습니다.)

KeyTweak Window

여기서 원하는 키를 바꿔주면 됩니다. 화면에 위쪽보시면 제가 지정한 “CapsLock 을 Left Control 로” , “Menu 를 Caps Lock” 가 보입니다.

KeyTweak 용 CapsLock-2-Left Control Menu-2-CapsLock 설정파일 내려받기

그냥 위에 파일을 받으셔서 KeyTweak 에서 로드하시면 적용됩니다. 단, 모든 키맵 체인지는 윈도우 재부팅이 필요합니다.

이제 코드 타이핑하면서 Ctrl + Space 를 누르기 위해 손을 약간 내리는 일을 하지 않아도 됩니다.
HHK 키보드를 사면 이미 바뀌어있다고 하지만, HHK Pro 의 엄청난 가격이 절 고민스럽게 만드네요.