
모듈화(modularity)는 시스템의 복잡성을 관리하기 위해 시스템을 여러 개의 작은 시스템(self-contained systems)으로 나누는 것을 말하며, 이 작은 시스템을 모듈(module)이라고 부른다.
※ ‘self-contained’는 결합되는 단어에 따라 그 의미가 달라질 수 있다. 소프트웨어 공학에선 ‘기능이 자체 내장된’, ‘독립적인’ 등으로 사용되지만, 여기서는 모듈을 구조적인 측면에서 언급하고자 하므로 ‘작은’, ‘하위의’의 의미로 해석하기로 한다.
모듈을 효과적으로 이용하려면, 모듈의 독립성(independent)과 상호의존성(interdependent)에 대한 이해가 필요하다. 이를 소프트웨어 공학에선 응집도와 결합도로 정의하고 있다. 응집도(cohesion)는 개별 모듈이 고유한 기능을 처리하는데 있어 모듈 내의 구성요소들이 얼마나 서로 깊은 관계를 맺고 있는지를 나타내며, 결합도(coupling)는 모듈 간에 얼마나 상호의존하고 있는지를 나타낸다.
좋은 모듈러 시스템은 모듈 내부의 응집도는 높고 모듈 간의 결합도는 느슨하다. 이것은 시스템의 유지/보수를 용이하게 만든다. 우리가 사용하고 있는 PC를 보면 프로세서, 전원장치, 그래픽카드, 하드 드라이브 등 많은 모듈들이 하나의 시스템을 구성하고 있다. 만약 이 모듈들의 응집도가 낮고 결합도가 강하다면 고장수리 또는 업그레이드가 필요할 경우, 더 많은 모듈들을 교체해야 할 것이다.
응집도와 결합도는 주로 시스템의 구조적 디자인(Structured Design) 측면에서 언급되고 있지만 정보 설계 측면에서도 중요한 의미를 갖는다. 특히 최근에 들어 사용자 경험(User Experience)이 강조되면서, 디자이너는 웹을 어떻게 설계해야 사용자들이 주어진 시간 내에 보다 많은 상호작용을 할 수 있을까라는 고민을 하게 되었다.
이런 고민을 해결하기 위한 방법 중의 하나가 사용자가 불필요하게 돌아다니지 않고서도 원하는 바를 최대한 만끽할 수 있도록 사이트를 설계하는 것이다. 대개는 링크를 통한 자유로운 이동을 위해서 메인 네비게이션은 사이트 내에서 반복적으로 배치되는 것이 일반적이지만, 정보들이 상호배타적이라면 얘기는 달라질 수 있다.
포털 사이트를 보면 쉽게 알 수 있다. 예를 들어, 야후의 음악 카테고리로 이동하면 다른 메뉴로 이동할 수 있는 링크를 찾아볼 수 없다. 이것은 음악을 원했으니 음악에 대한 모든 것을 제공하겠다라는 의지로 풀이할 수 있다. 그 대신 음악과 관련 없는 정보들을 배제시킴으로써 사용자로 하여금 주어진 시간 내에 보다 풍부한 상호작용을 할 수 있도록 설계했다.

music.yahoo.com
이를 모듈러 디자인 관점에서 보면, ‘음악’ 카테고리를 정보 단위로써의 모듈로 볼 수 있고, 음악에 관련된 정보만으로 구성하여 응집도를 높혔고, 이동할 수 있는 링크를 제한함으로써 결합도를 약하게 설계했다.
결합도의 강도에 대한 이슈는 다양한 측면이 고려되어야 하는데, 무엇보다도 마케팅 차원의 전략이 우선이다. 경쟁 사이트가 많아지고 정보량은 폭발적으로 증가하고 있는 환경에선 사용자들을 집중할 수 있도록 설계하는 것이 바람직하다고 본다.
응집도를 높이려면 더 작은 단위의 모듈로 나뉘어져야 한다. 가령 야후에선 ‘음악’을 하나의 모듈로 볼 수 있지만, 음악은 여러 장르와 서비스로 구성될 수 있다. 이것은 ‘음악’이 모듈이 아닌 하나의 시스템이 될 수 있다는 것을 의미한다. 즉, 음악전문사이트는 ‘음악’ 자체만으로도 복잡한 시스템인 것이다.
이런 경우 모듈 단위를 더 세분화하면, 시스템의 복잡성을 줄어들고 어느 한 모듈을 수정하거나 제거하더라도 다른 모듈과 시스템에 미치는 영향을 최소화될 것이다. 그런데 모듈 방식은 비용적 측면에서 반드시 유리한 것만은 아니다. 대개는 더 많이 투입된다. 게다가 모듈이 많아질수록 설계와 관리 부담이 커지므로 모듈화에 대한 기준과 범위를 적정 수준으로 설정하는 것도 중요한 이슈이다.
'알고리즘' 카테고리의 다른 글
신재호의 SW 개발이야기]-아키텍처 중심의 개발(1) (0) | 2006.03.29 |
---|---|
모듈러 디자인(Modular Design)-2부 (0) | 2006.03.27 |
닷넷 설계시 자바와 다른 가이드 #1 2005-09-07 11:54 (0) | 2005.09.07 |
유니코드에 대해 알아보자 (0) | 2005.09.01 |
리팩토링 - 과거와 대결하는 프로그래머의 무기 (1) | 2005.08.26 |