본문 바로가기
UML

[펌] [안영회의 UML 강좌1] - 모델링과 모델링 언어

by 사우람 2010. 7. 12.
모델링(Modeling)이란?
2 .0 모델링의 특성과 다양한 계층의 언어들
##########0*
##########1*

##########2*UML에 관해 논하기에 앞서 모델링에 대하여 살펴보죠. 모델링은 현실 세계의 단면을 추상화 혹은 일반화하는 작업이라고 할 수 있습니다. 다음 그림은 자동차를 모델링 한 결과물인 모델입니다. 이것은 자동차의 모든 면을 표현 하지는 못하지만 어느 정도까지는 실제 자동차의 특성을 보여줍니다. 이러한 모델과 모델을 만들어내는 모델링은 많은 곳에서 사용되고 있습니다. 건설업의 예를 보면, 우선 건축에 앞서 조감도를 그리기도 하고, 설계도를 작성하기도 합니다. 이러한 그림들 역시 모델로 볼 수 있습니다. 조감도는 실제로 건물이 지어졌을 때 어떠한 모습을 드러낼지를 보여주게 되는 모델이 될 수 있고, 설계도는 실제 건물의 건축을 위한 구조, 재료와 치수 등에 고려해서 표현한 모델이 될 수 있습니다. 또 다른 예로 분양 여부를 결정하기 위해서 사람들이 찾아가는 모델하우스가 있습니다. 자신들이 살게 될 집이 어떠한 모습인지 이러한 모델을 보고 정보를 얻게 됩니다.

이렇듯 모델들은 하나의 현상이나 사물에 대해서도 다양한 모습을 보입니다. 또한, 앞의 예에서처럼 관점에 따라 다양한 용도로 사용될 수 있습니다. 하나의 아파트에 대해서 조감도, 설계도와 모델하우스가 각각 모델로 존재하는 것처럼 말입니다.

오늘날 하드웨어 성능의 급격한 발전과 이에 따른 가격 하락으로 소프트웨어는 갈수록 편리한 기능을 통해 인간에게 많은 편의를 제공해주고 있습니다. 그러나, 이러한 편리한 소프트웨어를 만들어야 하는 개발자는 갈수록 복잡한 프로그래밍을 요구 받습니다. 또한, 소프트웨어가 점차 대형화 되고, 통합화 되면서 소프트웨어의 개발이 프로젝트 형식을 띄게 됩니다. 이에 따라 위험성도 함께 높아지게 되죠. 이러한 위험에 맞서 적절히 소프트웨어를 개발하고자 하는 소프트웨어 공학이 발전하여 소프트웨어 개발 프로젝트도 건축 프로젝트와 같은 기존의 공학적인 프로젝트처럼 관리되어지게 됩니다.

예전처럼 소프트웨어를 바로 코딩을 한다던가 계획 없이 즉흥적으로 개발하는 일은 오늘날의 커다란 프로젝트에서는 상상할 수 없는 일입니다. 건축 프로젝트에서 도면을 그리고, 일정을 세우고 거기에 맞춰나가듯이 소프트웨어의 개발에서도 그러한 절차와 규칙을 따르게 되죠. 이러한 과정에서 모델링 혹은 그 결과물인 모델이 필요하게 되는 것입니다.

소프트웨어 개발을 시작할 때에는 대체로 다음과 같은 질문을 던질 수 있습니다.

  • 우리가 만들 소프트웨어는 어떠한 모습을 지니게 될 것인가?
  • 만들어질 소프트웨어는 어떻게 구성되어 있는가?
  • 완성된 소프트웨어가 어떻게 작동하게 될 것인가?
  • 어떠한 과정을 통해서 소프트웨어를 개발할 것인가?

      소프트웨어 개발을 계획하거나 시작하는 시점에서 이러한 것들을 고려해야 그나마 어느 정도 개발 과정에 일어나는 일들에 대해서 통제가 가능할 것입니다. 이러한 질문들에 대한 대답을 서술적으로 나열하는 것보다는 하나의 그림으로 보여주면 훨씬 이해하는데 용이합니다. 앞에서 본 자동차 모형을 그림을 보지 않고, 설명하려고 한다면 아마도 엄청나게 많은 양의 지루한 설명을 필요로 할 수 있습니다. 또한, 글은 읽는 이에게 많은 상상의 여지를 주기 때문에 받아들이는 사람마다 판이하게 다른 이해를 할 수도 있죠.

      소프트웨어 개발과정의 초기에 분석과 설계를 통해서 소프트웨어에 대한 모델을 만들어냅니다. 이는 건설업에서 설계도를 만들어내는 것과 비슷한 맥락에서 수행되는 것이죠. 이러한 모델은 개발자들에게 ‘어떠한 소프트웨어를 개발할 것인가?’하는 고민에 대한 하나의 지침을 제공합니다. 또한, 고객의 요청에 따라 만들어내는 소프트웨어의 경우에는 모델을 통해서 ‘이렇게 만들겠습니다. 마음에 드십니까? 보완할 점은 무엇이 있을까요?’와 같이 개발자와 고객과의 의사소통을 가능하게 합니다. 또한, 프로젝트의 관리자에 대해서는 소프트웨어 개발 과정에 대한 모형을 통해서 관리의 지침을 제공해줄 수 있게 되는 것이죠.

    •  

       

      1 .0 모델링(Modeling)이란?
      ##########3*0 모델링의 특성과 다양한 계층의 언어들
      ##########4*
      ##########5*

      ##########6*모델(Model)은 소프트웨어 개발에 훌륭한 안내자 역할을 할 수 있습니다. 그렇지만 모델은 그저 모델일 뿐입니다. 즉, 아무리 자세한 모델도 실제 소프트웨어를 정확하게 나타낼 수는 없죠. 모델은 근본적으로 실제 현상이나 사물을 단순화 시킨 것입니다. 실물과 정확히 똑같은 모델을 만들었다고 하면 그것은 이미 모델이 아니죠.

      또 한가지, 모델은 잘된 것인지 아닌지 판별하기가 상당히 힘듭니다. 모델에는 모델링 작업을 수행한 모델러(Modeler)의 가치관이 반영되기 때문에 객관적으로 이를 평가하기란 결코 쉬운 일이 아닙니다. 다수의 사람들에게 자동차의 모형을 요구하면, 그들은 각각 서로 다른 모형을 만들어낼 것입니다. 자동차의 외관에 관심이 많은 사람은 디자인과 색상 등을 정확하게 묘사하기 쉽고, 내부구조에 관심이 많은 사람은 내부 구성도를 그려낼 수도 있습니다. 그렇지만, 이들 중 어떤 것이 잘된 것이라고 평가하는 일은 쉬운 것이 아닙니다.

      모델링을 하는데 있어서 위의 두 가지 특성 즉, 태생적인 단편성이나 주관적 특성을 잘 이해하고 있어야 합니다. 복잡한 소프트웨어를 개발하는 프로젝트일수록 모델의 단순함을 극복하기 위해 다양한 묘사를 제공하는 다수의 모델이 필요할 수 있습니다. 또한, 해당 소프트웨어의 사용자가 다수이고, 개발자 역시 많다고 하면, 참여자의 필요에 맞는 특정 모델이 요구됩니다. 따라서, 많은 이해관계자가 결부된 프로젝트의 경우에는 다양한 관점을 반영한 모델이 제시되어야 하는 것입니다.

      우리가 이제 배우게 될 UML에는 다년간 연구의 축적으로 이러한 모델링에 대한 깊은 이해가 녹아 있다고 볼 수 있습니다.

      다양한 계층의 언어들

      JAVA, C++, Python, XML, IDL, HTML, WML, UML,… 정말 실로 수많은 언어들이 있습니다. UML에 대해 전혀 무지한 사람들 중에는 UML과 XML 등을 어떤 비슷한 것이겠거니 생각할 수도 있을 것입니다. 이에 따라서 UML에 대해 본격적으로 살펴보기에 앞서 UML이 어떠한 계층에 위치하는 언어이며 어떠한 용도로 쓰이는 것인지를 확실히 하기로 하죠.

      우리가 살아가는 세상에 수많은 언어가 존재하는 것처럼 프로그래밍 세계에도 수많은 언어가 존재합니다. 일반적으로 프로그래밍 언어라고 하면 BASIC, COBOL, C, C++, JAVA와 같은 것들을 떠올립니다. 이들 3세대 언어는 컴파일러를 이용하는 언어들인데, 이는 기계어나 어셈블리 등과 같은 1,2세대 언어와 SQL과 같은 4세대 언어와 함께 일반적인 프로그래밍 언어로 분류됩니다. 이들은 어떠한 처리를 수행하게 하는 언어들이죠.

      웹의 발전에 따라 표현을 위한 언어인 HTML(Hyper Text Markup Language)이 등장합니다. 이는 데이터의 처리보다는 주로 어떻게 화면에 보여질 것인가 하는 표현을 나타내는 언어입니다. 네트워크의 발전이 계속되면서 데이터의 구조화와 원활한 데이터 교환을 위한 언어인 XML(Extensible Markup Language)이 등장했으며, 서로 다른 프로그래밍언어로 작성된 객체간의 통신을 위해 IDL(Interface Definition Language) 같은 언어가 등장하기도 합니다.

      이들 언어들은 프로그램의 처리를 위한 언어와는 분명히 구분되는 것들 입니다. 계층 혹은 위치하는 레이어(Layer)가 다르다고 볼 수 있죠. 가령, HTML과 같은 경우에는 서버상에서 주로 구동 되는 프로그램과 달리 사용자의 컴퓨터로 다운로드 되어서 어떻게 브라우저에 데이터를 표현할 것인가를 처리하는 언어입니다. XML 역시 프로그래밍 언어와 달리 데이터를 구조적으로 담아내는 일을 처리하고, IDL은 이미 프로그래밍 언어로 만들어진 프로그램 간의 의사소통을 위한 언어로서의 역할을 지니는 것입니다.

      UML(Unified Modeling Language)은 이름처럼 모델링을 위한 언어입니다. 즉, 모델을 표현하기 위한 도구들과 기법의 집합이라 할 수 있는 언어죠. 그러나, UML과 프로그래밍 언어는 사용되는 계층이 다른 것이지 전혀 무관한 것은 아닙니다. UML이 설계를 위한 모델링 언어라면, 프로그래밍언어는 실제 구현을 위한 언어죠. 설계와 구현은 전혀 다른 작업은 아닙니다. 설계의 결과물인 모델에 따라 구현이 이루어는 것이죠. 만일 설계된 것이 어떠한 방법으로 구현되는지 명확히 제시된다면 UML로 표기된 모델을 프로그래밍언어로 변환할 수 있을 것입니다. 실제로 Rational Rose와 같은 CASE 도구는 이러한 일을 할 수 있는 소프트웨어 개발 도구입니다.