Module view Style은 무엇인가 ?

Posted 2006. 9. 3. 02:33

1. 사용용도 :

1. 구축 : 소스코드를 위한 청사진으로 모듈과 소스파일 혹은 디렉토리와 같은 물리적인 구조는 종종 밀접한 관계를 가짐
2. 분석 : 추적성, 영향도분석의 도구로 사용되며 모듈은 시스템을 분할하기 때문에 그렇다. 시스템의 기능요구사항이 어떤 모듈에서 지원하는지 결정할수 있게 되므로 추적성을 가질수 있음.
또 한 모듈사이의 컨텍스트 다이어그램이 표기하듯 이러한 것을 통해 영향도 분석이 가능함.
3. 시스템을 처음 접하는 사람들에게 시스템의 기능을 설명하기 위한 도구로서 사용되기도 함.
4. 그런데 모듈뷰 스타일은 성능, 신뢰성등을 나타내는 런타임 속성을 나타내는 분석툴로서는 쓰이지 않음.

2. 모듈뷰의 모습은 무엇으로 표현하는가 ?

모듈뷰의 단위는 모듈이다. 이름에서 보는 바와같이....
그러면 모듈은 무엇인가 ? 모듈뷰의 구현요소이고 모듈에는 기능적인 책임이 할당되는데 이때 cohension 은 높이고 coupling은 낮춘다.
cohension은 응집력이라 하고 coupling은 결합도라고 하면 될듯
모듈뷰는 모듈간의 관계를 표시한다.
그리고 모듈 분할법이라는 있는데 나중에 설명함.
<<핵심어는 모듈뷰, 모듈, 모듈분할법임>>

3. 표현법은 ?

표현법은 크게 두가지이다.
1. 그래픽을 이용하는 방법
  uml을 이용하는 방법
  http://sparxsystems.com.au/resources/uml2_tutorial/uml2_classdiagram.html
  에 보면 클라스, 패키지, 서브시스템, 인터페이스 등의 모듈 표현이 보인다. 그리고 그 아래에 보면 is part of(composition) , depends-on(dependency) , is a (generalization) 관계등에 대해서 나온다.  
  비정형적인 방법은 모듈의 그림을 그려서 표현하는 방법등이 있다.  아래의 링크와 같이 말이다.        
   http://publib.boulder.ibm.com/infocenter/wbihelp/v6rxmx/index.jsp?topic=/com.ibm.wbia_adapters.doc/doc/mysap4/mysap4132.htm

2. 텍스트를 이용하는 방법
  모듈을 나열하고 책임을 나열한다. 바로 이전에 말한것중에 기능적인 책임과
  관계를 말한다고 써두었다. 바로 위에 참조
  텍스트로 표시하게 되면 is part of , depends on, is a 등이 있다.
  •   is part of - 복합모듈과 서브모듈간의 관계정의
  •   depend on - 종속성 표시 초기 설계중 표현하기 애매한경우 사용을 많이했음.
  •   is a -  일반모듈과 자식모듈을 말하며 uml로 보면 상속이 이에 해당
3. 이전에 설명한 그림에서 모듈뷰타입이 분할, 사용, 일반화, 레이어 스타일이 있다고 했는데 이것을 어떻게 보이는지 실제 함 보자. 나도 이것이 상당히 궁금했었는데...말로만 구구절절 설명하니깐 말야... uml 로 설명한다. 그러나 uml로 아키텍처를 표기하기엔 너무나 벅찬면이 많아 나는 상세화 하기전엔 uml 로 표기를 하지 않고 있다. 그러나 여기엔 uml로 표기하여야 할듯
  • 분할 스타일 - is part of 관계가 주로 이 형태임
composition 관계에 대한 그림









이것은 패키지나 서브 시스템안에 모듈을 클라스 단위로 나눈 모습임 (aggregation module) 집합모듈임





is - part - of 관계에 초점을 맞추어 보면 책임이 모듈에서 어떻게 분할되는가를 알게 되는데 원래의 모듈이 떨어져나가 어떠한 관계를 가지는지 알게 해준다. 경험에 의하면 UML이 아니더라도 분할스타일을 이용하여 아키텍처를 설명하고 구축을 위한 준비하였었다.
이러한 스타일은 뭔가를 변경하거나 할때 주로 사용하기도 하고...구조화 할때도 사용하기도 한다.

  • use style - depend on
이것의 uml은 이전에 보아왔던 depend on 즉 class diagram그리고 스트레오타입으로 <<use>> 라고 해놓은것 ... 그냥 단순한것만이 아니고 이것을 쓰려면 아래와 같은 특성을 이해하여야 한다.

모듈사이에 사용을 표시하려면 상대방의 모듈이 잘 정의되어있고 쓸수있어야 가능하지 않을까 싶다.  이미 이것을 표시 했다면 종속관계가 성립된것이다. 가끔 이것을 그려놓은 설계자에게 이것이 뭐냐고 물어보면 호출이라고 말하는 사람도 있는데...호출포함, 데이타사용, 그리고 그냥 호출.... 이것도 포함... 이정도로 사용하고 있다.
  •   is a - generalization
이것의 경우 interface 구현이나 상속등으로 알고 있으며 uml 노테이션에서 설명하기론 realization으로 설명되는데 프레임웍을 만들다 보면 generalization의 관계는 무언가를 추상화하거나 혹은 일반화를 통해 뭔가 가변성을 주거나 할수 있다. 이러한 것을 사용하게 되면 객체의 특성상 많은 잇점 (상속이나 인터페이스 구현) 등에 많은 잇점이 있다.

  • 마지막으로 한번도 언급안한 layered style - 바로 이전에 블로깅한 글에 그림에 트리구조로 적어뒀음.
Tier와 Layer의 차이를 먼저 알아야 하는데 Tier를 보통 아키텍트들이 말할때 Web Tier, Web Application Tier등으로 말한다. 이렇게 말하는걸 보면 과거의 c/s 의 아키텍처를 연상시킨다. 웹에서 뭐 이렇게 표현한다고 하면 하는거지만....
아래의 예는 상당히 해깔리게 적어뒀는데 난 맘에 안든다. 일부는 티어가 맞지만 일부는 레이어가 맞기 때문이다. 바로 아래의 문서는 많이 해깔리게 적혀진 문서이다.
http://www.javagen.com/architecture.jsp;jsessionid=180ED4984F2CA44345B4820922ED04D4















아래의 문서는 레이어는 없지만 Tier를 잘 작성하여 나타내고 있다.
http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/introduction/introduction3.html















내가 지금까지 구분을 지어온 바에 의하면 물리적으로 구분이 되는경우 Tier , 논리적으로 구분되어 지면 Layer이며 Tier는 위의 그림에서 보는바와 같이 C/S구조에 쓰이게 된다.
위의 그림을 그저 그런 나의 실력으로 본다면 2Tier를 3Tier로 바꾸면서 나온그림으로 생각된다.  위의 그림이 잘 맞는다고 말하는 이유는 화살표가 서로 주고 받기 때문이다 이 화살표에 커넥터라는 말이 없어서 조금 유감이지만..... Layer는 이게 불가능하다. 단방향이 불가능하기에 양방향 통신은 티어만 가능함.  



아래의 글은 제 생각일 뿐입니다.
  1. S/W 아키텍처 서비스를 시작하기 전에 가장먼저 check해야 할것은 기업의 정책이다. 아키텍처 서비스를 하면서 기업의 정책이 생길수 있으나 이미 정한것이 있는것을 반드시 확인해야 한다. 그렇지 않으면 혼란이 올 수 있기 때문이다. 생각하지도 못한것이 그 속에 숨어 있고 시간이 지나면 위험요소로 다가올 수 있는 듯 하다.
  2. S/W 아키텍트라고 하면 고객이 무엇을 하는지 알아야 한다. 그러려면 그사람과 많은 시간을 보내야 한다. 그러기 위해서는 가장좋은 방법은 그들을 관찰하는 것이다. 그러나 컨설팅에서 1주일 단위의 무언가는 많은 시간이므로 절충이 필요하겠다.
  3. 시스템은 기업의 비지니스를 위해 움직임으로 기술이 먼저가 되어서는 절대 안된다. 그러나 개발자와 설계자들에게 명확한 아키텍처를 제공할 의무가 있다.
  4. 회의록을 작성할때는 상세하게 적어야 하며 그사람이 기침했다는 것까지도 적고 무슨 생각을 하는지 알아내야 한다. 그정도로 자세하게 써야 한다.
  5. 시스템은 살아움직인다고 생각하고 그것들의 입장에서 그것을 쓰는 사람의 입장에서 생각해봐야 한다. 시스템이 아파한다면 왜 아픈지 끄집어 내야 한다. 사용자가 힘들어하면 왜 그런지 알아내어야 한다. 그 절충점을 찾아내는것이 S/W 아키텍트의 역활이라고 생각한다.
  6. 무언가 요건 혹은 요구사항을 찾을 때는 fact 뿐만 아니라 story를 알아야 한다. 스토리는 깊이가 있지만 공식문서가 아니라도 작게라도 이면을 이해하기 위해 적어두면 좋다. 내면 스토리는 회의록에도 많이 나타나게 된다. 회의록을 자세하게 적으면 스토리가 되기도 한다.
  7. S/W 아키텍트는 멘토링만 해서는 안된다. 현업과 한몸이 되어 파도의 한가운데 있음을 알아야 한다.  
  8. 만일을 대비해서 많이 신중해야 하며 아키텍트는 혼자 일할 수 없다. 혼자라는 의미는 모든것을 혼자 결정하는 것을 말하며 기업은 거버넌스 체계를 가져야 한다는 것이 무리가 아니다.
  9. S/W 아키텍처에서 인터페이스는 가장중요한 것이며 이것을 통해 이루어 지는 것이 가장먼저 보이며 이것으로 인해 시스템의 완성도가 결정된다. 인터페이스라고 해서 화면을 말하는 것은 아니다. 단적인 예를 들면 ajax 같은 것도 포함되기도 한다. 만일 웹이 나올때 이 기술이 지금보다 더 부각되었다면 지금 웹의 판도는 많이 달라져 있지 않을까 생각한다.
  10. S/W 아키텍처가 어려운 이유는 추상적이어서 이며 이 추상으로 인해 많은 사람들이 어려워 하지만 실체보다 추상은 항상 생명력이 길다. 즉 구현보다 오래 간다는 이야기 .....

진짜 자야 한다. 이러다 쓰러져...케케켁



도큐먼팅

Posted 2006. 8. 29. 01:49
아키텍처가 너무나 크고 힘든거 같다. 나에게는...
하지만 재미있다. 항상 나에게 도전을 준다. 아 도전...듣기만...

기업 아키텍처를 구축 하면서 가끔 document관련 책들을 읽는데 몇몇 문구가 눈에 확 보인다.
컨설팅은 눈높이다. 눈높이라는 말은 고객의 관점에서 보는 사람의 관점에서 문서가 적혀지고 설명되어야 한다는건데 규칙은 이러하다.
구구절절 옮은 이야기이고 컨설팅적인 기법이 아키텍처에도 그대로 쓰인다. 바바라민토 등

1. 읽는 사람의 관점에서 문서를 써야한다. -- 이게 컨설팅에서 한 30%먹는듯하다.
2. 불필요한 반복 줄이기... -- MECE
3. 모호성을 피하기 -- 당근빠따다. MECE
4. 표준 - 나는 이것에 원칙까지 첨부하고 싶다. 원칙없는 소프트웨어 아키텍처라니
5. 설계이유구성 - 이것도 당근이다. MECE에 해당하는 기법이다.
6. 문서를 최신으로 -.-  : 젤 지키기 어렵지만 꼭 해야 하는거다.
7. 목적에 적합한 문서리뷰 - 이것도 당근빠따 어떤이는 이걸 소프트웨어 평가라고 하지만 다리잡고 말리고 싶다. 아키텍처 평가가 그리 쉬운게 아니기 때문에...


결국 쓰고나면 또 컨설팅인가... 에헤라디야...

아래글은 소프트웨어 아키텍처 인 프락티스와 소프트웨어 다큐먼팅 관련책에서 나온글들임
아래의 것들중 2/3 이상 실제 아키텍처  구축에 사용했다.
모두 괘얀았음.
마침 딱좋은 자료가 있기에 이렇게 올린다.


http://www.hermesjms.com/confluence/display/HJMS/Home
위의 링크도 추가 됨. 쓸만함