토요일 아침엔 커피를....

Posted 2007. 1. 22. 01:00
토요일 아침엔 커피를 마신다. 종로에서 마신다.
토요일 아침의 커피향이 너무나 좋다. 그런데 나는...커피를 못마신다. 속이 매우 아픔..

내 블로그를 보시는 분중에 나와 함께 커피를 마시고 싶으신 분은 아침 일찍 종로로 오면 됨다...... 아마 웨이크업하기 힘드실 것입니다....

물론 나는 커피를 못마시기에 보통 석류주스나 혹은 다른 음료를 마신다. 주로 단호박 센드위치를 토요일 아침밥으로 먹는데 자꾸 먹으니까..좀 지겹기도 하고....ㅋ

오늘까지 OOAD를 본 진도는 100Page다. 다시 한번 느끼는 건데 가장중요한건 고객의 요구사항.... 이게 결론...T.T

토요일 아침에 석류 주스를 마시는데 대뜸 이런 생각이 들었다. 언젠가 본  ModelAndView 클라스...클릭 이 클라스... Spring에 있는 놈인데 잘못 만든거 아냐.... ??
라는 생각이 문뜩.... 왜냐하면 생성자를 생성할때 아래와 같이 생성하자나....


ModelAndView()
          Default constructor for bean-style usage: populating bean properties instead of passing in constructor arguments.
ModelAndView(String viewName)
          Convenient constructor when there is no model data to expose.
ModelAndView(String viewName, Map model)
          Creates new ModelAndView given a view name and a model.
ModelAndView(String viewName, String modelName, Object modelObject)
          Convenient constructor to take a single model object.
ModelAndView(View view)
          Convenient constructor when there is no model data to expose.
ModelAndView(View view, Map model)
          Creates new ModelAndView given a View object and a model.
ModelAndView(View view, String modelName, Object modelObject)
          Convenient constructor to take a single model object.

보는 바와 같이 View가 먼저다. 해깔리게...시리...T.T
암튼 간결하니 잘 만들었다고 할수있다....그러나...석류주스를 마시다 든 생각 또 하나....

이건 조금더 복잡한 건데 저 모델이라는 놈이 가만히 보면 Object이다. 그런데 로드존슨은 왜 이놈의 이름을 ModelAndView라고 지었을까....?? 저 오브젝트에 이런 저런 클라스들이 다 들어가겠지...오라클의 탑링크...IBatis 등등등....

스프링에서 생각하는 모델을 스프링에서는 어떻게 정리 했을까...라는 생각이다. DTO, VO, Entity라 불리우는 객체들을 저 모델의 값으로 넘겨주는 경우에 대한 생각이다. 아는 사람은 알다 시피 하이버네이트 세션을 대략 이용하면 화면에서 비지니스를 처리 하는 겪이 된다. 이러한 가정은 DTD나 VO를 EJB에서 처럼 사용하지 않았다는 가정하에 가능하겠다. 뭐 내 생각이지만......
언젠가 하이버네이트를 보다가.... 이상한 오픈소스 프레임웍을 봤는데 테그라이브러리로 Hibernate를 제어하는 것이다. 결론적으로 보면 화면에서 바로 써버리겠다는 말인데....
그때는 이런 황당한걸 왜 만들지 하는 생각이 많이 들었다.  어이 없었다...그때가 2004 초던가 였는데...다분히 내 머리속엔 EJB적인 생각 ㅋㅋㅋ ( 반성중 ) EJB는 그렇게 코딩 안하기에 그렇다. 그러니까 문제....
왜냐면 Lookup때문에 많은 자원이 소비 되어 몇몇 프락시성 클라스를 넣어줘야 하기 때문이다. 만일 EJB가 아니었다면 나는 Struts나 다른 프레임웍을 안배우고 오히려 View관련 Framework에 관심을 기울였을것 같다.

이렇게 이야기 하면 결론적으로 c/s의 아키텍처가 되는데 c/s의 db연동과 다른게 없다라는 생각이 또 들었다. ....하여간 쓰잘떼깅 없기능ㅋㅋㅋ
그러나 Layer구조로 된 도메인 모델이라면 그리 염려는 안해도 될듯 하기도 하고...
Layer를 횡단하는 구조는 아직도 의문이다. 그런데 어쩌는 수 없이 횡당하는 경우가 생긴다는 것은 인정한다. 억지로 Layer 구조를 갖추기 위해 몇몇 아키텍처적인 더미 클라스를 넣는  패턴을 쓰기도 하지만.... T.T

토요일날 아침부터 쓰잘때기 없는 생각하고 있음....
도메인 모델링을 하게 되면 어쩌면 고질적인 DTD나 VO가 없어질지도 모르겠다는 생각이 조금들었다. 물론 없어지기는 힘들지도 모르겠다. 트렌젝션이나 세션문제가 그리 간단하지 않을꺼라는 생각이 들었기에 말이다..... 왜냐하면 사람들의 편견문제부터 시작이 될듯....
서비스의 시작이라는 그리고 그 서비스에 대한 트렌젝션까지 알아야 할것이다.
고려할게 많은 상황....

그런데 이렇게 하면 또 문제가 나중엔 도메인 모델링된 구현체에 화면의 로직이 섞을지도 모른다는 생각이 조금들었다. 또 상상력 발동중....도메인모델링 구현된 코드에 AOP섞으면...
음..... 멋지겠엄...ㅋㅋ

암튼 상상을 한 4시간 정도 하면서 토요일 아침을 보냈다.
그리고 나서 집에와서 와이프하고 영화 한편을 봤다. 영화 이름은
Pursuit Of Happyness

와이프는 보다가 잠들었음....ㅋㅋ 꼭 봐야 하는데....

사용자 삽입 이미지



http://movie.naver.com/movie/bi/mi/review.nhn?code=64354#01
보면 10점 만점에 까탈스런 우리나라 넷티즌이 9.11점 줬음...
음..어제보다... 0.3점 깎였네....ㅋ 9점이면 대단한 영화인데....

이 영화 정말 감동적인데 꼭 봐줘야 하는 영화다..가볍게 보고 억지로 감동받으려고 보려한다면 안보는게 좋고....귀여운 꼬마는 윌스미스의 친아들....
윌스미스가 연기를 정말 잘하네...ㅋ
영화보는 동안 계속 한숨을 쉬어야 했던 그 영화....
마지막 황제를 보고 눈물을 흐렸고..그 이후 그럴듯한 영화 안보였는데...이영화는...
음...

왜 저 포스터 보면 happyness라고 적었을까요 ?? 아시는분 ??
우리나라 말로 치면 행복을 향복이나 항복으로 적은건데....
영화자세히 보면 아실듯.....

ps : 영화는 크리스 가드너 라는 분의 실제 이야기인데...
본받아도 될 아름다운 사람의 이야기 이다. 나도 저런 의지를 가져야....
http://en.wikipedia.org/wiki/Chris_Gardner : 멋진사람
http://www.gardnerrich.com/ 차린 회사

이전에 오프라 쇼에 나왔을 때는 그런갑다 했는데 (영어를 다 이해 못해서)
사람들이 마구 마구 울어서 그냥 그런갑다 했는데... (이쑈 보면 눈물바다가 많아서)
영화와 위키를 보니 더 대단하시다는....

블로그에까지 논리적으로 적기 시작하면... 대강 끝내야....
사용자 삽입 이미지



PointCut 예제, Advice등의 모음

Posted 2007. 1. 11. 01:40
클릭
나름 좋아 보임... 정리 잘되었음...

스프링의 Pointcut 아래와 같음 위의 예제는 몇개밖에 없지만 꼭 필요한 것들임
org.springframework.aop.support.ComposablePointcut
org.springframework.aop.support.ControlFlowPointcut
org.springframework.aop.support.DynamicMethodMatcherPointcut
org.springframework.aop.support.JdkRegexpMethodPointcut
org.springframework.aop.support.NameMatchMethodPointcut
org.springframework.aop.support.Perl5RegexpMethodPointcut
org.springframework.aop.support.StaticMethodMatcherPointcut


advice도 5가지 - 이것도 예제 참조
Before Advice : org.springframework.aop.MethodBeforeAdvice
After returning Advice : org.springframework.aop.AfterReturningAdvice
Around Advice : org.springframework.aop.MethodInterceptor
Throws Advice : org.springframework.aop.ThrowsAdvice
Introduction : org.springframework.aop.IntroductionInterceptor



Spring JDBC Template

Posted 2006. 12. 28. 00:36
http://www.oracle.com/technology/global/kr/pub/articles/marx_spring.html
갑자기 패턴 생각이 나서 링크 걸었음.


어제는 친구에게 전화가 와서 대뜸 물어보는것이 ....
친구 : Spring을 쓰면 좋냐 ??
나 : 쓰기 나름이지.... 좋고 나쁘고는 없어....

가끔 느끼는 것이지만.... 아무런 대책도 없이 기술들을 마구 접하고 업무에 적용하다 보면 안쓰는것 보다도 더 안좋다고 생각한다. 즉 땜빵식 기술 접함..... 스터디는 좋다.
이것을 에자일 하다고 표현하는 이가 있기도 하다. 정말 에자일인가 ? 모르겠다. 알아서 생각하면 될듯....

외국 사이트에서  무슨 글을 읽다가 발견한....스프링을 안쓰는 이유가 "몰라서" 라고 한것 같다. 배워도 안되는 것이 있다. 경험인 것이다. 이것을 얼만큼 많은 업무에 써보고 그것을 아는가.... 라는..... 대안은 얼마나 있고..... 어디서 정보를 얻어야 하며....
기타 등등 생각할것이 많은 것이 고민거리이다.....
만일 우리집 홈페이지라면 그냥 암거나 써서 만들겠지만 말야....

친구에게 답해줬다.
"네가 하고 있는 프로젝트에 20% 이상 파일럿을 진행하고...check list 만들고 ....
안되는 것에 대해서 Gap분석을 한후 대안을 찾아.... 어차피 기술이나 아키텍처는 대안 이 매우 중요해서 대안이 없다면  억지로 기술을 적용할 필요는 없어, 최신기술을 쓰려다 비지니스를 서포팅 못한다면...안하느니 못하지....
네가 하고 있는 것에 안 맞을 지도 몰라... 좀더 많은 자원과 시간이 필요 하겠지...공짜가 어디있어...!!... 문서화도 해라... 간단하게 라도 해둬야 나중에 뭐했는지 알꺼 아냐... 나한테 대강 이란말 쓰지마... 그게 재앙을 가져온다....생각할게 얼마나 많은지 알아 ??? 이게 다가 아니라고.... 정말 내 도움이 받고 싶다면 문서화 해서 보내.... "

내가 보기엔 프레임워크가 문제가 아니라.... 사람의 마인드가 문제인듯...
좋다면 무조건 질러버리고 만다는... 지금 그래서 나또한 손해본게 한두개가 아니자나....
여전히 계속...쭈욱.. 그러고 있다. 나도 그러했다.


문서화를 하라는게 아니고 최소한 생각이나 한번은 해봤는지....
부끄럽지도 않은 모양이다..... 그때 그때 머리에서 생각나면 하는게 에자일이라고 우기는 인간도 간간히 있었음....

지금까지 본 몇몇 미신은 이러했다.
DDD면 다 해결 된다. :  네가 말하는 DDD는 국제전화임이 틀림이 없을 것이다.
Spring이면 다 해결된다 . : 봄에 뭐 어쩐다고....
웹서비스가 연동의 모든것이다. 그리고 나선 트렌젠션 어케 하냐고 나에게 묻는다. 질러놓고 보냐 ??
오픈소스는 소스가 공짜여서 맘대로 고치고 피드백도 빠르니깐 적용하고 본다.
IoC를 반드시 적용한다. AOP를 반드시 적용한다.


어떤 이에게는 이렇게 말해주고 싶다.
집에 홈페이지나  그렇게 만드세요..... 회사 피해주지 말공... 집에가셔서.....

Types of Inversion of Control

Posted 2006. 10. 30. 23:22
이전에 보았던 책인데 다시 보고 조금 정리 중입니다. ^^


Types of Inversion of Control - proSpring에서 인용함.


* Dependency Lookup comes in two types:
  1. Dependency Pull
  2. Contextualized Dependency Lookup (CDL).
* Dependency Injection also has two common flavors:  물론 메서드 인젝션도 있음
  1. Constructor Dependency Injection
  2. Setter Dependency Injection.


1-1. Dependency Pull
public static void main(String[] args) throws Exception {
 
       // get the bean factory
       BeanFactory factory = getBeanFactory();
 
       MessageRenderer mr = (MessageRenderer) factory.getBean("renderer");
       mr.render();
}

EJB개발을 하면서 저런 스타일은 많이 봐온 스타일이다 (JNDI Look Up) . 즉 이미 익숙한 패턴인것이다.
이것을 IOC 입장에서 설명하면 Dependency Pull 이다.


1-2. Contextualized Dependency Lookup (CDL)

public interface ManagedComponent {
 
  public void performLookup(Container container);
}

보는바와 같이 인터페이스에 1-1 처럼 레파지토리가 아니고 Context를 이용하는게 보인다.

2-1 Constructor Dependency Injection
public class ConstructorInjection {
 
  private Dependency dep;
 
  public ConstructorInjection(Dependency dep) {
       this.dep = dep;
  }
}

보는 바와 같이 Constructor를 이용하고 있다.
Constructor의 Argument를 이용하고 있다.
어느때 Constructor IoC를 쓰고 Setting IoC를 이용할지는 http://itgs.tistory.com/71
에 많은 자료를 두었다.

2-2 Setter Dependency Injection.

public class SetterInjection {
 
  private Dependency dep;
 
  public void setMyDependency(Dependency dep) {
       this.dep = dep;
  }
}

Spring Framework에서 가장많이 쓰이는 Injection이다. 일반적으로 java bean의 Set 메서드형태이며 configuration을 이용해서 객체를 할당한다.
http://itgs.tistory.com/71 에 가면 좀더 많은 자료가 있다. 물론 .net버전의 Spring에 대한 자료이지만 개념적으로 좀더 잘 설명이 되어 있어

Lookup 기반의 컴포넌트를 제작하게 되면 나중에 Test하기가 나빠진다.
WAS환경과 똑같이 만들기가 힘들다. 그러나 이미 많은 사람들도 알다시피...
IoC덕택에 pico Container 덕택에 Testing을 자동화하고 가상 객체들을 쓰는데 익숙해지게 된다. 이러한 것이 스프링 프레임워크의 특징이며 컨테이너라는 용어를 가져다 칭할수 있는 것이다.

요즈음 pro Spring을 다시 보고 있다. IT거버넌스를 하는데 pro Spring을 보냐고 묻는 사람들도 많이 있지만.... 일단 재미도 있기도 하고....
자세히 알만한것들은 몇가지 자세히 기술을 알 필요가 있기에 그렇다.
3년전인가... Spring을 이용해서 모 사이트를 구축했는데...
아직도 그것이 잘 이해 되지 않은 상태에서 구축되어 아쉬움이 많이 남는다.
아키텍처가 좋다 나쁘다는 말하기 힘들겠지만....

(실제 나는 나쁜 아키텍처가 존재한다고 생각하지는 않는다.)


Spring Framework은 EJB를 연동시 자신의 메커니즘(스프링이 컨테이너임을 좀더 인지한다면 IoC의 개념을 최대한 사용해야 했었다. )을 최대한 사용해야 한다.


아래의 자료는  DI에 대해서 구체적으로 잘 설명된 자료임.참조자료 ^^




Constructor Injection과 Setter Injection의 차이를 잘 설명하고 있다. 출처는
http://www.codeproject.com/cs/design/DependencyInjection.asp
이며 저 아래 보면
AOP에 대해서 나온다. 이러한 코드에 대한것들은 주로 .NET 이며
현 코드는 Spring .net 이다. java와 거의 다르지 않으므로 좋은 기사가 될듯 ^^


ps : 아래는 Spring java 버전의 글이지만...별다른 다른 점은 없음

Rod Jonson의 홈페이지에도 몇몇 글이 있다. 비교하면서 보면 좋을듯 ^^
(이젠 다른사이트에 블로그를 올린다. 오래된 블로그임)
http://blog.springframework.com/rod/?p=1




Pojo In Action에도 몇몇 글이 나온다. 빈을 어케 하는지에 대해서 나오는데
약간 설명한것 여기 소개하면 여기서는 constructor injection을 쓴다. 이유는 있다.
http://www.developer.com/java/ejb/print.php/3594121
이다.

자러가야지...졸리네...

http://www.theserverside.com/news/thread.tss?thread_id=34167 요것도 좋은글
http://forum.springframework.org/showthread.php?t=23139
링크하나더






Spring 링크관리

Posted 2006. 9. 7. 18:11
http://www.dev2dev.co.kr/pub/a/2006/03/jpa-spring-medrec.jsp
Spring과 Java Persistence API의 사용