S1A – Spring 3.0 by 유겐 휄러

깊게 다루진 않겠다. 얇게thin 여러 기능 들을 살펴보겠다.

이번 주에 새 버전을 릴리즈 할 것이다.

Agenda
– 2.5 리뷰
– 3.0 테마와 기능

스프링 2.5
– 다양한 애노테이션 기반 설정 지원
– Java EE 5 애노테이션 지원(ex. @EJB, @WebServiceRef… @PersistenceUnit/Context)
=> 애노테이션의 시멘틱을 스프링 애플리케이션 문맥에 맞게 사용한다.
=> 이름이 별론데 어쩌겠냐. 사용해야지.
=> 스프링 2.5가 똑똑하게 애노테이션을 처리해준다.

애노테이션을 사용한 빈 컴포넌트
– 예제 코드(@service, @Autowired, @Transactiona)
=> 미들웨어 서비스와 연결(@Transactional)

애노테이션을 사용한 라이프 사이클 관리 중인 DAO
– 예제 코드

XML 빈 설정 최고화 하기
– context:annotation-config
– context:component-scan
=> 이런 모든 기능들은 3.0에서도 사용 가능하다.

테스트 컨텍스트 프레임워크
– 예제 코드

스프링 서블릿 MVC 2.5
– 예제 코드(ActionResponse.setRenderParameter(“action”, “list”);

===============

스프링 3.0 테마
– 자바 5+ 기반: J2EE 1.4와 JEE 5 호환 => 코드를 다시 구현하고 싶진 않았다. 사용자에게는 변화가 없고, 스프링소스 팀 내에서 코딩하는 방법이 바뀐 것 분
– EL => 매우 중요한 변경 사항. 빈 설정할 때 매우 유용하게 사용할 수 있다. JSF Universal EL을 보고.. 이와 같은 아이디어를 스프링 웹 플로우팀과 공유했다.
– REST 지원
– Portlet 2.0 지원
– 선언적인 모델 검증: hibernate validator, JSR 303 => JSR 303은 그다지 많이 진전하지 않았지만.. 지원한다.
– Java EE 6 지원: JSF 2.0, JPA 2.0, .. => 스프링 2.5에서는 일찌감치 Java EE 5를 지원했었다.

새 프로젝트 레이아웃
– 수정한 프로엠워크 모듈(메이븐 스타일로 관리한다. 모듈 jar 별로 소스 트리 하나, spring.jar는 이제 없다!!!) => spring.jar는 시간이 흘러가면서 점점 일관성을 잃어가고 있다.  spring.jar를 더이상 고치지 않겠다.
– Spring Web Flow 2.0으로 알려져있는 새로운 빌드 시스템으로 빌드했다.(배포 절차, 의존성 관리, OSGi manifest 생성)

빈 설정에서 EL
– 예제 코드 => 예를 들어, 맵에 있는 키값으로 그 맵의 요소 값을 참조 하거나 특정 빈의 메소스 실행 결과 값을 DI하는 것이 가능하다. 암묵적인 객체를 사용할 수도 있다(?)

컴포넌트 애노테이션에서 EL
– 예제 코드 => 기본값 설정에 사용할 수 있다. DI 할 것이 없으면 이 값을 사용하도록…, @Value는 매우 강력한 애노테이션으로 …

스프링 EL 파서
– 스프링 3.0에 들어간다.
– Unified EL과 호환가능하지만 보다 강력하다

EL 문맥 속성
– 암묵적인 속성은 런타임 문맥에 따라 기본으로 사용이 가능하다.(ex. systemProperties, sustemEnvironment”)

웹 문맥 속성
– contextProperties: web.xml init-param.
– …
=> 팩토리빈으로 사용하던 걸 훨씬 간단하게 사용할 수 있다.

REST 지원
– REST 스타일 맵핑 지원
– 대안 JAX-RS => 웹 서비스에 가깝다.

MVC에서 REST
– @PathVariable(“id”) long id => 2.5의 @ReqeustParam과 비슷하게 사용한다.
질문1: 타입이 어떻게 long이냐? 기본 컨버전 룰이 있다.
질문2: EL 파서 …? no ..
=> URL 이 복잡해지면 여러 개가 필요할 것이다. 여러 개 매개변수를 선언해서 사용하면 된다.

다양한 Representation
– JSON => 뷰 리졸버를 직접 구현해도 되지만, 이걸 스프링에서 직접 지원하고 싶었다.
– XML
– ATOM
=> request의 accepts 헤더에 따라 다른 정보를 만들어 준다.

@MVC Refinements
– @RequestHeader
– @CookieValue
=> 쿠키나 헤더가 필요할 때 HttpServletRequest를 사용했었어야 하는데 이젠 그럴 필요가 없다.
=> mocking 할필요도 없고 단순하게 string이나 int값 사용하면 된다.

포틀릿 2.0 지원
– 이건 하나도 몰르는뎅;;
– Portlet 2.0 지원, 명시적인 맵핑 애노테이션 지원.

컨버세이션Conversation 관리
– 핵심 문제: isolating concurrent windows in same browser
=> 스프링에서 뭘 할 수 있는지 조사를 했다.
– conversation 스코프(session보다 짧은 라이프사이클을 지니고 있다.)
=> 스프링 웹 플로우 3.0이 이걸 기반으로 복잡한 플로우 네비게이션을 지원할 것이다.

빈 직렬화
– 스프링 2.5에서 session과 conversation 객체 직렬화 문제 => 서비스 퍼사드가 DAO를 참조할 때 DAO는 보통 직렬화 하지 않아서 서비스 직렬화 실패. 결국 전체 직렬화를 할 수 없다.
– 해결책: 프록시를 사용. 역직렬화해서 다시 가져온 레퍼런스를 프록시..한다. (?) 어렵네;;

모델 검증
– 화면에서 값 바인딩부터 랜더링, 영속화할 때까지 적용
– 하이버네이트 Validator API 사용가능
– JSR 303도 지원한다
@NotNull, @ShortDate

스프링 3,0과 Java EE 6
– JSF 2.0, JPA 2.0, JAX-RS/Jersey, JSR 236(쓰레드 풀 관리)
– 스프링 3.1/3.2는 Java EE 6 모든 기능 제공(Servlet 3.0, Web beans 애노테이션)

제 3 라이브러리 업데이트
– 하이버네이트 3.3, 이클립스링크 1.0 랴final

포트폴리오 정리
– 스프링 웹 서비스의 OXM 모듈을 개선한 걸 스프링 3.0에 포함 시킨다.
– 스프링 웹 플로우의 바인딩과 타입 컨버전을 스프링 3.0으로
– JavaConfig기능을 스프링 3.0으로..

Pruning(가지치기)와 Deprecation

스프링 2.5 미션은 계속 된다.
– 100% 호환 프로그래밍 모델,

요약

로드맵

S1A 첫 날 – 캐나다 개발자 셋과 미국 내에서 혼자온 한 분

키노트가 끝나고 한국인들끼리 모여 있다가 토비님이 다른 쪽 테이블로 이동하는 걸보고 조금 이따가 그 쪽 테이블로 따라가 봤습니다. 캬오.. 가보길 잘 했습니다. 재밌었습니다.

캐나다 토론토에서 온 세 분의 개발자들과 미국 내에서 혼자온 한 분과 얘길 나누고 있었습니다. 넷 모두 동양인처럼 생겼는데 영어는 정말 완전 잘 했습니다. 거의 미국인이더군요. 미국에서 일하신다는 분도 뭐; 거의 미국인 수준의 영어. 영어권에서 일하는 분들은 출신이 동양인이어도 미국어를 완전 유창하게 구사하고 있었습니다. 나도 저 정도 쯤은 하고 싶다는 생각이 절로 들더군요. 그리고 좀 더 잘 알아듣고 잘 말하려고 노력하기 시작했습니다.

하지만 실수를 몇 번 했죠. ㅋㅋ 다른 나라 사람에게는 결혼했는지, 몇 살인지, 등을 물어보는게 실례인데 깜빡하고 넘 어려보이시는 분께서 결혼하셨다길래 결혼한지 몇 년이나 됐는지를 물어봤었습니다. 다행히 분위기가 좋고 토비님이 설명을 잘 해주셔서 좋게 넘어가고 포토 타임을 가지고, 명함도 나눠 갔고, 바이 바이 했습니다.

사용자 삽입 이미지
대화는 굉장히 다양했습니다.

스프링을 사용하고 있는가? 버전은 몇인가? ~
지금 어떤 일, 프로젝트를 하고 있는가? ~
옆에 분과 같은 회사에 다니나? ~
혼자 왔나? ~
오늘 키노트를 본 소감이 어떤가? 마케팅 성격이 강했던 것 같다.
Data Access쪽은 어떤 프레임워크를 사용하는가?
iBatis를 선택한 이유는?
하이버네이트는 왜? RMI 할 때 프록시 객체가 말썽이었다. 토비답: 그럴 땐 DTO를 만들어서..
이 분(kenu님) 나이가 몇 일것 같은가?
등등등…

아.. 이젠 머리가 아파서;; 정말 자야겠습니다.

S1A 첫 날 – 유겐 휄러와 Q&A

정말 정말 보고 싶었던 유겐 휄러. 착해보이고 성실해보이고 잘 생겼고 개발도 잘해 여친인지 부인인지 암튼 이쁜 짝도 있고 지금까지 제가 봐왔던 유겐 휄러는 그야말로 짱입니다.

유겐 휄러를 알게 된 건 스프링 소스 코드가 아니라 이슈 트래커를 통해서였습니다. 한 참 스프링 공부를 시작하고 레퍼런스를 요약해가며 그 안에 있는 말과 코드를 이해하려고 엄청 애쓰던 때였죠. 그 때 문서에서 발견한 오타나 코드에서 이상한 점들을 이슈 트래커에 올리면 거의 매번 유겐 휄러가 이슈를 처리해줬습니다. 그리고 한 번은 OSAF 초기 모델을 만들 때 @SessionAttributes에 대해 이슈 트래커로 상당히 길게 얘기를 나누면서 그가 얼마나 자상하고 꼼꼼한지도 알 수 있었습니다.

어쨋든 보고 싶은 사람이 바로 옆에 있었는데 누군가와 매우 오래 얘길하고 있었습니다. 어쩔 수 없이 끼어들었습니다. 한 15분은 옆에서 멀뚱멀뚱 있었던 것 같습니다. 끼어들어서 3.0-m1에 대한 이야기를 나누기 시작하자 영회형, 사부님, kenu님이 함세해 주셨습니다. 캬캬

기선: 얼마전에 이슈 트래커를 봤더니 3.0-m1 이슈가 모두 처리 됐더라. 언제 공개할 생각이냐?

유겐: 이번 내에 공개할 거다. 아마 너가 돌아가기 전에 하지 않을까? ^^

기선: 오호~! 귿. 참. 난 한국에서 왔고 너가 정말 보고 싶었다. 우린 이미 이슈트래커를 통해 얘기를 많이 나눈적이 있다. @SessionAttributes에 관한 것이었는데 그 당시 너무 친절하게 답변을 달아줘서 감동먹었다. 고맙다. 사진 한 장 찍고 싶다.

유겐: 오케

사용자 삽입 이미지
대충 이렇게 시작한 대화는 상당히 길고 재밌게 이어졌습니다.

하루에 몇 시간 정도 코딩을 하는지? 주당 50~60(기억이 가물 가물)
왜 스프링 코어 이슈는 혼자 그렇게 많이 차지하고 있는지? 자기가 배정 해 줌. 배정해 줄 사람 없으면 자기가 함.
로드 존슨과 유겐 휄러의 나이는 몇인지? maybe 38, I’m 33
개발할 때 테스트를 먼저 작성하는지 나중에 작성하는지? After
스프링 3.0에서는 빌드가 어떻게 바뀌었는지? Ant + Ivy
스프링 개발을 통해 행복함을 느끼는지? intent, 신중해야 하기 때문에 압박감을 받기도 한다.
개발자로써 어떤 방법이 학습이나 성장에 도움이 될까? 현장의 문제를 다뤄라.

이 밖에도 질문과 답변 내용이 많고 유겐이 상당히 길고 친절하게 답변해줬지만 제가 지금 좀 피곤해서 짧게 요약하고 넘어갑니다. 양해해 주세요.

처음엔 말을 어떻게 걸어야 하나 고민도 많이 하고 아.. 그냥 지나칠까 말까 하다가 용기내서 말을 걸어봤는데 정말이지 세미나를 하나도 안 들었는데 이대로 집에가도 여한이 없을 정도입니다.

다음엔 싸인 받으러 또 찾아가겠다고 바이 바이 했습니다. 다음 타겟은 뢉 하랍!!

S1A 키노트 – 로드 존슨

LA에서 아침 일찍 뱅기타고 마이애미로 날아오는 도중 우여곡절이 있어서 가까스로 S1A 저녁시간에 맞춰서 도착했습니다. 도착해서 DAUM과 삼성 SDS에서 오신 분들을 만나서 인사를 나누고 같이 저녁식사를 하고 그 자리에서 키노트가 시작됐습니다.

키노트에서 언급한 내용은 많았지만, 그걸 전부 요약하긴 힘들고 제가 중간 중간 요약한 것만 공개하겠습니다.

스프링 3.0
– 스프링 설정 파일에서 EL 사용 가능
– JavaConfig에 Ajax 지원 기능 추가
– 웹에서 REST 지원
– Web Flow 관련 기능 중 일부 Core 패키지에 추가

Spring stands for the creative destraction of complexity.
=> 스프링은 복잡함을 무너트림으로써 발생하는 창조적인 무언가를 대변한다.

Grails is Spring
=> Grails는 거인의 어꺠 위에 앉는 전략을 선택.

SpringSource tc Server
– 톰캣은 개발자들이 가장 많이 개발과 제품 배포에 사용하는 WAS
– 단점: 관리와 운영 툴이 약함
– 그래서 tc 서버를 만들어서 톰캣 다수의 리소스 관리 및 운영 WAR 배포를 할 수 있는 tc Server를 만들었다.

SpringSoucrce dm Server
– 완전히 새로운 차 세대. 모듈기반 애플리케이션을 위한 서버

Bundle Repository
– 수천개 라이브러리의 의존성, 소스, 문서 다운로드 가능한 라이브러리 저장소
– 번들은 어차피 JAR니까 여기를 이용하면 된다.

SpringSource Application Platform Configurator
– 완전 대박 애플리케이션. 예전에 사부님이 만들고자 했던 바로 그걸 스프링소스가 만들었다.
– 개발할 애플리케이션 플랫폼을 만들어 준다.
– 워크 프로우를 타면서 애플리케이션 종류(웹, 배치, 기타 덩덩덩), 웹 이라면 사용할 MVC 프레임워크(JSF, SWF, ..), 웹 일 경우 애플리케이션 돌릴 서버 선택, 예제 애플리케이션 추가 여부 선택, 개발자 테스트 추가 여부 선택 등을 거치면 최종적으로 압축 파일로 애플리케이션 플랫폼을 만들어 준다.

말은 거의 못 알아듣고 화면만 보면서 유추한거라 틀린 내용이 있을 수도 있습니다. 양해해 주세요.

로드 존슨과 기념샷

사용자 삽입 이미지내일은 책 들고가서 싸인 받아야겠다. 너무 좋아서 얼굴이 엉망이네.ㅋㅋ

드디어 Spring One America에 갑니다.

작년부터 꿈꿔왔던 컨퍼런스입니다. 정말 정말 가고 싶었습니다. 작년에는 Spring 2.5. Spring Security 2.0 그리고 Spring OSGi(지금은 DM이지만) 소개에 관련된 세션에 많은 관심이 있었지만 갈 수 없었습니다. 하지만 이번에는 드디어 갈 수 있게 됐습니다. 이번에는 Spring 3.0과 Spring DM 그리고 DM Server에 관심이 많습니다. 그토록 가고 싶었던 컨퍼런스를 가게 되었는데 아직도 잘 실감이 나질 않습니다. 가서 무슨 말을 할지 생각도 안나고.. 어버버버 하다가 오는거 아닌지 걱정입니다. @.@

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지사용자 삽입 이미지
사용자 삽입 이미지
유겐 휄러한테 배정된 세션 하나가 뭔지 모르겠는데 비어있네요. 일단 유겐 휄러가 보고 싶어서 유겐이 뭔가를 하게 되면 그걸 보고 아니면 쉬던가 차선책으로 선택한 퍼시스턴스 튜닝을 보러갈 듯 합니다.

8시부터 밥먹고 발표 시작해서 대충 5시쯤 끝나는 군요. 첫 날에도 파티하고 세 번째 날에도 파티하네요. 해변 파뤼~ 파뤼~ 맛난거 많이 있으려나~ +_+