달력

072010  이전 다음


다이어그램 바탕색 지정
Tools > Options... (Ctrl+F9) 한 후에 Standard Colors 그룹에서 Paper 색상을 바꾼다.

상속받은 속성 표시하기
클래스 선택후 오른쪽 마우스 > Feature Visibility


대화창이 뜨면 Show Attributes 옵션을 선택한다.



소스코드에 링크 걸린 클래스 가져오기
타이틀이 어색하다. 로즈에서 relocate였던가. 하는 기능인데 context menu에서 Advanced > Convert Linked Element to Local Copy 명령으로 접근할 수 있다. 리버스 하여 얻은 클래스와 외부 소스 사이의 연계를 끊는 것이다. 아쉬운 점은 여러 클래스를 동시에 선택하고 실행할 수 없다는 점과, hot keys를 지정하려고 해도 메뉴가 나타나지 않는다는 점이다. @@



시퀀스 다이어그램 기능
EA에서 시퀀스 다이어그램을 작성하다가 놀라운 기능을 발견했다.
사용자 삽입 이미지

시퀀스를 작성하다 보면 중첩 호출을 표현할 때 섬세한 마우스질을 요구했다. 그런데, EA에는 activation level을 높였다 내렸다 할 수 있는 버튼이 만들어졌다. 호~

(4/22 22:00 추가)
UML 2.1의 Interaction Use 지원 > Interaction Occurence 요소
스펙에서는 InteractionUse는 상호작용(interaction)에 대한 참조를 의미한다.
EA에서는
Interaction Occurence로 표시한다. 사용법은 기존의 상호작용도(Interaction diagram)를 D&D 하면 된다.

d_InteractionOccurrence

Rose에서는 노트를 만들고, 그 위에 다이어그램을 떨어뜨려서 링크를 만들었는데. 다이어그램에서 중복을 제거하고 가독성을 높이는데 용이하다. 프로그램에서 공통 함수 빼내는 것과 같다.


노트 연결 제약 사항
사용자 삽입 이미지
노트 링크가 걸리는 UML 요소가 제약이 있어 불편하다. 시퀀스 작성할 때 메시지에 연결이 불가능해 노트와 메시지의 색을 맞춰주거나 하는 방법을 동원해야 한다.

UML2 Nesting connector

선 그릴 때 헷갈리기 쉬운 것이 방향성. UML2에서 포함관계를 표현하는 nesting connector는 포함하는 애가 뭔가(?) 쥐고 있다.

그림 출처: http://www.sparxsystems.com.au/resources/uml2_tutorial/uml2_packagediagram.html

프레임없는 이미지 복사

EA에서 그림 복사하거나 이미지 저장할 때 다이어그램 이름 앞에 cd와 같은 접두어가 붙어 보기 싫었는데... 옵션을 발견했다.

사용자 삽입 이미지


패키지와 다이어그램 위치 이동 Hack


EA에서는 Project Browser에 나타나는 순서를 변경할 수 있는 것이 매우 편리하다. 그런데 버그인지 패키지와 다이어그램 사이의 순서 이동이 안되는 경우가 있다.


그림과 같은 경우 모니터링 패키지 아래 구성요소라는 패키지를 다이어그램 아래로 보내고 싶다. EA 7.1(Build 729)을 기준으로 패키지를 아래로, 인접한 다이어그램을 위로 하는 것이 안된다. 이 때, 인접한 다이어그램이 아닌 그 아래 다이어그램을 위로 올리면 다이어그램 전체가 패키지 위로 이동하는 핵(?)을 찾았다. 그렇다면, 다이어그램이 하나면 어떻게 할까? 구성요소 패키지를 다른 곳으로 옮겼다가 가져오면 된다. :)

Posted by 영회
UML전문가가 설계전문가?

Ray님이 기분 상할지 모르지만, 나도 종종 내뱉는 넋두리를 풀어낸 글이다. 여기 120% 공감하는 말이 있다.

사실 넘치는 기법들이 개발자들을 더 혼란스럽게 하는 것에 종종 화가 날 때가 있습니다.
기법은 기법일 뿐입니다. 내용은 아니죠.

거기에 더해서 혼란을 가중시키는 다양한 도구까지 있다. 수차례 내뱉은 말을 다른 사람 글로 본다.

잘 된 설계는 형식에 구애 받지 않고, 소프트웨어를 구현하기 충분하게 소프트웨어 구조를 잘 설명한 것

종종 사람들은 UML이나 모델링 도구 혹은 사용 기법이 설계의 어려움을 대신해주길 바란다. 고민을 덜 하고 간단한 조작을 통해 마법이 일어나길 바란다. 혹은 다른 사람이 대신해주길 바란다. 심지어는 미루어 버리기도 한다. 도구의 역할은 같은 노력을 투입했을 때, 효과를 높여줄 뿐이다.

Ray님 글에 120% 공감하고, 내 넋두리를 대신해준 듯 속이 시원하다. 그렇지만, 짓궂게도 토를 달고 싶어진다.

UML을 아는 것은 좋습니다. 남들이 UML로 작성해 놓은 것을 읽을 수는 있어야 하니까요.

UML 대신 다른 말을 대입해보자.

영어를 아는 것은 좋습니다. 남들이 영어로 작성해 놓은 것을 읽을 수는 있어야 하니까요.

UML이 고작 모델링을 위해 선택할 수 있는 하나의 언어일 뿐일까? 물론, 그렇게 평가할 수 있다.

하지만, UML을 활용할 수 있는 도구가 많이 나와 있다. 설계를 모두 담아내긴 부족하긴 해도 다양한 표기법과 편리하게 의미를 담을 수 있게 해준다. 부족하긴 하지만 UML은 좋은 도구다.

끝내기 전에 하나만 부탁하자. 이미 구입한 분이 아니라면, 제발 비싼 모델링 툴은 택하지 말자. 무료 툴이 불편하다면, 20만원 정도인 EA면 충분하다.
Posted by 영회
TAG EA, UML
일민 형이 메신저를 통해 UML 관련 내용을 물어왔다. 스프링 책을 쓰는 가운데 Dependency Injection(이하 DI)을 시각화하여 설명하기 위해 UML을 사용하는 과정에서 개념을 확인하고 있는 듯 했다. '책 쓰는 과정이 참 힘들구나'하는 생각이 잠깐 스쳤다. 일민 형이 확인하고자 하는 내용은 위키피디아 페이지에서 본 다음 사항이었다. 순간, 위키피디아에 이런 문장이 있음에 잠시 놀랐다.

A UML link is run-time relationship between instances of classifiers, while a dependency is a model-time relationship between definitions.

다른 관계된 일도 있어서 오랜만에 UML Specification을 찾았다. 위 내용에 해당하는 부분은 이렇게 쓰였다.

The presence of dependency relationships in a model does not have any runtime semantics implications, it is all given in terms of the model-elements that participate in the relationship, not in terms of their instances.

위키피디아의 설명이 내용도 쉽고, 링크(link)와 비교해서 설명해서 개념을 익히기에 좋다. 링크와 dependency 차이를 이해할 수 있는 내용을 UML Specification에서 찾아보니 Association과 link 사이의 관계에서 비슷하게 설명한 내용을 찾을 수 있다.

An association describes a set of tuples whose values refer to typed instances. An instance of an association is called a link.

이는 객체와 클래스 차이와 유사하며, 마찬가지로 실행시점과 정의시점의 차이와 유사하다.

뒤척이다가 DI와 관계된 UML 표기법을 찾았다.
사용자 삽입 이미지
The substitution relationship denotes runtime substitutability that is not based on specialization. Substitution, unlike specialization, does not imply inheritance of structure, but only compliance of publicly available contracts. A substitution
like relationship is instrumental to specify runtime substitutability for domains that do not support specialization such as certain component technologies. It requires that (1) interfaces implemented by the contract classifier are also implemented by the substituting classifier, or else the substituting classifier implements a more specialized interface type. And, (2) the any port owned by the contract classifier has a matching port (see ports) owned by the substituting classifier.

UML Superstructure Specification, v2.2 134쪽

Posted by 영회
우발적인 장타였는데 이야기가 길어진다. 앞에 작성한 글이 주장하는 바가 불명확해 덧붙이는 글을 쓴다.

모델에서 코드를 생성하는 접근 자체에 대해 찬성과 반대 중에 한 가지 답만 하라면, 대답은 상황에 따라 다르다. 먼저 소프트웨어 공학의 미래를 위해선 이런 시도가 필요하다고 본다. 학교나 연구소에서 해야 할 실험을 프로젝트에서 시도하지만 않으면 말이다. 다음으로 모델링이나 설계를 공부하려는 개발자라면 강력 추천이다. 모델과 코드 사이에서의 추상화 수준의 차이를 이해하고, 모델링 도구와 IDE의 차이, 모델링 도구의 한계와 효용성 등을 알아야만 적절히 활용할 수 있다. 도구는 잘 알아야 잘 쓸 수 있는 법이다. 하지만 역시 공부는 개인적으로 해야지 프로젝트에서 제품을 만들면서 하는 방법은 옳지 않다. 프로젝트에서 코드 생성을 찬성할 경우는 언제일까?

아직은 행위 중심의 객체 설계가 힘든 현실을 인정한다면, ERD와 대응할 수 있는 수준의 도메인 객체의 관계를 뽑을 수 있는 프로젝트라면 모델과 코드의 연계를 권하고 싶다. 둘 중 한 쪽만 변경하고, 동기화를 하는 방법은 운영 단계에서 특히 효과를 발휘한다. 반면 운영 단계에선 모델을 쓸 생각이 없어 별도의 설계 문서를 요구한다면, 모델은 곧 현실과 마치 화석처럼 현실과 멀어질 수 있다.

Anemic model과 같이 객체가 데이터 운반이나 구조체 정도로 쓰이는 형국을 비난하는 말이 있긴 하지만, 대규모 프로젝트에서는 ERD와 대응할 수 있는 수준의 객체 모델을 만들어내는 경우는 극히 드물다. Level 1은 넘어야 다음 단계로 갈 수 있는 법이다.

컴포넌트를 채용해서 개발했고 즉, CBD이고 동시에 운영 단계에서 컴포넌트가 실제로 의미를 지니는 경우라면 컴포넌트 인터페이스는 모델과 코드 동기화를 확보하면 유용하다. 컴포넌트 인터페이스 변경은 상당한 공수를 요하기 때문에 유지보수를 맡은 개발자도 사람답게 살기 위한 절차를 마련해둘 수 있다. 필요한 시간을 보고하고, 모델을 수정해 작업 흔적을 남긴 후에 코드에 반영한다. 이 때, 자동생성하는 부분과 개발자가 작성하는 코드는 물리적으로 분리하기를 권장한다. 최근의 모델링 도구는 개발자가 작성한 코드에 덮어쓰기를 하는 일은 드물지만, 자칫 실수하면 여전히 기존 코드를 날릴 수 있기 때문이다. 또한, 모델 수준에서 의미가 있는 정보는 프로그래밍 코드 수준이 아니다. 그래서 코드에서도 추상화 정도가 높은 인터페이스 영역과 구현체를 분할하는 방법은 권장할만한 방법이기도 하다.

그러나 위와 같은 수준에 도달한 조직은 많지 않다. 아쉽게도 다음과 같은 현상을 자주 접할 수 있다.

  • 프로젝트 주관사 혹은 고객사 QA 담당자가 한 가지 방법 허용한다면 표준화 하라고 한다. 내용면에서보면 강제하는 형식이 맞지 않는데도 말이다. 이런 경우는 획일화란 용어를 권장해주고 싶다.  
  • 프로젝트 초기에 배운 방법이나 가이드나 나온 형식대로 방대한 UML 모델을 작성한다. 유스케이스 모델을 작성하다 보면 너무 간단한 내용을 어렵게 그리는 듯한 느낌을 받는다. 그리고 업무 별로 수 백개의 다이어그램이 거의 유사하다. 업무명이나 데이터를 담는 클래스 이름만 다르고 나머지는 거의 동일해서 모델링이 단순 작업으로 전락한다.
  • 객체가 너무 많아 ERD를 역공학으로 읽어와서 객체 모델로 변경한다. 객체가 너무 잘게 쪼개져서 있어 걸핏하면 Join을 해야 하는 형국이다. 속성 이름이 대부분 약어라 도저히 알 수가 없다. 유지보수를 위해서는 엑셀로 테이블과 속성 이름을 설명하는 문서를 작성해야한다. (그렇다면 모델은 용도는 무얼까?)
  • 중요한 업무 규칙은 UML 모델에 담기 어려워서 설계를 이중으로 하는 느낌이다. 그러는 가운데 개발 단계가 다가왔다. 일단 코드를 만들어야 하는데, QA 담당자가 설계를 완성하고 코드 생성을 통해서 만든 코드로만 구현을 하라고 한다.
  • 공동작업하던 모델이 마구 꼬인다. CVS/SVN/ClearCase 등을 연계해서 써보니 충돌을 해결하는 작업이 너무 힘들다. 그냥 동시에 작업을 하지 못하게 하고 공통으로 쓰는 객체는 공통 담당자를 두어 통합하게 한다. 막판에 일이 몰리면, 통합 담당자가 죽어 나거나, 암묵적 합의에 의해 대강 알아서 해결한다. (동일한 쓰임을 갖는 객체가 다른 이름으로 여러 개 존재한다.)
더 길어지면 자칫 비관적인 글로 오인할 듯 해 그만둔다. 이야기가 너무 길어질 해서 이제 마무리를 해야겠다. 느닷 없긴 하지만 MDA를 소개하고자 한다. 쉽게 말해 MDA는 모델과 코드를 좀 더 유기적으로 연계하여 개발 공정을 개선하려는 시도이다.

앞서 언급했던 2003년 프로젝트에 참여할 당시 모델링 도구에 대한 환상을 가지고 있던 나에게 가장 획기적으로 보였던 도구는 MDA 툴이었다. 당시는 OMG가 MDA 판촉에 열을 올리던 때였고, 아크스타일러, 카비라가 시장 선도 업체였다. 당시 시장 선도 UML 모델링 도구였던 Rose나 2인자 Together는 선언부 정도의 코드는 모델과 코드 사이의 양방향 변환, 일명 RTE(Round-Trip-Engineering)를 지원했다. 그 수준도 조악하다 느낄 정도였는데, 여하튼 내부 구현 코드 생성은 이상에 지나지 않았다. 그러던 차에 만난 카비라 시연은 놀라웠다. UML 모델에 몇 가지 규칙을 일종의 스크립트로 입력한 후에 적용한 플랫폼 유형을 선택하고, 변환을 시도하면 해당 플랫폼에서 구동 가능한 모델(Platform Specific Model)이 나오는데 이는 바로 실행이 가능했다. 놀라움은 얼마 가지 않아 궁금함으로 바뀌었다. 가변적인 업무 규칙을 어떻게 스크립트 언어만으로 표현할 수 있고, 접속자가 많아지면 과연 그에 맞게 규모 가변성(Scalability)를 제공할까?

쉽게 답을 찾을 수 있었다. 해당 툴을 도입해서 팔려던 시도는 결국 국내에서 한 곳도 레퍼런스를 찾지 못하고 실패로 돌아갔다. 지금 보니 해당 업체도 방향을 약간 전환한 듯 하다. MDA를 위해 등장한 UML2.x는 많이 발전한 듯 보이지만, MDA는 여전히 무척 느린 행보로 진행하고 있고 얼마후 등장한 MDD는 MDA로 가기 위한 과도기 성격처럼 보인다. UML을 전문적으로 연구하는 어떤 분의 말에 따르면 유럽의 자동차 업계에서 MDA는 실적이 있다고 한다.

하지만 정보시스템/엔터프라이즈 영역에서 가변적인 요소를 체계적으로 정리해서 정형화를 단기간에 하겠다고 한다면 이는 풋내기로 볼 수 밖에 없다. 마틴 파울러가 illogic이라고 표현한 기업/조직의 역사가 만들어낸 일반화 하기 힘든 비즈니스 규칙을 수식으로 풀어내기엔 소프트웨어 공학은 아직 많이 어리다. 솔직히 내 생전에 얼마나 비슷하게라도 가능할지 의문이긴 하지만, MDA는 어찌 보면 많은 소프트웨어 공학 관계자에겐 꿈이자 실현 가능하게 보이는 지향점이다.


Posted by 영회
프로젝트에서 예제로 쓰려고 만든건데 공개해도 될 사항이라 올립니다.^^
급하게 그려서 오류가 많았는데 수정한 것 다시 올립니다.

먼저 유스케이스를 작업 단위로 하는 경우(혹은 Usecase Driven Development라거나)라면... 이렇게..

사용자 삽입 이미지

사용하는 클래스와 이들의 관계, 역할을 묘사한 그림. 역할 명은 변수 명과 일치시킬 수도 있지만, 꼭 그래야 할 필요는 없다. 모델링은 의사소통을 위한 점이란 사실을 잊지말라.
사용자 삽입 이미지

그리고 필요한 시나리오. EA를 쓰는 경우 별칭(Alias) 기능이 있기 때문에 잘 사용하면 하나의 그림을 다른 용도로 쓸 수 있다. 일타이피인데, 먼저 아래와 같이 표시하면 메소드 호출 관계를 보기에 좋다. 고로 구현에 도움이 될테고...
사용자 삽입 이미지
한글로 별칭을 주고 다이어그램 옵션을 조정하면 아래와 같이 볼 수 있다. 개발자가 아닌 사람 혹은 자바나 스프링 기술을 잘 모르는 이와 화면 흐름, 객체 관계를 이야기 하기에 도움이 된다.

사용자 삽입 이미지
클래스 다이어그램도 마찬가지
사용자 삽입 이미지

Posted by 영회
UML: Not dead yet, 13 reasons for UML’s descent into darkness 라는 글을 읽고...

100% 공감하는 글이다.  UML의 표현력에는 한계가 있다.

  • No solution for multi-tasking and communication between tasks
  • No dependency between use cases[각주:1]

    따라서, "Unified Software Design Language"로 쓰이는데는 실패했다. 그럼에도 불구하고 충분히 쓸모가 있다. 종종 잘 그려진 클래스 다이어그램과 시퀀스 다이어그램이 없다면, 무엇으로 이들 정보를 전달할 수 있겠는가?

    몇 년 동안 UML이 CBD 방법론이라는 이름으로 정형화된 모델링 가이드와 무거운 툴과 엮어서 쓰여오고 있다. 이러한 프로젝트에 들어가 보면 이상한 현상을 발견할 수 있다. 3일이면 배울 수 있는 UML 다이어그램 작성법 정도만 배우고, 최대한 쉽게 만든 가이드로 똑같은 그림을 수십명이 그리는 모습이다. 종종 코드를 작성하기 전에 무작정 그림부터 그려야 한다고 강제한다. 인간의 사고력을 감안하면, 똑같은 패턴으로 이어지는 그림은 한 두장이면 족하다.

    도구는 용도에 맞게 쓰일 때 효과를 발휘한다. 방법론과 프로세스는 무척 중요하다. 하지만, '방법론 = CBD'라고 여기는 많은 개발자와 프로젝트 관계자들이 방법론에 신물이 나 있는 모습을 흔히 볼 수 있다. 원인은 여러가지가 있겠지만, 한 가지 분명한 것은 프로젝트에서 무슨 고민을 하고 있는지 알지 못하는 사람이 방법론/프로세스를 고민한다면... 그것은 탁상공론과 다를 바가 없다.

    자신이 만약 코딩한줄 짤 수 없으면서 방법론이나 모델링을 운운하는 사람이라면 최소한 개발자들과 친해지라. 그래서, 그들이 어떤 고민을 하는지 배우라. 그래서, 개발자가 사고를 조직화 할 수 있게 돕거나, 개발팀 사이에서 소통해야 할 정보가 단절되지 않게 도우라. 그렇게만 할 수 있다면 당신은 꼭 필요한 사람이 될 것이다. 그 과정에서 UML을 쓰느냐 마느냐는 별로 중요하지 않다. 방법론이 어디에 바탕을 두고 있는지도 일시적인 문제다.[각주:2]

    1. 유스케이스 사이의 의존성 표현이 어렵기 때문에 include/extend를 오용하는 사례를 실제 프로젝트에서 쉽게 찾을 수 있다. [본문으로]
    2. 시간이 흐르면 사회는 발전하고, 조금 나은 방법론이 새로운 이름으로 등장하기 마련이니까. [본문으로]
    Posted by 영회
    TAG CBD, UML
    모델링 도구와 공동작업에서 모델링 작업의 버전관리의 어려움을 정리한 바 있다. IBM RSA(Rational Software Architect) 관련 트러블슈팅 일지를 보면 더욱 생생한 기록이 있다. 이번 프로젝트에서는 고객사에서 Sparxsystems의 EA를 선택했다. 가격대 성능비로 본다면, 경쟁자를 논할 수 없기에 합리적인 선택이다. RSA는 CVS의 optimistic lock에 기반하여 공동작업과 버전관리를 지원하고 있다. 파일에 lock을 거는 방식과 달리 동시에 모델을 수정할 수 있다. 그러나, 충돌을 한번이라도 겪어본 사람이라면 대답은 하나다. 툴의 기능적으로는 fancy하지만, 실무에서 쓸 수 없는 수준이라고 말할 수 있을 정도다. 그래서 Rose에서 CAT으로 나눠서 VSS 등을 이용하여 파일 시스템 수준에서 버전 관리를 하는 것이 유용하게 느껴졌다.

    EA에서는 버전관리를 써본 일이 없다. 이번에 모델링 표준과 교육을 준비하면서 시도했다. 반 나절 시도를 통해 사용법, 활용 방안과 제약사항을 정리할 수 있었다. 문서화가 잘 되어 있어 빠른 학습이 가능했다. EA는 기본적으로 CVS, SVN(Subversion), TSS(Team Foundation Server), SCC(이건 뭐냐?) 등을 지원한다. 불편한 점은 SVN 클라이언트가 로컬에 설치되어 있어야 한다는 점이다. 이미 똘똘이(TortoiseSVN)를 쓰고 있는 상황인지라, 추가로 명령행에서 쓰는 SVN 클라이언트 설치하는 작업이 약간 번거롭기는 했다.

    사용자 삽입 이미지

    무엇보다 파일lock을 걸기 때문에 모델만 적절히 분할해놓으면 매우 실용적으로 공통작업을 수행할 수 있다. optimistic lock은 소스코드 공동작업에는 좋지만, 편집하는 화면과 저장하는 내용이 다른 유형의 산출물 즉, 오피스 류의 문서나 모델 공동작업에는 불편하다. EA와 SVN을 이용하여 훌륭한 모델링 공동 작업 환경을 구성할 수 있었다. 한가지 단점은 모델 파일을 xml 형태로 나눠서 저장할 때, 하위 디렉토리에 넣을 수가 없다는 점이다. 버그인지, 사용을 잘못하고 있는 것인지, 툴의 제약인지는 확실하지 않다. 하지만, 다른 모델링 도구와 비교해보면 애교로 봐줄 수 있는 내용이다.

    결론: 고가의 상용 모델링 도구에 보다 더 나은 버전 관리 기능을 제공한다.

    에다가 물리적인 이름으로 정렬하지 않아서 굳이 패키지에 순번을 부여할 필요도 없다. (4/3 추가)

    사용자 삽입 이미지

    그래서 자유롭게 패키지 이름을 부여하고, 정렬도 마음대로 할 수 있다.

    Posted by 영회
    TAG EA, svn, UML
    유스케이스에 대한 고객 검토를 하면서 예상대로 대혼란이 일어났다. 개발자(분석가)들에게 유스케이스 개념을 설명하는 것도 쉬운 일이 아니다. 하물며 현업 고객에게 타원 몇 개 덩그러니 그려놓고 업무 범위를 모두 포괄하는 것으로 보이냐고 물으면...

    고객은 오히려 비즈니스 프로세스를 그린 그림은 쉽게 생각했다. 메뉴 구조도를 보여줘도 쉽게 애플리케이션 기능 구조를 파악한다. 메뉴 레벨 2단계를 유스케이스로 잡으라는 어처구니 없는 가이드를 비웃은 적이 있다. 유스케이스는 메뉴로 분할할 수 있는 것이 아니다. 기초도 모르는 사람이 전문가랍시고 가이드 한 것일 수도 있지만, 한편으로는 현장 상황을 반영한 어쩔 수 없는 자구책인지도 모른다.

    사용자 삽입 이미지

    위 그림은 유스케이스 이해가 어려운 이유를 단적으로 보여준다. 현행 업무가 시스템 도입으로 인해 변모하는 모습(TO-BE)를 담고 있어 애초부터 고객들에게 시스템에 대한 이해에 기반한 상상력을 요구한다. 다시 말해서, 지금은 이렇게 일하고 있는데 앞으로는 다르게 일할 것이라고... 프로토타입 화면도 보지 않고 과연 고객이 이를 알 수 있을까?

    필자 스스로도 현재 사이트에서 족보에도 없는 산출물을 만들고 있다. 적어도 국내 SI 현장에선 아직도 개발 과정의 산출물을 넘어서지 못하는 모델이 대부분이다.(그나마도 못하는 경우가 더 많은 것으로 짐작한다.) 고객에게 물었다. 유지보수할 때 모델을 보세요? 고객이 유스케이스 명세를 보나요? 물론 '안본다'가 대답이다. 볼 수 있는 산출물을 만들면서 표준 방법론이라는 틀을 어기지 않으려다보니 족보에 없는 변종을 만들어냈다.

    그렇다면 유스케이스가 개발자에게는 유용한가? 비슷한 고민을 하면서 내놓은 해결책을 책으로 발행한 것이 있었다. 거짓말처럼 내가 글을 쓰고 난 후, 10분도 안되서 지인이 알려준 책 서두에 나온 그림을 캡쳐해놓는다.

    사용자 삽입 이미지

    출처: Use Case Driven Object Modeling with UML: Theory and Practice by Doug Rosenberg and Matt Stephens


    Posted by 영회
    월간마소 5월호에 기고했던 글, 다시 꺼낸 양날의 검 UML 2부 - UML의 전략적 활용에 독자 문의가 있어서 답변을 블로그에 올립니다.

    안녕하세요. DBGuideNet 사이트 애독자인데요, 최근 읽은 자료중 "다시꺼낸 양날의 검 UML 2부" 내용중에 아래와 같은 문장을 접하게 되었습니다.

    "기업용 정보 시스템에서라면 역공학으로 만들어낸 모델은 아주 특수한 경우를 제외하고는 전혀 쓸모가 없다"

    기업용 정보 시스템을 제작하기 위해서 ISP를 하고, 그런중에 정보시스템이 개발이 되어 기업의 경영활동을 지속할 소중한 정보시스템으로서 역할을 다 할 텐데요.

    기업용 정보시스템이 특수한 경우를 제외하고는 역공학으로 생성된 모델이 모두 쓸모가 없다는 내용은 어떠한 관점에서 바라보신건지 이해가 필요할 것같아 이렇게 실례를 무릅쓰고 메일을 드립니다. ^^;

    절대 딴지가 아니니 무례하다 생각지 마시고, 답변을 부탁 드릴께요. 소중한 답변을 기다리고 있겠습니다.

    예전에도 역공학 무용론을 피력하다가 제 블로그에서 논란을 일으킨 바가 있죠. 그 내용은 아래 글에 담겨 있습니다:
    역공학에 대한 이해 한발만 더 나아가기

    오해를 막기 위해 좀 정확하게 정리해보면
    - 제가 말하는 역공학(Reverse Engineering)을 이란 UML을 사용한 경우게 국한됩니다. ISP는 어떤 상황을 전제로 하셨는지 모르지만... 현행 업무 분석을 위해 물리적 ERD를 역공학으로 도출하는 것과는 관련 없는 이야기죠.

    - 또한, 개발 환경도 자바 혹은 J2EE에 국한된 것입니다. 제가 UML을 활용해본 경험은 모두 자바이거나 닷넷(C#)을 활용하는 경우였습니다.

    - 제가 굳이 '아주 특수한 경우를 제외하고는 전혀 쓸모가 없다'라고 강조해서 표현한 이유는 이렇습니다.
    1) 시스템개발에 경험이 많은 분들중에 UML 모델링 도구와 J2EE를 잘 모르시는 분들 혹은
    2) 모델링 도구 판매를 목적을 가진 분들이
    종종 마치 물리적인 ERD를 뽑아내는 것처럼 자바 코드에서 모델을 뽑아낼 수 있는 것처럼 이야기 합니다. 기본적으로는 맞습니다. 자바 코드에서 모델을 뽑을 수 있죠. 거의 대부분의 도구들이 클래스와 클래스 다이어그램 정도는 만들어줍니다. 특정 도구는 시퀀스도 그려주죠.

    그러나, 프로그래밍 공부할때 짜보는 수준의 토이 프로그램이 아니라면 그려준 그림이 큰 의미를 갖지 않습니다. 솔루션의 코어 로직을 순수 자바 만으로 짰다면 얘기는 달라지지만

    1) (소스가 없는) 각종 상용 솔루션을 쓰고
    2) EJB나 서블릿과 같이 컨텐이너에 의존하여 수행되어 의존성 추출이 어렵고
    3) JNDI 등에 의해 문자열로 의존관계가 드러나며
    4) JSP의 의존 관계 역시 추출이 어려운

    보편적인 SI환경에서는 역공학은 노력에 비해 건질 것이 별로 없다는 사실을 강조했을 뿐입니다. 역공학을 유용하게 쓸 수 있는 노하우을 말해주는 것이 아니라 '모델은 역공학으로 하면 된다'라고 무책임하게 말해버리는 분들을 자주 봐서... :)

    저 역시 라이브러리를 분석할 때 역공학을 자주 사용합니다. 물리적 ERD를 추출하듯이 핵심적인 클래스의 관계가 드러나는 클래스다이어그램을 역공학으로 뽑아내면 매우 유용하죠. 특수한 목적을 가지고 잘 쓰면 유용합니다. 그러나, 일반화시켜서 제 견해를 말하자면 여전히 역공학의 경제성은 매우 낮다는 생각입니다.
    Posted by 영회

    고객이나 시장의 요구와 비즈니스 전략과
    개발되어져 나오는 솔루션 사이의 간격이 너무 크다.
    EA 와 같은 것들이 나오는 이유도 전략과의 연계를 강조하는 면이 강하다.

    그럼에도 불구하고 선진국의 경우 왜 주요 프로젝트의 72%는 실패하는가?
    (선진국의 경우다.. 우리나라는 성공/실패의 기준조차 없다.
    분명한 것은 72% 보다는 훨씬 높을 것이라는 점이다.  ㅡㅡ;)

    3대 주요 요인이 위와 같다고 한다.
    1. 기업의 전략과 비전이 솔루션의 요구사항으로 제대로 바뀌지 못한다.
    2. 시장에 등장하는 제품의 선택이 어렵고, 부풀려진 광고가 많으며, 기술이 계속 변화한다.
    3. 기업 환경의 복잡도가 지속적으로 증가한다.

    해결책은 무엇인가? 매직은 없다. silver bullet도 없고..
    다만, 모델링은 하나의 방편이 될 수 있다.


    빙산의 일각... 우리가 얼핏 이렇게 하면 되겠지.. 하는 문제는
    생각보다 훨씬 복잡하고 클 수 있다는 것이다.
    그리고, 요즘은 경험해보지 않은 상황으로의 변모가 많아
    경험이 많은 사람이라도 특정 상황에 대해서는 초보자가 되는 경우가 많다.

    문제가 잘 기술되면 반쯤을 해결된 것이라는 말
    분명하게 해야될 것을 이해한다면
    한결 일처리가 수월해진다.

    문제는 항상 무엇을 해야할지 정확하게 모르고 있는 경우
    최소한 얼마나 큰 일인지는 알아야 할텐데...

    적어도 모델링을 하게 되면
    일의 범위를 알 수 있고
    인과 관계를 이해하게 되고
    어떤 문제 뒤에 숨어있는 가정을 볼 수 있으면
    이를 통해 유기적인 특성을 이해할 수 있다.

    결국.. 문제가 모두의 눈에 (가능하면 한 가지 모습으로) 보이게 한다는 것
    이 점이 가장 중요하다.

    대개의 경우 모델 산출물이 만들어놓은 결과에 매달리지만
    모델링은 의사소통의 도구라는 점을 상기해보면
    실제로는 그 과정에서 얼마나 논의를 끌어내느냐 하는 것이 관건이다.

    그림 출처: OOPSLA 2003 발표자료 "Bridging the Gap"


    2004/12/05 (일) 엠파스에서...
    Posted by 영회