스프링 3.1 빈 프로파일과 Environment

최근 스프링소스 블로그에 계속해서 스프링 3.1 m1에 추가한 최신 기능을 소개하는 글이 올라오고 있습니다. 회사를 옮긴 뒤로는 도무지 블로깅할 시간이 나지 않아서 많이 뜸해졌지만, 퇴근 길에 시간이 좀 생겨서 읽은 내용을 간략하게 요약해 봅니다. 시간나면 하나씩 실습해보고 올리겠습니다.

http://blog.springsource.com/2011/02/11/spring-framework-3-1-m1-released/

이 글이 시작인데, XML 기반 설정에서 빈 프로파일을 사용하는 방법을 설명하고 있습니다. 여기서 사용한 예제 코드도 공개했고, 해당 블로그 글에서 간략하게 소개해 주고 있는데, 개발 단계에서 사용하는 DataSource와 배포 단계에서 사용하는 DataSource  빈이 다를 때 빈 프로파일을 사용해서 해결하는 방법을 보여줍니다.

이 글을 읽으면서 두 가지에 감동했는데, 하나는 읽는 사람을 몰입시키는 순탄한 글솜씨와 아주 깔끔한 기능 설계입니다. 저도 이런 기능이 필요함을 느끼고 어떻게 해결해야 하나 고민을 했었는데 이것처럼 깔끔한 방법을 고안하진 못했었습니다. 역시 스프링소스 개발자들은 능력자라는 생각이…

http://blog.springsource.com/2011/02/14/spring-3-1-m1-introducing-profile/

이번 글은 첫번째 글에 이어지는 내용으로, 첫번째 글에서 했던 작업을 똑같이 자바 설정으로 하는 방법을 소개합니다. 3.1에는 본격적으로 자바 설정을 강화하려는 움직임이 너무도 뚜렸하게 보입니다. 인터페이스까지 활용해서 빈 프로파일을 활용하는 방법을 보는 순간.. 또 한번 감동했습니다.

http://blog.springsource.com/2011/02/15/spring-3-1-m1-unified-property-management/

이 글까지가 사실 상 하나의 묶음입니다. 빈 프로파일과 Environment로 묶음 이유도 그 때문입니다. 이전까지 시스템 프로퍼티와 Environment 프로퍼티를 사용할 수 있었는데 3.1 m1ㅂ 부터는 이 둘과 커스텀 프로퍼티 소스까지 묶어서 Environment라는 인터페이스로 사용할수 있어서 플레이스 홀더 활용성이 높아졌습니다. 그리고 이전까지 살펴봤던 빈 프로파일도 Environment에서 설정합니다.

그럼데 아직도 스프링  3.1 m1에서 살펴볼 주요 기능이 남았습니다.

  • 피쳐스팩과 MVC 자바 설정
  • 캐시 추상화

[하이버네이트] Hibernate Core 3.6.0.Final 나왔구나

참조: http://in.relation.to/Bloggers/HibernateCore360FinalRelease

하이버네이트가 코드를 Github로 옮기고 나서 첫 배포라고 합니다. 주요 내용은 다음과 같습니다,

– JDK 1.4 지원 중단

– hibernate-jmx와 hibernate-anntation을 hibernate-core 내부로 통합함

– 증진된 타입 지원, HHH-5138

– DTD 호스팅 변경, HHH-5485

– 새로운 시작문서를 비록한 문서 개선, Getting Started Guide

– 구분자, 컬럼 수준의 읽기/쓰기 표현식, 타입스탬프 버전 등을 지원하는 몇몇 애노테이션 개선

– 히스토리 엔티티를 작성하는 방법에 대한 대안책으로 새로운 이벤트 기능(ValidityAuditStrategy) 제공. 아담의 블로그 글 여기여기에서 자세한 내용 참조.

[GWT] GWT 2.1에 추가될 기능

참조: http://code.google.com/intl/ko-KR/webtoolkit/doc/latest/ReleaseNotes.html

GWT 2.1 M3에 다음 기능을 추가했다.

Data Presenration 위젯

방대한 데이터 집합을 다룰 때 굉장히 효율적인 뷰를 만들 수 있다. 이 위젯은 두 가지 설계상 장점을 지니고 있다. 하나는 데이터셋의 일부를 렌더링 할 수 있다. 따라서 사용자 입장에서는 뷰 초기화가 더 빨라진다. 다른 하나는 위젯이 ‘flyweight’ 패턴을 사용해서 다른 위젯의 컨테이너가 되는게 아니라 DOM에 추가될 HTML 덩어리를 만든다. 이렇게 해서 이벤트 처리 오버헤드를 줄일 수 있다.

MVP 프레임워크

MVP 프레임워크는 뒷단 데이터를 Data Presentation 위젯에 쉽게 연결해주는 애플리케이션 프레임워크다. 이 프레임워크를 사용해서 개발자는 데이터를 보여주는데만 집중하고, Acitivities와 ActivityManager가 “presenter” 역할을 맡아 자체 액션을 처리하고, RequestFactories가 모델 변경을 인식하고 전파할거다.

이런 스타일 앱을 쉽게 만들수 있도록 스프링 Roo 1.1 M1에서는 앱 컴포넌트와 GWT의 MVP 프레임워크와 연결할 때 필요한 반복적인 코드를 생성해 준다.

서버쪽 시간 추적

Speed Tracer는 성능 문제를 감지하고 고칠 수 있는 툴이라고 언급했었다. 지금까지 이런 문제 해결을 클라이언트 쪽 코드로만 제한됐었다.

Speed Tracer 1.0 M1에서는 이제 GAE와 TC 서버 DE에서 동작하는 앱의 서버쪽 타이밍 데이터를 참조할 수 있다. 이 툴을 사용해서 데이터베이스 호출과 메모리 캐시 히트, 리소스 가져오기 등에 걸리는 시간을 참조할 수 있을 뿐 아니라 서버쪽 서비스 호출에 소요되는 시간도 볼 수 있다.

하이버네이트, 스프링 MVC에서 enum 사용하기 3

1. Character 값을 DB에 저장하는 enum도 지원하도록 구현했고..
2. UserType 생성을 좀 더 간편화 했습니다.

public enum FamillyCate implements PersistentEnum {

    FATHER(‘f’, “부”), MOTHER(‘m’, “모”), BROTHER(‘b’, “형제”), SISTER(‘s’, “자매”);
   
    private final Character value;
    private final String descr;
   
    private FamillyCate(Character value, String descr) {
        this.value = value;
        this.descr = descr;
    }
   
    public Character getValue() {
        return value;
    }
    public String getDescr() {
        return descr;
    }

}

이렇게.. Character 값을 DB에 저장할 enum을 사용할 수 있습니다. 이 enum에 대한 UserType 생성은 다음과 같습니다.

public class FamillyCateType extends GenericEnumUserType<FamillyCate>{
}

이 enum에 대한 PropertyEditor는?

binder.registerCustomEditor(FamillyCate.class, new GenericEnumPropertyEditor<FamillyCate>(FamillyCate.class));

캬,.. enum에 대한 UserType과 PE를 전부 코드 한 줄로.. 끝낼 수 있습니다. GenericEnumUserType와 GenericEnumPropertyEditor 코드는 비공개입니다. 영원히~

자 그럼 오늘은 이만 하고,, 다음 번엔 enum 목록을 가져올 때 순서를 정해서 가져오는 방법을 마련해보도록 하겠습니다.

ps: 오랜만에 dm 서버나 돌려봐야겠네요. 방명록에 누가 요청하셔서;;