S1A – SpringSource dm Server Introduction by 뢉 해럽

SpringSource dm Server 소개

dm 서버
=> 자바 EE를 지원하려는게 아니라 OSGi 기반 배포 모델을 제공하기 위한 것이다. 매우 고객 지향적인(custom-oriented) 오픈 소스 프로젝트다.

배포
=>

Configurable
=> 여러분이 설치하고 싶은 걸 선택할 수 있다.

잠재적인 사용자 이익
=> 배포를 모듈 단위로 할 수 있다.
=> 쪼개서 개발할 수도 있고 유지보수 하기도 쉽다.

OSGi는 무언인가?
=> 유일한 모듈 시스템은 아니다. 하지만 10년이나 됐다. 그동안 많이 테스트 하고 검증되었다.

모듈
=> 정확히 어떤 패키지를 공개하고 사용할지 정의한다.(Strict Visibility rules)

모듈성
=> 타입 Dependency

모듈성:Import-Package
=> 버전 설정을 가능한 상세하게 할 것을 권장.

모듈성:Require-Bundle
=> 하이버네이트…, 하지만 패키지 중복 문제 발생 가능.

모듈성:Import-Bundle
=> 그래서.이걸 권장한다.

다음 레벨 모듈은 서비스.

서비스
=> 구현체는 감추고 타입으로 그 구현체를 참조할 수 있게한다.

데모
– greenpage 웹 애플리케이션 예제
– 모듈(app, db, jpa, web)

1. STS 실행
2. dm 서버 추가
3. dm 서버 홈 찾아주기
4. bundle 프로젝트 만들기
5. greenpage.web/모듈타입을 web으로/타겟 플랫폼을 dm 서버로 설정 next
6. Web-ContextPath 를 /greenpages   .. *.htm    next finish
7. META-INF/MANIFEST.MF 열고 설정 확인
8. src에 MODULE-INF/WEB-INF 폴더 추가
9. WEB-INF 폴더를 웹 폴더 루트로 jsp 추가
10. 컨트롤러 개발
11. Import-Library: org.springframework.spring:version=”[2.5.5.A,2.5.5.A]”
12. 컨트롤러 개발
13. META-INF/spring 풀더에 mudile-context.xml 만들기
14. 컴포넌트 스캔 추가해서 컨트롤러 빈 등록
15. 서버로 드래그 앤 드랍
16. 서버 실행
17. 404 에러 나는데 그건 뷰 파일이 없어서 그랬어. 복사해서 붙이고 뷰가 프리마커라서 프리마커 뷰 리졸버 추가해준다.
=> 로깅 메시지는 별도의 파일로 분리해 놨다.

0. web 모듈 빼준다.

1. greeenpage.app 모듈 추가
2. 패키지 추가
3. 인터페이스 추가
4. 구현체 추가
5. MANIFEST.MF에 Export-Package: greenpages.app:version=”1.0″ 추가
6. greenpage.web에서 Import-Package:greenpage.app 추가
7. 에러 나면 이클립스 프리퍼런스에서 패키지 의존성 추가
8. osgi-context.xml 파일 만들기
9. directory 서비스 등록.
10. module-context.xml 파일 만들기
11. Directoty 빈 등록
12. 서버로 드래그 앤 드랍
13. telnet localhost 2401 로 osgi 콘솔에 접근
14. osgi-reference.xml 만들기
15. osgi 레퍼런스 빈 등록 id=”directory” interface=”…

1. greenpages.db 모듈 추가
2. Import-Bundle: com.sprinsource.org.apache.commons.dbcp:version, …
3. datasource  빈 등록, osgi 서비스 등록
4. Import-Pacjage: javax.sql
5. 콘솔에서 설치한 번들과 서비스 확인

1.greenpages.jpa 모듈 추가
2. MANIFEST.MF에서 Import-Package: greenpages.app, javax.sql
3. 인터페이스 추가
4. 구현체 추가
5.  Import-Package에 javax.persistence 추가
6. Import-Library에 spring 추가
7. META-INF/spring 폴더에 module-context.xml 추가
8. 로드 타임 위버가 있네.. 왜 있지?
9. osgi-context.xml 추가
10. directory 서비스 추가
11. 드래그 앤 드랍
12. aspectj 없어서 실패.
13. Import-Library에 org.aspectj;version 1.6.1 추가
14. Import-Bundle: eclipse.persistence..
15. osgi 레퍼런스로 dataSource 등록

=> osgi:reference 의 filter 속성과 service의 속성 매칭으로 동일 인터페이스에 대한 여러 구현체 서비스 중에서 한 가지를 선택하게 할 수 있다.

1. Par 프로젝트 만들기
2. greenpage 만들기
3. Dependencies  탭에서 추가해주기.
4. 드래그 앤 드랍.

필요한 번들이 번들 저장소에 없는 경우
1. private class path 이용
2. osgi 번들로 만들어라.
3. 하난 뭐지?

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

이번에는 사부님이 좋아하는 프로 스프링의 저자 뢉 해럽을 만났습니다. 다른 사람과 대화가 거의 끝나가던 중이라 쉽게 접근이 가능했습니다. 이번에는 영회형이 먼저 나서서 붙잡고 그 뒤를 따라 달라 붙었습니다.ㅋㅋ

사용자 삽입 이미지
사용자 삽입 이미지
스프링에서 가장 좋아하는 부분이 어디인지? JdbcTemplate
내가 Pro Spring 2.5 번역에 참여하고 있는데 너가 없더라? ㅇㅇ그 책은 젊은 책이다.(?)
개발 할 때 주로 OS는 무엇을 사용하는가? 맥 OS(단순히 이뻐서가 아니라 XP인지 비스타의 단점, 그리고 리눅스에서 불편했던 뭔가를 말했는데 잘 이해가 안 됐음)
얼마전 스프링소스 웨비나에서 dm 서버를 사용한 개발 과정을 따라해봤더니 잘 안 되더라? (어디가 안 됐는지 설명.. 좌르륵..) 아 그건 저기 보이는 쟤 때문이다.ㅋㅋㅋ 아마도 제대로 동작하지 않는 버전의 dm 서버 플러긴을 설치한 거 같은데 그 플러긴 버전을 캡춰해서 메일 보내주면 확인해주겠다. 이클립스에서 뭔가가 잘 안 되면 껐다 켜라. 그럼 된다. ㅋㅋㅋㅋ

(참고로 질문은 저 혼자 한게 아니라 토비님, 영회형, 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, 신중해야 하기 때문에 압박감을 받기도 한다.
개발자로써 어떤 방법이 학습이나 성장에 도움이 될까? 현장의 문제를 다뤄라.

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

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

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