달력

032010  이전 다음

  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  • What is OSGi?
OSGi stands for Open Services Gateway initiative.


더 감이 오게 정의된 표현은 "The Dynamic Module(Bundle) System for Java"
특징을 훑어 보면

- 모듈화 된 시스템을 위해 고안되었고
- visibility rules을 갖고 있다.(자바의 private/public과 유사한)
- a resolution process(의존성 관리를 위한)가 있고
- 버전 인식이 가능하고
- 설치, 삭제, 갱신, 구동 등이 모두 동적으로 실행 가능하며
- 번들 형태로 서비스를 배포(publish)할 수 있고, Service Registry가 있다.

OSGi 컨테이너

  • Open-source implementations: Equinox, Felix (Apache), Knopflerfish
  • Significant Enterprise usage: Eclipse, IBM (WebSphere, Lotus), JOnAS, interest from BEA and Oracle

  • What problems does it help us to solve?

어디어 써먹을 수 있는가?

Visibility
reflection이나 classloading으로도 접근이 불가능하다. 즉, black-box 기반의 CBD가 가능하고, 보안에도 유리

Operational Control
OSGi 콘솔이나 JMX를 통해 모니터링이 가능하다. 현재 WAS류가 제공해주는 hot deploy 기능보다 한발 더 나아갔다고 해야 하나. 최대 강점은 모든 조작에 재시작이 필요없을 것이란 점


  • How does it work?

What is an OSGi bundle?
jar 형태이며 META-INF/MANIFEST.MF 파일에 다음의 선언만을 필요로 한다.
Bundle-SymbolicName: org.swf.beans

이클립스는 OSGi 번들을 플로그인로 관리하려 생성/편집할 수 있다.
JSR 277 (Java Module System)과 유사해보이는데, 이 녀석은 동적이지 못하여 발표자 등은 OSGi에 기반한 JSR 291 (Dynamic Component Support for Java SE)에 밀릴 것이라고 예상했다.

  • Where does Spring fit in?
  • Spring-OSGi
Spring-OSGi는 컨테이너를 불문하고 "OSGi powered Web Application" 구현을 가능하게 하기 위함이다.  

Spring modules (spring-core, spring-beans, spring-aop) will be shipped as OSGi bundles in Spring 2.1.

2.1 버전에서 Spring이 완전히 OSGi를 수용할 모양이다.
OsgiBundleXmlApplicationContext is a Spring application context based on an OSGi bundle.

There is a "bundle:" prefix for specifying an explicit path.
classpath:나 file: 만이 아닌 bundle: 을 지원하는군.

ConfigurableBundleCreatorTests. This automatically creates an OSGi bundle containing the tests on the fly.

태생부터 테스트를 준비하고 등장한다는거~ 역시 Spring 답다. ^^

사용자 삽입 이미지
그림을 보니까 느낌이 온다. 그렇군. 웹 애플리케이션도 OSGi 모듈로 모두 배포한다면...

이전 프로젝트에서 jar로 모듈화 해서 배포한 것이랑 war로 통으로 배포한 것이랑 별 차이가 없었다.

그런데, OSGi 모듈로 인식되는 jar라면!

Equinox is the only OSGi container that currently supports web applications.

It uses a "bridge servlet" that acts as a front controller and dispatches servlet requests to bundles. To package your application as and deploy it to Equinox, you basically have to create a WAR with the bridge servlet as the only entry in web.xml and the only JAR in WEB-INF/lib is servletbridge.jar. Everything else is packaged under /WEB-INF/eclipse.

마무리에 Raible은 다음과 같이 정리한다.

Will OSGi containers be the next generation of application servers?

나는 요즘.. 대학원에서 배웠던 원론적인 이야기들이 차츰 실현되는 것을 느낀다.
객체지향 초창기 바이블이 이야기하던 것이 DDD를 통해 구현될 조짐을 보이고 있고
CBD 바이블에서 이야기하던 것을 OSGi는 매우 충실하게 구현해낼 것 같다.  

원문: [TSE] Spring-OSGI with Adrian Colyer
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회
전체를 고르게 요약한 것이 아니라 관심사 위주로 정리합니다.(모르는 것 중점적..ㅡㅡ;)

Data Access Layer
기존의 JDBC, iBATIS, JDO, Hibernate, TopLink 지원에 더하여
2.0에서는 JPA 추가(OpenJPA, TopLink Essentials and Hibernate)
2.1: JPA namespace and support for common non-standard features (for example, criteria API and user types)

CICS and IMS 연동 지원한다는데.. 이넘들 어케 테스트해볼 수나 있는 것인가?
LdapTemplate도 있지만 Spring LDAP 쓸만 하다.


Service Layer
MethodInvokingJobDetailFactoryBean으로 스케줄링 간편하게...
TaskExecutor로 비동기로 작업 실행 가능(Simple confugiration change to switch from thread pool to commonj work manager.)

2.0에서 JmsTemplate + Message-driven POJO지원하며 Tx 참여도 가능
OXM (Object XML Mapping)은 Spring Web Services

ESB와의 관계: Mule 2.0은 Spring 기반으로 다시 작성되고 있음

ESB - Mule integration: Spring application context support simple event framework:

ApplicationEventPublisher and ApplicationEventPublisherAware, ApplicationEvent and ApplicationListener. Simple for a bean to publish and listen to events. Mule can integrate into this as a custom event multi-caster.

Configure a bean to listen only to events of interest using MuleSubscriptionEventListener. You can publish events to mule using a normal ApplicationEventPublisher interface and create a MuleApplicationEvent to publish.

보안: "Spring Security is one of the hidden jewels in the bunch here."... Acegi ACL


Clustering
Tangosol Coherence, GigaSpaces, Terracotta


Presentation Layer
SWF can be used with servlets, portlets and multiple web frameworks.

Spring IDE가 AOP를 지원할꺼라는 깔끔한 소식.

Web 2.0 / Ajax / RIA를 위한 Spring의 지원: AbstractXsltView, Spring Web Services, DWR and JSON-RPC

Acegi is apparently looking at doing better support for Ajax and DWR. DWR 2.0 has a new Spring <dwr:*> namespace that allows you to easily nest a <dwr:remote> tag in a bean definition and expose that bean as a JavaScript object.

If you need a real web service, Spring supports that. Use XFireExporter for simple RPC style services. For everything else, there's Spring Web Services

AOP ...
Rapid Application Development: Spring 2.0 supports beans written in alternative languages: JRuby, Groovy and Beanshell. ROO (Real Object Oriented) application. Domain first, infrastructure second. Full static rapid development and has been validated with clients to great success.



원문: [TSE] Keynote: The Bigger Picture with Adrian Colyer
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회
[TSE] Domain Driven Design with Eric Evans라는 짧은 글을 통해서 120% 공감할만한 글을 올렸다.

Models are distilled knowledge about the domain and tailored to the situation you're in.

모델은 의사소통 수단이라는 보편적인 정의 이후에 만나게 되는 최고의 정의다!!1

이 정의의 가치를 알기 위해선 이 바닥 구력이 필요하다. "distilled"는 형용사지만 엄청난 의미를 내포하고 있다. 지나치게 공학에만 집착하게 되면 모델을 자꾸만 코드와 엮어서 부풀어오르는 것을 좌시하는 수준이 아니라 조장하는 경우가 왕왕 있다.

모델은 그야말로 "액기스"일 때 진가를 발휘하지 않을까?


more..


한편 모델은 "situation" 혹은 "context"에 밀착 되었을 때 역시 빛이 난다. 모델링을 자꾸만 형식화 하고 특단의 방법론이 있는 양 굴면... 그저 값비싼 문서화 도구를 사용하는 일이 된다.

  • Meaning is specific to a context.
  • Usefulness is specific to some set of scenarios.
  • Practicality is determined by enabling technology.
Raible의 요약을 보고 단박에 공감이 가는 이야기를 좀 풀어보면... 모델은 결국 도메인의 주인인 고객이 만들어야 한다. 우리같은 사람은 풀어가도록 도와주는 역할 이상은 힘들다. 왜냐하면 컨텍스트에 대해서는 오랫동안 그 일을 해온 사람만이 제대로 알 수 있기 때문이다.

반드시 특정 시나리오에 대해서만 모델링을 하는 것 즉, 전략적인 모델링이 좋다. 나도 한때는 화면 입출력 데이터는 물론이고 스토리보드마저도 UML로 모델링 해야 한다고 고집을 부렸던 과거가 있다. 하지만, 돌아보면 설익은 고집으로 주변 사람들을 힘들게 하지 않았다 싶다. 화면 모델링은 구체적인 화면을 빨리 만드는 것이 가장 유용하다. 고객의 요구변화에 맞춰 재빠르게 화면을 변경할 수 있는 인력과 도구만 있다면...

대개의 경우는 수많은 시퀀스도 간결한 상태도로 대치할 수 있다. 문제는 상태 변이에 대한 모델링을 할 수 있는 사람이 드물다는 것인데, SOA 열풍과 함께 등장한 BPM 모델링 도구는 이러한 사상의 결과인 것 같다. 상태도보다는 그리기 쉬운 표현법을 제공한다.

나는 무엇보다 모델링의 Practicality 에 관심이 많다. 그래서, 모델링 가이드를 하는 회사에서 다소 구분 되어지는 내 영역을 찾은 것 같다. 모델과 구현 기술을 엮는 작업. 그 과정에서 Spring 팬이 되었다. IoC(Inversion of Control)와 Non-invasion이 강화될수록 모델과 구현 기술(enabling technology)의 긴밀함이 보장된다.

결국, 엔지니어 관점의 진정한 MDA/MDD 실현이나 Round-trip engineering은 CASE 툴의 오로지 팬시하기만 한 기능으로는 불가능하다. 순수 자바로만 프로그래밍 하는 애플리케이션이라면 CASE 툴로도 충분히 가능할지 모른다.

하지만, 그야말로 System Integration이 필요한 대부분의 애플리케이션에서는 Spring과 같은 제약이 적고, 견실한 기술이 도리어 모델링도 돕는다.

현장에서 느낀 것을 압축한 것이 올바른 모델링 활용법 익히기 캠페인인데... Raible의 글에서 보이는 Eric Evans의 생각도 크게 다르지 않은 것 같다.

Eric's Favorite Modeling Tools (currently available)

  • Whiteboard (with a digital camera for persistence)
  • IDE
  • Unit tests
  • Our Mouths and Ears
끝으로 Raible은 무지막지하게 기대할만한 TSE 세션 소개를 한다. Toby님이 듣고 오시리라 믿는다.
In this presentation we'll study an internal web application developed by a major Australian corporation. The application uses a "real object oriented", or ROO, architecture. That means we swapped out those anemic domain objects, fat services, and those repetitive DAOs for rich domain objects that utilize transparent persistence and encapsulate business rules.
  1. 호들갑의 화신임을 고백합니다. [본문으로]
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회

TSE2006 둘쨋날 저녁 파티를 마치고 숙소로 돌아온 토비님의 메시지를 시작으로 즐겁고 흥미로운 대화가 시작되었다. 모 단체와는 달리 허술하기 짝이 없는 검열을 통과한 일부를 발췌... ㅋㅋ

더 자세한 TSE2006 둘쨋날 내용은 토비님이 포스팅하셨습니다:
The Spring Experience 둘째날

Toby님의 말: ^^
[永會] 님의 말: 헛.. 이제 마치고 숙소겠군요
Toby님의 말: 네. 파티까지 마치고 오니 11시군요.

[永會] 님의 말: Raible은 역시 DDD엔 별 관심이 없나 봅니다.
[永會] 님의 말: 역시.. 웹 관련 세션만 듣고 심하게 자세히 메모하더군요
Toby님의 말: 네..ㅋㅋ

[永會] 님의 말: Appfuse와 Spring live에 바로 반영할 목적을 지닌것 같아요
Toby님의 말: 그렇군요. 파티때 있나 둘러봤는데 안보이더니
[永會] 님의 말: sales 관점이 강한 것 같습니다. 
Toby님의 말: 네.. 자기 장점을 잘 아는 거겠죠
Toby님의 말: 웹프레임워크쪽이 전문일테니까요

[永會] 님의 말: 전.. 웹쪽은 Raible에게 듣고 토비님께 DDD 들어서
[永會] 님의 말: 보완적으로 배울 것 같습니다. 감사.

Toby님의 말: 오늘은 4개 세션을 DDD로만 들었는데 아주 좋았습니다
Toby님의 말: 감을 잡았다고나 할까.. ㅋㅋ
Toby님의 말: Keith Donald가 예제를 아주 잘 만들어서 이해하기 쉬었어요
Toby님의 말: 완전한 소스코드도 준다고 하니.. 아주 기대만빵입니다
[永會] 님의 말: 와우~

Toby님의 말: 최초로 공개되는 DDD적용코드... 얼마나 찾았던지.
Toby님의 말: 근데 Eric Evans이 DDD트랙때 계속 들어와있어서
Toby님의 말: Keith Donald도 긴장했더라고요..
Toby님의 말: 중간중간에 좀 난해한 질문이 나오면 Eric에게도 물어보기도 하고.
Toby님의 말: 자신을 DDD Believer라고 하던데. 저도 그렇게 될 것 같네요.

[永會] 님의 말: 마치 그 방면 오리지널리티를 갖은 학자가 실무자에게 묻는 격이군요
Toby님의 말: 반대죠. 실무자가 오리지날 창시자에게 물어보는..
[永會] 님의 말: 네 제가 반대로 얘기했네요. ^^

Toby님의 말: Eric시간에는 세션장이 가득찼었는데 그 이후는 많지 않더라고요
Toby님의 말: 워낙 쟁쟁한 세션들이많아서.. ㅋㅋ 저도 Rod Johnson이 하는 거 듣고 싶었지만
[永會] 님의 말: 아무래도 DDD보다는.. Spring 2.0 개괄적인 것이 더 인기였겠죠
[永會] 님의 말: 제 생각엔.. 토비님처럼 이미 Spring 2.0을 파악하고 간 사람이 많지는 않을 것 같은데요

Toby님의 말: DDD를 파느라. 한 자리를 계속지켰죠. 일요일에는 Acegi의 Ben Alex가
Toby님의 말: ROO라는 것을 애기하는데 일종의 DDD응용 아키텍처더라고요
Toby님의 말: Real Object Oriented라고.
Toby님의 말: 이제 SUN blueprints의 3-tier를 벗어나서 다양한 layered architecture들이 등장하는 시기인 것 같네요
Toby님의 말: 특히 Domain layer를 독립하는 구조의 DDD아키텍처들이 많이 나올 것 같습니다
Toby님의 말: Keith도 그렇고 Ben도 그렇고 다 실무에 적용해서 성공을 했다고 하니 매우 고무적이죠

Toby님의 말: 한국 가면 영회님한테 모델링을 좀 배워야겠어요. 체계적으로.
[永會] 님의 말: 흠.. 저도 모델링 가이드 하면서 늘 제어 측면이 복잡해지는 걸 보거든요
[永會] 님의 말: 그러다보면.. 제어기 중심의 모델이 나오고 결국 구현된 모습은 Fat Service죠
[永會] 님의 말: 그건 아니라고.. 제가 백날 열을 올리지만..
[永會] 님의 말:  문제는 도메인만 포착해서는.. 구현할 방안을 내놓지 못하니까..
[永會] 님의 말: 아마.. 그게 가능해진다면 그렇게 가이드가 되도록 노력하는게
[永會] 님의 말: 일종의 직업적 사명감이 될 것 같습니다.
Toby님의 말:  네..

Toby님의 말: 일반적으로 분석모델과 실제디자인이 많이 차이가 나나요?
[永會] 님의 말: 문제는.. DDD적 접근이 아닌 현행의 BEC(Boundary-Entity-Control) 방식의
[永會] 님의 말: 접근이 대개의 경우.. 근저를 이루는데 이렇게 하게 되면.. 모든 사용 시나리오에
[永會] 님의 말: 화면과 엔터티(도메인 로직) 사이에 제어기가 들어가는데..
Toby님의 말: 네

[永會] 님의 말: 제어기가 사실 dispatcher 개념으로 인식해야 하는데
Toby님의 말: 그렇죠
[永會] 님의 말: 마치 제어기를 로직/ 엔터티를 디비 엔티티로 보니까
Toby님의 말: 그럼 Entity에 behavior가 들어가지 않나요?
[永會] 님의 말: 그걸 교정하는게 힘들구요
Toby님의 말: Anemic Entity?
[永會] 님의 말: 네. 교정을 해봐야 .. 제어기가 너무 많아져서
Toby님의 말: 네..
[永會] 님의 말: 의존성 처리에 시간을 투자하다 보면
[永會] 님의 말: 정작 도메인에 대해 고민할 시간이 없습니다.
[永會] 님의 말: 결국.. 컴포넌타이징/패키지를 어떻게 구성하느냐로 시간을 너무 허비하죠
Toby님의 말: 오브젝트를 사용했다 뿐이지 transaction script나 다를바 없군요
[永會] 님의 말: 네.

[永會] 님의 말: 그보다는.. 화면과 도메인을 명확하게 하고 중간에.. 이들 사이의 디스패칭은..
[永會] 님의 말: 실측 기반으로 시행착오법을 쓰거나 테스트 트리븐으로
[永會] 님의 말: 시나리오별 관리를 하는 것이 현재보다 훨씬 개선된 접근이 될 것 같습니다.
Toby님의 말: 네..

[永會] 님의 말: 이걸.. 입증하기 위해선.. DDD에 대한 최소한의 RI가 필요한데.. 그게 없어서.. 생각만 할 뿐이죠
Toby님의 말: 암튼 서울 가게 되면 제가 좀 괴롭히겠습니다
[永會] 님의 말: 저도.. 맞대응을..
Toby님의 말: ㅎㅎ

Toby님의 말:  오늘 같이 애기한 개발자중에는 50대도 있지만 20대 초반도 있더라고요..
[永會] 님의 말: 다양한 스펙트럼이네요
Toby님의 말: 네. 외국 IT컨퍼런스의 특징이죠. 그게 젤 부럽죠.. ㅜㅜ
Toby님의 말: 백발의 아저씨들도 있고. 펑크스타일의 젊은 이들도 있고 그래도 잘 어울려서 얘기할 수 있으니..
[永會] 님의 말: 네.. 저도 TSSS 가서
[永會] 님의 말: 젊은 mule 개발자에게 백발의 교수님 같은 분이 질문하는게 인상적이다 못해 감동적이었는데.. 
[永會] 님의 말: 평범한 모습이군요.. 그들에게는
[永會] 님의 말: 하긴.. 저희 스터디에도.. 대학생 아들 둔 영보님 오십니다. 
Toby님의 말: 오호.. 그렇군요.
[永會] 님의 말: 요즘 Prototype 소스 코드 분석에 빠져서 사시죠.

Toby님의 말: 오늘은 일본 NTT에서 온 개발자를 한명 만났는데
Toby님의 말: 아시안 스프링 유저그룹을 만들기로 했습니다
Toby님의 말: 그 친구가 일본에서 스프링 커뮤니티를 준비한다고 하니
Toby님의 말: 여러가지로 교류도 하고 필요하면 서로 컨설팅도 해주고 할 생각이죠.
[永會] 님의 말: 와우..
Toby님의 말: 아무래도 아시아는 워낙 소외된 것 같습니다
Toby님의 말: 언어문제도 있고 정보도 제한되어있고

[永會] 님의 말: 토비님은 마치 저에게 DDD 전도사 같습니다. 
Toby님의 말:  핫핫..
[永會] 님의 말: 이미 저도 DDD에 대한 믿음이 꽤 있는데
[永會] 님의 말: 거의 확신을 심어주려고 하시네요
Toby님의 말: 어쩌다 보니. 지난 Spring세미나 준비하면서 부터

Toby님의 말: 사실 관심은 컸는데 실무에 적용하려니 너무 막막해서 좀 힘들었죠.
Toby님의 말: 이번 컨퍼런스때 많이 배우고 가면..다시 도전해볼 생각입니다
Toby님의 말: 사실 아직도 막막한게 많지만요. ㅋㅋ

[永會] 님의 말: 제가 그 세미나 가게 된 것도 고객사 여자 차장님이 알려줘서 갔는데
[永會] 님의 말: 그때까지만 해도 전 DDD의 Enabling Tech가
[永會] 님의 말: Spring인지 인지하지 못할때였습니다.
[永會] 님의 말:  그때 세미나 듣고 아주 인상적이었습니다.
Toby님의 말: Eric말이 Spring은 minimalism을 지향하기 때문에 DDD에 적합하다고 하더라고요
Toby님의 말: 거기에 AOP기술과 POJO기반의 컨테이너 등등이 결합해서 멋진 도구가 된 것 같습니다

[永會] 님의 말: 하긴.. 저도 모델링 오래 하지 않았지만.. 모델 관점에선 minimalism 추종자입니다.
[永會] 님의 말: 보편적으로 분석 모델이라고 칭하는 것 중에서 도메인 모델만 추리고
[永會] 님의 말: 그걸.. 구현을 통한 검증 과정에서 확신을 갖아나가는 방법
[永會] 님의 말: 이것이 진짜 모델링이 될꺼라 생각합니다.
Toby님의 말: 네..

[永會] 님의 말: 지금은.. 대개 모델링과 개발을 분리하거나 약간의 연결고리 정도로 보는데
[永會] 님의 말: 전.. 둘이 완전히.. 통합적  사고로 투영된다고 보구요.
Toby님의 말: 네.. 맞습니다. DDD의 철학이 그거죠.
Toby님의 말: 분석, 설계, 구현이 단일화된 관점으로 다뤄지는 거죠

[永會] 님의 말: 그러려면.. 반드시.. 모델이 고도로 응축된 산출물이 되어야 한다고 믿습니다.
[永會] 님의 말: 네.. 현장을 보면.. 고객들이 요구하는 팬시한 산출물에 맞춰주는라
[永會] 님의 말: 본질보다는.. 기법이 강조되어 전달되고
[永會] 님의 말: 게다가.. 무거운 CASE 툴과 결합하면 화학반응(?)은.. 상상 이상입니다. 
[永會] 님의 말: 제가.. 모델링에 회의를 느낄 정도였죠.

Toby님의 말: Eric이 강조한 것은 Modeling은 그 목적을 분명하게 가지는게 중요하다는 겁니다.
Toby님의 말: Keith는 그것을 영화를 만드는 것에 비유하기도 했죠
Toby님의 말: 하나의 팩트를 가지고도 다양한 영화를 만드는 것처럼.
[永會] 님의 말: 영화요?
Toby님의 말: real world의 특별한 관점을 가진 snapshot이라는 뜻이죠
[永會] 님의 말: 아..  모델링이 스냅샷이라구요
Toby님의 말: 네.. 목적을 가진 스냅샷이죠.
Toby님의 말: 목적에 따라서 다양한 모델이 나올 수도 있다는 거고요
[永會] 님의 말: 네.. 목적..

Toby님의 말: 하나의 완벽한 모델을 만들려고 하지는 말라고 하더라고요
[永會] 님의 말: 그게 핵심이죠.
[永會] 님의 말: 목적에 따라 다각도의 뷰를 정의할 수 있는데 대개 뷰 하면.. 4+1뷰식으로 얘기하죠..
[永會] 님의 말: 그건.. 초석이 되는 논문일뿐 시간이 지나고 장소가 바뀌고 사람이 바뀌면
[永會] 님의 말: 뷰도 바뀌는게 당연한 이치인데

Toby님의 말: DDD는 훨씬 실용적으로 접근하는 것 같습니다
Toby님의 말: 도메인엑스퍼트와 개발자간의 커뮤니케이션을 통한
Toby님의 말: 통일된 언어로 표현된 시스템의 문제가 바로 모델이라는 거죠
[永會] 님의 말: 넵.. 모델링 관점에서 보면... 일종의 Xtreme Modeling이죠
Toby님의 말: 네.. 그런 것을 지향하더라고요
Toby님의 말: 모델과 구현이 긴밀히 연결되어있어야 하는 이유중의 하나가
Toby님의 말: 변화에 쉽게 대응하기 위한 것이라는 거죠.
모델은 초반에는 잘 나왔는데.. 바뀌다보면 구현만 바꾸고 모델은 초기버전으로 남는 경우도 많으니까요
[永會] 님의 말: 넵.. 

[永會] 님의 말: 변화에 대한 적응성의 골자는 모델과 코드의 alignment를..
[永會] 님의 말: 사람이 인지하기 좋게 하는 것인데
[永會] 님의 말: 그걸.. 자꾸만.. 툴로 자동화 하다 보니
[永會] 님의 말: 사람들이 연계를 잊어버리도록 독촉하는 결과가 되죠

Toby님의 말: 툴을 써서는 변화의 속도를 따라잡기가 힘들죠. 특히 비주얼 툴...
[永會] 님의 말: 제가 모델링 도구를 쓰면서 느낀게.. 비주얼 툴을 포커스를 가지고 쓰면
[永會] 님의 말: 상당히 좋다는 것입니다. 
[永會] 님의 말: 종이나 PPT로는 시맨틱스 관리가 안되니까요..
[永會] 님의 말: 문제는.. 자신이 교육받은 방식으로
[永會] 님의 말: 그대로 쓰려는 습성을 못버리는게 문제죠
Toby님의 말: 네.. 보통 비주얼툴의 단점을 얘기할 때
Toby님의 말: 수정하는데 시간이 많이 걸린다는 거라고 하더라고요

[永會] 님의 말: 자동화 기능을 풀로 쓰려는 고객들의 잘못된 욕구가
[永會] 님의 말: 도메인의 문제에 툴의 문제와 모델링 프로세스의 문제를 가중시켜서
[永會] 님의 말: 이제 막 모델링을 익힌.. 도메인 엑스퍼트나 개발자들을
[永會] 님의 말: 안개 낀 도로로 몰아버리는 격이죠
Toby님의 말: 네.. 쩝.

[永會] 님의 말: 근데.. 전..  처음부터 그런 모습만 목격하다가
[永會] 님의 말: IoC 덕에 그래도 인터페이스 제너레이션의 의미를 찾는 법을 작년에 경험했고
[永會] 님의 말: 돌아오는.. 해에는.. DDD가 이런 현실을 조금이라도 개선해주리라고 믿습니다. 
Toby님의 말: 네..
[永會] 님의 말: 그래서.. 즐겁네요
Toby님의 말: DDD는 더 많이 연구가 필요한 분야일 것 같네요
Toby님의 말: 암튼 DDD시대가 도래하기를 기대하고 있습니다
[永會] 님의 말: 넵..

Toby님의 말: 사실 Spring/Hibernate를 적용해서 나름 POJO기반의 로직을 구현했다고 해도
Toby님의 말: 시스템이 복잡해지면 그 장점이 많이 사라지더라고요
Toby님의 말: SQL에 로직을 담는 것보다는 훨 낫지만
Toby님의 말: 자바같이 코드가 redundant한 랭귀지로는 POJO를 써도
Toby님의 말: 로직이 복잡해지면.. 읽기가 힘들어지죠
Toby님의 말: anemic model + big service layer의 한계가 그것인 것 같습니다

(중략)

[永會] 님의 말: 피곤하지 않으세요?
Toby님의 말: 네.. 사실 피곤해서 저녁을 굶고 그 시간에 잤더니 지금은 쌩쌩합니다
[永會] 님의 말: 헉
Toby님의 말: 배는 고프지만..
Toby님의 말: 파티때 살사랑 치즈 등등이 나와서 그걸 조금 먹었죠
Toby님의 말: 빈속에 간만에 맥주도 한잔 했더니 기분이 좋네요..
Toby님의 말: 내일은 developerworks에 참관기를 써서 넘겨줘야 해서 바쁠 것 같습니다
Toby님의 말: 일정상 내일까지 달라고 하더라고요
[永會] 님의 말: 네..   점심 먹으라고 호출하시네요. DDD 얘기 즐거웠습니다. 
Toby님의 말: 네.. 좋은 주말 보내세요

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회
[TSE] Designing Stateful Web Application Control Flow with Erwin Vervaet

Spring Web Flow (SWF) does not fit into an application or a feature where free-flow navigation is required. It works best where you need to lock down and control navigation.

Spring Web Flow는 자유로운 네비게이션이 아니라 네비게이션 흐름을 관장하고자 할 때 필요
하다.

Core Functionality

  • Navigation is controlled by a flow (complete navigational control)
  • Automatic state management (scoping, cleanup)
  • A flow is a reusable application module (fully encapsulated: input/output contract, black box)

전체적인 개념 설명

SWF is not a general purpose workflow engine. It's simplified for use with web conversations and lacks features like split and join.
범용적인 워크플로우 엔진이 아니라 웹상에서의 Continuation을 위해 단순화 된 것이다. 고로 플로우의 fork/join이 안된다.

continuation이란?

서비스와의 링크는 어떻게 시키냐?

<bean-action bean="phonebook" method="search"> 
    <method-arguments> 
        <argument expression="flowScope.searchCriteria"/> 
    </method-arguments> 
    <method-result name="results"/> 
</bean-action>

bean 이름과 메소드를 지정해주면

public interface Phonebook {
   public List<Person> search(SearchCriteria criteria);
   public Person getPerson(Long id);
   public Person getPerson(String userId);
}

허걱 이렇게 되면.. Controller는 사라지느냐?

<bean name="/phonebook.htm" 
class="org.springframework.webflow.executor.mvc.FlowController"> <property name="flowExecutor" ref="flowExecutor"/> </bean>

설정만으로 가능한 모양이다.

매개변수를 넘기는 방식은 Form을 쓴다면 아래와 같고

<form:form action="phonebook.htm" commandName="searchCriteria" method="post"> 
    <input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}"> 
    <input type="submit" class="button" name="_eventId_search" value="Search"> 
    ... 
</form:form>

Link 사용시는 아래와 같다.

<a href="phonebook.htm?_flowExecutionKey=${flowExecutionKey}&amp;_eventId=select&amp;id=${colleague.id}">

단지 영감을 줄 정도만 요약했다.

SWF comes with 4 repository (storage) implementations

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회

다음 세션을 듣느라 토비님의 중계가 끝나고 난 후 막 자려던 찰나에 Raible의 블로그를 통한 실황 중계가 시작되었다.

DDD 보다는 역시 그에겐 [TSE] Rapid Web Application Development with Rob Harrop가 흥미로운 모양이다. 세 개의 세션 가운데 망설이다가 롭 해럽의 세션을 선택한 사유가 흥미롭다.

If you don't use your knowledge in two weeks, you generally lose it


맞다. 뭐든 곧 활용할 것이 아니라면 모르는 것이 약이 될 수도 있다.

아젠더에 대한 그의 긴 메모를 그대로 옮기는 것 대신에 흥미로운 부분만 요약해본다.

Basic Tool Set

Rob recommends IDEA. 흠... Jetty is your friend! It allows you to rapidly deploy, it's resilient to hot deploy, starts everything in about 2 seconds and integrates with everything.

IDEA와 Jetty라... 일단 Jetty는 조만간 시도해봐야겠다.


Accelerating Spring MVC development

Rob이 SimpleFormController을 권장하지 않는 점이 흥미로웠다고 한다. Spring MVC에 처음이라면 차라리 SFC를 배우지 말고 바로 Web Flow를 쓸 것은 권장했다고 한다.

One of the new things in MultiActionController is you don't have to return ModelAndView - you can return Map or have void methods as well.

Another new class in Spring 2.0 is ModelMap. This class figures out your model names based on the simple class name. Single objects are simply lowercased, whereas collections of objects are available as objectnameList (i.e. a Set of User objects will be userList).


몰랐던 내용이다. 그리고 CoC를 위해 기억해둘만한 것

more..

Ruby 연동에 관한...

<lang:jruby id="stocklistController"
  script-source="WEB-INF/script/StocklistController.rb"
  script-interfaces="org.springframework.web.servlet.mvc.Controller"
  ... />

Raible의 요약을 옮겨본다.

Summary: Rapid Development with Spring MVC

  • Use a project template: Build your own (simply create a ZIP file) or use Maven 2 archetypes.
  • Make sure you can deploy quickly and frequently: Jetty is the way to go here.
  • Build deployment into your build script: slapped wrists for using Tomcat Manager!
  • Adhere to a code/test cycle: create mock tests to test error conditions. Use integration tests to verify end-to-end functionality.
  • Code by Convention reduces repetition and increases uniformity.
  • Dynamic languages: rapid prototyping, take advantage of additional language features
  • JSP form tags: Largely replace <spring:bind/>

Exploiting Web Flow

왜 굳이 Web Flow를 써야 하는가?

Productivity! It removes plumbing from your code: state management, flow management, allowed actions/security, isolation and concurrency. By removing this plumbing, it allows you to focus on the business code.


Web Flow의 핵심 컴포넌트

  • Flow Definition: A definition of a process in the application. For example: checkout, register and CRUD.
  • State: A single state in the execution of a flow.
  • View State: A pause state that displays a view to the user and typically prompts for input.
  • Action state: A stat that executes on or more actions and then moves to another state (where the logic happens).
  • Decision state: a routing state, evaluates or or more expressions (against data in the various scopes) and routes to a given state.
  • Action: The logic inside the Action state that gets executed.
  • Event: The user signaled event (submit, cancel, process, etc.).
  • Transaction: a movement from one state to another in response to some event.
The three configuration elements of Spring Web Flow are: Flow Executor, Flow Repository and Flow Registry


폼 컨트롤이나 위저드에 비해 Web Flow의 강점은 테스트라고 한다: AbstractXmlFlowExecutionTests



Cool tools to save you time

  • SiteMesh: Apply site-wide formatting, use it in conjunction with a CSS Framework (Rob is using the same one that AppFuse does - Mike Stenhouse's CSS Framework).
  • AspectJ: Great for adding in filtering, monitoring and profiling.
  • Jamon: Great in conjunction with AspectJ.
  • JMX: Adds in management functionality.

토비님이 주로 DDD 세션을 듣기 때문에 Raible의 글을 보충역할을 해준다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회
Spring Experience 2006이 시작되었다. 토비님은 자비로 참석했다고 한다. Spring에 관심이 없는 사람도 이 그림을 보면 컨퍼런스에 흥미를 느낄 지 모르겠다. ^^

사용자 삽입 이미지

대화 내용을 옮겨놓는다. 더 자세한 경험담을 듣고자 한다면
The Spring Experience 첫날


Toby님의 말: 방금 오프닝 키노트 끝나고 들어왔죠
Toby님의 말: 로드존슨이랑 스프링 멤버들 다 보고 왔습니다
[永會]님의 말: 오프닝은 rod johnson이 했겠군요?
Toby님의 말: 그죠. 분위기가 달라서 그런지 아주 발표를 편하게 하더라고요
[永會]님의 말: 저도 스페인에서 봤지만, 그땐 로드 존슨 혼자였는데
[永會]님의 말: 게다가.. JBoss 무더기가 주류여서.. 다소 아웃사이더였습니다.
[永會]님의 말: 근데.. 스프링 파티니까..
Toby님의 말: ㅋㅋ
[永會]님의 말: 오픈시드에 갔더니 응원/부러움의 메시지가 있더라구요
Toby님의 말: 여러모로 기대가 되는군요..
[永會]님의 말: 흠.. 저도 내년에는 사비를 들여서라도 가고싶습니다.
Toby님의 말: 내년에는 꼭 같이 가죠
Toby님의 말: 찾아봤지만 한국사람은 한명도 없는 것 같더라고요
Toby님의 말: 중국애들은 많고, 일본사람은 한명
Toby님의 말: 아프리카에서도 왔던데..
[永會]님의 말: 아프리카요.. 허걱.. 남아공이요?
Toby님의 말: 정확히는 모르겠고 영어를 잘 못하는 새까만 아저씨들이
Toby님의 말: 몇 있더라고요
[永會]님의 말: 한국 사람이 토비님 뿐이란 것이..
Toby님의 말: 다 확인한 것은 아니니까 있을지도 모르죠
[永會]님의 말: 하긴.. 시대가 바뀌어도 자바원 같은 행사가
[永會]님의 말: 많이 가더라구요.. 뭔가 권위를 쫓는 인상을 받았습니다.
[永會]님의 말: 전.. 자바원은 돈 줘도 가기 싫던데..
Toby님의 말: 저도요.. 떼로 가서 우르르 몰려다니는 행사는 영..
[永會]님의 말: 그래서. 안그래도 자바원 대신 TSS 가겠다고 해서 간거거든요
[永會]님의 말: 자바원은 벤더 선전이 반은 되는 것 같습니다.
Toby님의 말: 그죠.. TSSS가 차라리 낫죠
[永會]님의 말: 원래 OOPSLA 가려다 시간 안맞아서..
Toby님의 말: 오늘은 멕시코에서 온 사람이 옆에 앉아서 얘기를 좀 했는데
Toby님의 말: 실력이 대단하더라고요
[永會]님의 말: 멕시코요?
Toby님의 말: 멕시코시티에서 스프링 전문 컨설팅 일을 하는데
[永會]님의 말: 흠.. 토비님에겐 정말 좋은 기회겠네요
Toby님의 말: 네.. 그러게요.
[永會]님의 말: 세션 발표도 발표지만.. 휴식시간이나 BoF 같은데서
[永會]님의 말: 그런 일들 하시는 사람 만나서 정보도 교류하고
Toby님의 말: 다양한 사람들 만나서 얘기하는게 재밌을 듯 싶어요
Toby님의 말: 뭐.. 다들 알아서 붙어서 수다떠는 분위기라
Toby님의 말: 식사도 3끼 같이 하고
[永會]님의 말: 식사 3끼요.. 호~
Toby님의 말: 중국, 일본에서 온 애들하고 얘기해서
Toby님의 말: 아시아 스프링 유저네트웍을 함 만들어볼까도 생각중입니다
[永會]님의 말: Wow
Toby님의 말: 상대적으로 아시아권 지원이 약하니까 뭔가.. 필요를 보여주게요.
[永會]님의 말: 매우 자극적인 이야기네요..
Toby님의 말: 일본에서 온 애는 아주 열심이던데
Toby님의 말: 오늘은 기회가 없어서 얘기는 못했지만 낼 한번 만나볼려고요
Toby님의 말: 내일 첫세션은 Eric Evans의 DDD입니다
[永會]님의 말: 헉
Toby님의 말: 전체 트랙이 5개인데.. 그중 하나가 DDD트랙이죠. DDD만 열개세션이 있죠
[永會]님의 말: 토비님은 아마도 DDD on Spring이 제일 관심을 갖으실 것 같습니다.
[永會]님의 말: spring 자체 뭐.. 대부분 아시니까
Toby님의 말: 사실 다른 기술은 자료를 보면 되는데
Toby님의 말: DDD는 이게 경험적인 지식이 많이 필요한지라
Toby님의 말: 이번에 좀 집중적으로 들을려고요.
[永會]님의 말: 흠.. 저도 미리 공부를 했다면 토비님 편에 질문이라도 전하는 건데.. 아쉽네요..
Toby님의 말:  DDD랑 OSGi, WebFlow, SpringWebSerivce 등등이 관심분야죠..
Toby님의 말: 뒤에 세개는 내년에 Spring의 개발 포커스가 되는 분야라고 하네요
[永會]님의 말: OSGi는 어떤 파급효과가 있을지 저는 영 감이 안오던데
Toby님의 말: 저도 막연한데.. 암튼 다들 관심이 지대하더군요
[永會]님의 말: 디플로이의 자유도 문제인가요?
Toby님의 말: 서비스지향적인 컴포넌스 아키텍처인데
Toby님의 말: 그것도 포함되죠
Toby님의 말: 플러그인 구조로 핫플러깅이 되고
Toby님의 말: 이클립스도 지금은 OSGi호환으로 되어있죠
[永會]님의 말: 흠.. 그럼.. 컨테이너들이 OSGi-compliant 되는 것이 필수겠군요..
Toby님의 말: 그래서 플러그인 만들때 OSGi설정을 같이 하더라고요
Toby님의 말: 그럼 스프링으로 만든 서비스를 이클립스에 플러그인으로 척 붙이는 게 가능하다는 얘기죠
[永會]님의 말: 일종의 표준 모듈 스펙이 되겠군요
Toby님의 말: 뭐.. 아직 잘은 모르겠지만 나름 영향력 있는 회사, 단체들이 멤버니
Toby님의 말: 암튼 기대해볼만 합니다
Toby님의 말: 예습을 해야하는데.. ㅋㅋ
[永會]님의 말: 행사가 3일인가요? 3박4일?
Toby님의 말: 3박4일인데 오늘은 뭐 키노트만 하니까 실제로는 풀로 3일이죠
Toby님의 말: 50개 세션. 공식행사가 밤 11시 끝나죠
[永會]님의 말: 딱 좋네요...
Toby님의 말: 저녁먹고 키노트 하고 BoF하고, 또 파티하고
Toby님의 말: 아침도 같이 먹고 어디 구경다닐 시간도 없네요..
[永會]님의 말: 아침/저녁을 같이 먹는다니.. 하드코어 컨퍼런스네요
Toby님의 말: 그게 매력인 것 같아요. 같이 둘러앉아서 밥먹으면서 서로 토론하고
Toby님의 말: 스프링 개발자들한테 언제든지 가서 질문해도 된다네요
Toby님의 말: 하드한 질문을 하라는데.. 뭘 물어볼지..??
Toby님의 말: 오늘 들은 재밌는 얘기중 하나는
Toby님의 말: 로드존슨도 스프링의 모든 기능을 다 못 써봤다네요
[永會]님의 말: ㅎㅎ
Toby님의 말: 어떤게 있는지는 알지만..
Toby님의 말: 이제는 Spring Portfolio라고 하더군요
Toby님의 말: 워낙 범위가 커지니까..
[永會]님의 말: 하긴 관련 프로젝트까지 포함하면
[永會]님의 말: J2EE를 거의 포괄하지 않나요?
Toby님의 말: 그렇죠.
[永會]님의 말: 참.. 거긴 몇시죠.. 지금?
Toby님의 말: 지금 밤 10시반이네요
[永會]님의 말: 아.. 이제 말로 여유로와진 시간이시군요.
[永會]님의 말: 낼부턴.. 이시간에 정리/예습하셔겠네요
[永會]님의 말: 대화 내용을 블로그에 옮겨도 되겠죠.
[永會]님의 말: 옮기고 식사 하러가겠네요.
[永會]님의 말: 블로그에 올려놓고 토요일날 들으러 오라고 하려구요..
Toby님의 말: 그러세요.. 영회씨하고는 대화도 조심해야겠군요..
[永會]님의 말: ㅋㅋ

댓글 보기



이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회