2008년 1월 27일 일요일

OSGi를 위한 Spring Dynamic Modules 릴리즈

OSGi를 위한 Spring Dynamic Modules 릴리즈 되었네요.

OSGi ... 예전 모바일 자바에서 많이 들었었던 용어인데, 이렇게 Spring에서까지 언급이 되어지니 다시금 자료를 찾아보는 시간을 갖게 만드네요.
OSGi : Open Service Gateway Initiative 약자로써 "가전제품이나 보안시스템 등의 장치들을 인터넷에 접속하는 표준방식에 관한 산업계의 계획입니다" 라고 정의 되어있기는 하지만 저는 단순히 기존에 서비스를 서버에서 내리지 않고도 실시간으로 설정파일에 대한 변경사항을 시스템에 적용시켜줄 수 있는 일종의 메커니즘이라고 생각합니다.

Spring 공식 웹사이트에서 읽어본데 의하면
"이런방식(OSGi 방식)으로 쓰여진 코드는 각 모듈에 대한 분리를 더 철처히 할 수 있도록 하며 또한 작동중인 시스템에 동적으로 모듈을 추가, 삭제, 업뎃 할 수 있게끔 한다. 이를 제외하고도 동시에 여러버전의 모듈을 디플로이 해주는 기능을 갖고 있다." 라고 하네요.

한마디로 여러모듈로 이루어진 F/W상에서 실시간으로 또는 동적으로 필요한 모듈을 올리고 내릴수 있다고 보면  될것 같습니다.
 
아직까지는 버젼이 1.0 이라 직접 프로젝트에 투입하여 사용하기는 시기상조라는 느낌이 들긴 하지만 지금까지 프로젝트를 해오면서 이런 기능들을 제공해주는 먼가가 있지 않을가 하는 생각도 많이 하게 되었습니다. 결국 OSGi (예전에도 많이 들어왔던 개념) 에 대한 Spring Dynamic Modules의 릴리즈로 이 모든 것이 가능 하게 되겠군요.

Spring DM 1.0 다운로드 링크
Spring DM 1.0 참고문서
Spring DM 1.0 JavaDOC
Spring DM 1.0 샘플 서비스들

2008년 1월 8일 화요일

Projection 설정시 결과를 Entity로 리턴받기

Critera에서 받아온 데이타를 자동으로 POJO에 매핑시켜 봅니다.

NativeSQL이나 HQL이나 모두 데이타를 쿼리하여 가져올수 있지만 조건에 따라 복잡한 쿼리문은 Criteria 로 작성하는것이 더욱 직관적이고 이해가 쉽습니다.

하지만 단일 테이블이 아닌 연관 테이블일 경우 (*)를 이용하여 전체 필드의 값을 쿼리해 오는것은 오버헤드가 많이 걸립니다. 그래서 업무에서는 페이지에 필수로 표시시켜줄 몇가지 항목들만 쿼리문속에 Projection을 이용하여 쿼리를 하게 됩니다.

하지만 Criteria를 사용하여본 분들은 알수 있겠지만 단순히 Projection 만 세팅하게 되면 디비에서 Fetch한 데이타를 Object 배열을 통하여 리턴하게 됩니다. 사실 Projection 설정시 순서만 정확히 설정해주고 Object 배열속의 데이타를 그 순서에 따라 View에 표시시켜주면 그뿐이지만 좀 특수한 데이타 타입일 경우 (예하면 Date 타입)에는 원하는 타입으로 정확히 매핑을 시켜주지 않습니다.

하이버넷 매뉴얼을 읽어보는던중 우연히 위 문제를 해결할수 있는 절묘한 방법을 찾을수 있었습니다.

또한 Criteria의 ResultTransformer 가 PassThroughResultTransformer로 변환되므로 결과치는 우리가 원하는 결과하고 많이 차이가 날수 있습니다. 그래서 궁극적으로 c.setResultTransformer(new AliasToBeanResultTransformer()); 이 문구를 이용하여 리턴받을 List속의 인스턴스는 개개의 Entity라고 명시를 해주어야 합니다. (seResultTransformer를 이용하여 세팅을 해주지 않으면 Object[] 로 결과를 리턴하게 됩니다.)
실제 사용되는 예제코드를 첨부합니다.

  ProjectionList projList = Projections.projectionList();
  projList.add(Projections.property("i.sqEmlrcv"), "sqEmlrcv");
  projList.add(Projections.property("o.name"), "name");
  projList.add(Projections.property("i.emlRcpnt"), "emlRcpnt");
  projList.add(Projections.property("s.dtReg"), "dtReg");
  projList.add(Projections.property("i.stSendI"), "stSendI");
  projList.add(Projections.property("i.cdEmlerr"), "cdEmlerr");
  projList.add(Projections.property("i.onRcpt"), "onRcpt");
  projList.add(Projections.property("i.onReply"), "onReply");
  cri.setProjection(projList);

  cri.setResultTransformer(new AliasToBeanResultTransformer(SentMailV.class));

2008년 1월 3일 목요일

그래픽 드라이버를 업그레드하여 3D, 재생 효과 높히기

단순한 그래픽카드 업그레드만으로 3D, 재생 효과를 높힐수 있습니다.

무언가 그래픽 카드의 성능때문에 잘 안된다거나, 게임 도중에 프레임이 저하 된다거나 하는 경험을 해보신 분이라면 질 좋은 비디오 드라이버와 자신의 컴퓨터 환경에 맞는 최적화가 제법 많은 변화를 가져온다는 것을 아실 것입니다.
그래도 저도 함 저의 컴터에 새로운 그래픽 드라이버를 마춰 보았습니다.

http://www.tweakforce.com/ 사이트에 접근하여 최신버젼의 그래픽 드라이버를 다운로드 받았습니다. 저의 그래픽카드는 NVIDIA GeForce 8400M GT 였으므로 Xtreme-G Mobile nVidia Drivers 이 카테고리속의 Vista 32용 Xtreme-G Mobile 163.67 Vista 32bit 이 파일을 다운로드 받았습니다.

아래 스크린샷은 드라이버 업그레드후 찍은 겁니다.
그래픽이 5.8 -> 5.9로
게임 그래픽이 5.1-> 5.3 으로 업그레드 되어있네요.^^
나름 만족해 하면서 쓰고 있습죠.ㅎㅎ

사용자 삽입 이미지