얼마전엔가 다음과 같은 질문은 받을 일이 있다.

"설계 리뷰때는 클래스 다이어그램 보여주면 되나요?"

어떻게 대답했는지 잘 기억이 안나지만 대략 다음과 같을 것이다.

"메커니즘으로 표현해야 하니까 원칙적으로는 클래스도랑 시퀀스도가 필요하겠죠."
"근데... 그것보다는.. 어떤 식으로 사용하게 된다는 내용이 중요하거든요. 대략 아이디어 수준에서 정리하고 OOO과장님(고객)과 먼저 협의해보고 모델링 하시는게 안전하죠."

설계하면 UML을 떠올리는 사람들이 많다. 프로그래밍하면 프로그래밍 언어를 떠올릴 수 있으니까 어찌 보면 이상한 것이 아니라고 할 수도 있다. 하지만, 프로그래밍과 설계는 정확도와 추상화 수준에서 큰 차이를 보인다. 실행가능한 UML이나 검증 가능한 모델에 대해서 오래전부터 노력이 있었지만, 아직은 널리 쓰이는 상황은 아니다. 대부분 설계를 한다는 경우 그 양상을 보면 너무나도 다르다. 흔히 볼 수 있는 설계의 행태를 보면 다음과 같다:

  • 화면 설계서를 작성하고, ERD를 만든다. 거기에 더해서 CBD 프로젝트를 하라니까 클래스 다이어그램과 시퀀스 다이어그램을 적당히 그린다.
  • 전문 설계서를 작성하고, 인터페이스의 메소드 시그너처를 확정한다.
  • 배치 부분이나 시스템 연계 부분은 생략하고, 웹 애플리케이션쪽만 유스케이스 Realization으로 모델링을 한다.
  • 화면 기획서를 작성한다.

ERD의 경우는 이미 오래전부터 쓰여왔고, 개념모델부분은 널리 쓰이지 않지만, 논리모델과 물리 모델은 대중화 되어 있다. 반면, UML 모델은 클래스 다이어그램을 작성할 수 있는 사람은 많지만, 설계모델을 자유롭게 표현할 수 있는 사람은 매우 드물다.

국내 대표적인 SI 업체 표준 산출물 이름이 '액티비티 다이어그램', '클래스 다이어그램'인 경우를 보고 깜짝 놀랜 일이 있다. 물론, 내막을 들어보면 이해할만한 이유가 있었다. 그러나, 기본적으로는 맞지 않는 표현이다. 만일 JEE 웹 애플리케이션을 '자바 코드', 'JSP 파일', 'JS 파일', 'XML 파일', '기타 텍스트 파일' 등으로 분류해서 제출하는 것과 비슷하다. 액티비티 다이어그램은 업무 분석 과정에서 쓰일 수도 있고, 분석 모델에서 쓰이거나 설계 모델에서 쓰일 수도 있고, 더러는 프로그램 내부 로직을 표현하는데 쓰일 수도 있다. 또, 객체 내부 상태 표현에 적합한 상태도(statechart)마저 액티비티 다이어그램의 일종이다.

배경 설명만 깔아놨는데 다시 질문으로 돌아가보면:

"설계 리뷰때는 클래스 다이어그램 보여주면 되나요?"

리뷰때 무슨 다이어그램을 보여줄지 혹은 다이어그램 자체를 보여줄지 말지는 적절한 수단을 선택하는 문제다. 그 전에 무엇을 리뷰 혹은 검토할지 결정해야 한다. 설계를 굳이 둘로 나누자면 API 설계 메커니즘 설계로 나눌 수 있다. API 설계는 인터페이스 설계라고 할 수도 있고, CBD 어휘를 쓰자면 컴포넌트 외부 설계다. 밖으로 노출하는 즉, 제공하는 서비스가 무엇이냐 관점을 표현하는 것이다. 메커니즘 설계는 CBD라면 컴포넌트 내부 설계라고 할 수 있고, 대상의 객체 수나 입장에 따라서 패턴 적용의 문제가 되거나 알고리즘 설계와 동일한 작업일 수도 있다. 여하튼 클래스 내부적으로 효과적으로 작동하여 원하는 서비스를 적절하게 제공할 수 있는 것이 목적이다.

이전에 이글저글 등에서 누차 언급했지만, 모델링은 의사소통 도구이기에 API 설계와 메커니즘 설계시점에 의사소통이 활발하게 일어나게 사용하면 된다. 다시 말하면, 자신의 설계 방향과 결정사항을 잘 표현할 수 있고, 상대방이 쉽게 이해하고 의견을 제시할 수 있게 표현해야 한다.

이올린에 북마크하기(0) 이올린에 추천하기(0)


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

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

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

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


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

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

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

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

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

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

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


2004/12/05 (일) 엠파스에서...
이올린에 북마크하기(0) 이올린에 추천하기(0)