프레임워크 개발이란 이미 있는 기술을 조합해서 어떻게 쓸지 결정하고, 툴이나 공통 모듈 정도를 만들어놓는 것이 아니다. 프레임워크란 애플리케이션의 코드가 효율적인 방법으로 개발돼서 사용될 수 있도록 새로운 틀framework를 만드는 작업이다. 스프링은 그 자체로 완벽한 프레임워크이지만 동시에 각 환경에 맞는 더 나은 프레임워크를 개발할 수 있게 해주는 이상적인 기반 프레임워크 이기도 하다. 각자 환경에 맞게 필요한 기능을 확장해서 사용할 이유가 없다면 스프링이 이토록 장황하게 확장 포인트를 정의하고 유연한 전략 패턴을 적용해놨을 리가 없지 않은가?

  • 토비의 스프링 3.1, 3장 스프링 웹 기술과 스프링 MVC 423p

아무런 생각없이 사용하던 프레임워크.

이제 그 안에 담긴 것들을 맛보기 시작할 수 있게 되었을까? 아직 멀었다.



DispatcherServlerDI전략.mm



토비의 스프링 3

저자
이일민 지음
출판사
에이콘출판 | 2010-08-24 출간
카테고리
컴퓨터/IT
책소개
스프링 프레임워크 3 기초 원리부터 고급 실전활용까지 완벽 가이...
가격비교 글쓴이 평점  



• 부제 : Architecting, Designing, and Developing Reusable Libraries
• 발표자 : 손영수(http://www.arload.net)
∘ EVA팀 리더
∘ PLoP 패턴 저자
∘ AsianPLoP

• 개발자의 진화
• 건강을 지켜라.
• 정덕영 : http://uvicrabbit.tistory.com
• Framework : semi-product <-> libraries 와는 다르다.
∘ 애플리케이션의 제어는 Framework 에게 넘기지.
∘ Framework 를 사용하면서, Framework에 대한 공부학습요구량은 증가하였지만, 실제로 작성하는 소스는 줄어들었다.
∘ Control Flow(IoC) 권한을 가지고 있는 녀석이 누구냐?
∘ 사용 이유
‣ 중복 제거(Avoid Dulpication)
‣ 생산성 향상
‣ 표준성 싸움(DeFacto war)


• 5topic
∘ Organization(조직) - The most powerful design tool
‣ 기술의 끝장(대부분의 문제는 사람에게서 발생한다)
‣ 많이 먹이면 관계가 원활해진다.
‣ Project management Triangle
‣ +1 Organization (조직의 문화를 고려하라).
• conway's law(http://en.wikipedia.org/wiki/Conway's_Law) : 4개의 그룹이 일을 하게되면, 4종류의 컴파일을 얻게 된다?
‣ 분위기 : 가족적인가?
‣ peremptory
‣ 조직의 크기
• 작은 조직
∘ simple Design
∘ Consistency Design : 분할되어 있는 디자인
∘ 80/20 법칙에 집중
• 큰 조직
∘ powerful design
∘ lack Consistency
‣ Framework를 사용하는 조직에게 맞춰라.
• 요구사항을 줄이는 방법
∘ 밥을 사라
∘ 호형호제
∘ Planning
‣ Peanut Butter
‣ Skyscrapers
‣ Moderation(중도)
• MS : MileStone = Scenarios + Feature
∘ Architecture
‣ Type 고려
• Primitives
• Libraries
• Abstractions
• Manage Dependencies
∘ Component : 시대의 흐름에 따라서 결합형태(기능이나 모양)이 변하는 것(가치를 흡수)
∘ Type of Dependencies
‣ API Dependency
‣ Implementation Dependency
‣ Circular Dependency : A -> B -> C -> A -> B -> C
∘ Layer를 적절하게 나누는 작업이 필요하다.
∘ 엄격한 계층화
∘ Tools를 이용하여 Dependency가 커지는 것을 제한한다.
∘ xDepend(Ndepend, Xdepend, CDepend)
∘ Solution : creat new a package.
‣ Packaging Principle
• Package Cohesion Principle
• Pakcage Coupling Principle
‣ 호환성 (Compatibility)
• 팀의 공간
• 소스를 보여주고 말하기
• 문제 처리 공간
• 물어볼 사람이 있다.
∘ Design
‣ Code Samples
‣ KISS(Keep It Simple! Stupid!
‣ 우선순위를 중심으로 해서 구현하기
∘ Development


• 조직에 대해서 신경써라.
• 아... 내가 산 아키텍트가 알아야할 97가지 이야기...를 쓴 사람이구나....
소프트웨어아키텍트가알아야할97가지
카테고리 미분류
지은이 RICHARD MONSON HAEFEL (지앤선, 2011년)
상세보기
• 발표는 재미있게 하는데, 두번째 들으니까... 식상하네...
  작년 아키텍트 대회에서 들었던 내용과 크게 다르지 않은 내용이었다. 처음 들었을 때는 신선하고 재미있었지만, 두번째 들으니 조금 시큰둥하게 느껴졌다. 처음 들었을 때도 그랬지만, 두번째 에서도 발표시간을 제대로 지키지 못하는 모습을 보니 준비가 무성의하지 않았는가 하는 생각도 들었다.
  분명 발표를 준비하느라 노력을 기울이셨을테지만, 사소한 것들에서 점수가 깍이는 것이 많이 아쉬웠다.

허니몬의 참가 트랙 및 현장 스케치
2011/06/20 - [Tech Trend(기술동향)] - [JCO] 2번째 Track : 도메인주도 개발(DDD)
2011/06/20 - [Tech Trend(기술동향)] - [JCO] 3번째 Track : Realtime Web application with Java
2011/06/20 - [Tech Trend(기술동향)] - [JCO] 4번째 Track : Framework Enginering
2011/06/20 - [Tech Trend(기술동향)] - [JCO] 5번째 Track : MongoDB with Play!

  지난 6월 19일, 삼성동 COEX에서 11번째 한국자바개발자컨퍼런스(http://kjdc.org/) 열렸습니다. KT가 주관사로 참여하고, 행사주관을 위한 이벤트기업과 계약하면서 행사진행이 이전의 컨퍼런스에 비해서 매끄러워졌다고 이야기들을 하시더군요. ^^

  원래는 MS에서 팝콘부스를 마련하여 맥주와 팝콘을 제공하려고 했었는데, COEX측에서 이를 거부하면서 팝콘돌이가 기운이 빠져있는지 계단에 널부러져 있습니다. 팝콘돌이가 열심히 돌아다니면서 개발자들과 어울려보려고 했지만, 우리나라 개발자들의 특성 중 하나인 '조용하고 내성적임'으로 인해 호응이 없자 기운빠져하는 모습이 역력했습니다.

  우리나라 개발자들도 잘 놀면 참 좋을텐데 말이죠. ^^;

  참고로, 저는 잘 못 놉니다. >ㅅ<);;;;

  계단 한구석에 앉아 넷북을 꺼내들고 뚜닥거리고 있는 사이에, 저와 비슷하게 도착한 이들이 들어가지 못하고, 행사장 입구에 있는 계단에 앉아서 트랙이 끝나기를 기다리고 있습니다. 가끔 해외 컨퍼런스에 참여한 개발자들이 보내오는 미국이나 해외컨퍼런스의 모습을 보면, 개발자들이 삼삼오오 모여 편안한 의자나 바닥에 앉아서 개발에 대한 이런저런 이야기를 나누면서 맥주한잔 하는 모습이 정말 부러웠는데, 그런 분위기를 연출할 기회가 잠시 주워졌었습니다. 하지만, 고품격(?) 전시회장인 코엑스에서는 행사관람객들이 아무곳에나 널부러져있는 것을 용납하지 않는 시설구조를 갖추고 있습니다. ㅡ_-); 어디 쪼구려앉아 있으면 시설물과의 부조화에 의한 위화감이 참 대단합니다.

이번 컨퍼런스는 크게 3개 주제로 진행이 되었습니다. 자바, 클라우드 컴퓨팅, 실습 의 주제로 7곳에서 50분씩 5개, 총 35개의 발표가 진행이 되었습니다. 오픈소스인 NoSQL에 속하는 MongoDB 쪽에 대한 많은 관심이 있었습니다. 아마도 클라우드 컴퓨팅, SNS의 대용량 데이터 처리에 대한 다양한 사례들이 나오면서 큰 유행을 일으키는 중이고, 앞으로도 NoSQL DB를 바탕으로 하는 다양한 서비스들이 출시될 것입니다.

  1500여 명의 개발자들이 참여한 이번 컨퍼런스는 제법 사람들로 북적였습니다. ^^; 저 사람들과 얼굴을 익히고 알게된다면 얼마나 좋을까요? 저에게는 살짝 무리일지도 모르겠습니다. 3개월동안 얼굴을 안보면, 얼굴과 이름을 까먹는 캐쉬메모리 기억력의 소유자거든요.... 헙...

한빛미디어에서 저자사인회를 주최하였습니다. 책을 구매하거나 가져온 책에 사인을 받으면 고급의 머그컵을 사은품으로 주는 사인회였습니다. 다만 아쉬운 점이라면, 한빛미디어가 행사장 안쪽에 부스를 개설하면서, 사인회도 구석에 마련되어 쉽게 발견할 수 없었다는 겁니다.  아는 분들이 모여 있어서 찾아가보니 저자분들의 사인회가 진행되고 있었습니다. 이렇게 구석에 마련된 사인회를 보고'헐~'하고 한탄이 절로 나오더군요.

  이왕 사인회를 할거면, 행사장을 향해서 자리를 잡았으면 더 많은 사람들이 찾아오고 저자분들도 많은 독자들과 만날 기회가 있었을텐데...


아마, 이날 코엑스에서 검은 백팩을 메고서 조용한 성격을 가졌을 것으로 보이는 사람들을 보셨다면,
99.99% 개발자였을 겁니다.


  많은 개발자들과 '우리나라 개발자' 들에 대한 이야기를 나누다보면 공통적으로 나오는 이야기가 있다.
'우리나라 개발자들은 조용하고 즐길 줄을 모른다.'
  오늘 JCO에서는 이례적으로 여성 아이돌그룹 '달샤벳'의 공연이 있었다.
http://yfrog.com/6fkhxz
  일반 대학 축제나 공연에서였다면 달샤벳은 열광적인 사람들의 환호성을 받으면서 공연을 마쳤을지 모른다.
기조연설이나 공연은 건너뛰고 와서, 사람들의 반응이 궁금해 물어보니, "팔짱을 끼고 조용히 경청했어요."라고 이야기해주는 이야기를 들으며 피식 웃음을 지을 수밖에 없었다. 그 아이돌 그룹은 얼마나 어색했을까?
  모두 팔짱을 켜고 조용히 그들의 춤사위에 집중하고 있었던걸까? ^^;;
  그나마 내가 만나는 많은 개발자들은 자신의 이야기를 상대에게 전하는 것에 어색해하지 않는다. 자연스럽게 자신의 생각과 기술에 대한 이야기들을 털어놓을 수 있는 흔하지 않은 개발자들이다. 한창 많은 것을 듣고 보고 배워야할 지금 내 입장에서, 그런 개발자들이 주변에 많다는 것은 너무나 이로운 일이다. ^^
   개발자는 자신이 배우고 알게된 것을 누군가에게 전하는 것을 즐길 수 있을 때 비로소 진정한 고수의 반열에 들어서게된다.
자신만 잘 아는 것은 결코 고수라 할 수 없다.
나도 내년에는 저 앞에 서서 발표를 하고 싶어졌다.

현재 자바모델링(http://javamodeling.com)에서 스터디에 참가하고 있다.

Struts2를 학습하던 중에 이 글의 제목과 관련된 내용을 만나볼 수가 있다.
위와 같은 문제가 발생을 하는 경우를 접하게 되었다. 가만히 읽어보면, result success 가 정의되지 않았다는 이야기를 내보내고 있다.

이 증상과 관련된 소스는 struts2.xml 과 LoginAction_KJH.java 와 관련이 되어 있다.
정확하게는 스트럿츠에서 사용하는 interface com.opensymphony.xwork2.Action 에 정의된 SUCCESS와 관련이 되어 있다.


struts2.xml
       
<action name="login" class="com.javamodeling.struts2.login.LoginAction_KJH">
       <result name="success">success.jsp</result><!-- return SUCCESS 인데, 찾는건 소문자로 찾네? -->
       <result name="error">failure.jsp</result>
</action>

LoginAction_KJH.java
        public String execute() {
           
            if (this.userid.equals(this.password)) {
                return SUCCESS;
            } else {
                return ERROR;
            }
        }

interface com.opensymphony.xwork2.Action 에서 정의한 SUCCESS를 확인해보자.
항목에서 SUCCESS = "success"로 선언되어있는 것이핵심이다. ^^;

LoginAction_KJH.java 소스에서는 return SUCCESS 를 보면 "SUCCESS"가 리턴될 것 같은 것이 일반 사람들의 마음이다(나만 그럴까?)

strtus.xml 을 보면 <action></action> 태그 사이에 <result name="success">success.jsp<result/>로 적어놓은 것이 보일 것이다. 물론 이렇게 되어 있으면 정상적으로 작동한다. 혹시, <result name="SUCCESS">success.jsp<result/>로 작성되어 있지 않은지 확인해보자.

"SUCCESS"로 되어 있다면 "success"로 수정을 하자. 그런 후에 실행해보자.
정상적으로 실행이 되는 것을 확인해볼 수 있을 것이다.

이런 원인은 JUnit TestCode를 작성하여 확인해볼 수 있었다. excute()에서 리턴되는 값 때문에 생긴문제라는 확신을 하게 되었다.
요즘 TDD(Test Driven Development)에 대해서 공부를 하고 있는데, 이렇게 활용할 수 있다는 발견에 공부한 보람을 느끼며 더 열심히 해야겠다.

"SUCCESS"를 "success"로 변경하면,
정상적으로 실행된 것을 확인해볼 수 있다. 이를 통해서, LoginAction_KJH.java의 execute()에서 return SUCCESSreturn ERROR의 반환값을 확인해볼 수 있다.

이런 인식의 오해를 해결하는 방법이라면

return "SUCCESS" 나 return "success"와 같이 반환되는 값을 정확하게 정의를 해주고 나서
struts.xml 에서 <result name=""></result>에서 name을 정의해주는 것이 아닐까?

+ Recent posts