쓸모 있는 모듈러 디자인
모듈화와 조합은 모듈러 디자인의 두 가지 핵심 원리입니다.
그중에서도 모듈화는 모듈러 디자인을 통해서 시스템을 만들 수 있도록 틀을 잡는 작업을 담당합니다.
이번 글을 통해서 모듈화에 대한 이해가 깊어지길 바랍니다.
모듈화라는 말 대신 분할이라는 용어를 쓰기도 합니다. 시스템을 모듈화한다는 건 결국 시스템을 모듈 단위로 분할한다는 것을 의미하기 때문에 두 용어를 혼용해서 쓰기도 합니다. 그렇지만, 엄밀히 따지면 모듈화가 분할보다 좀 더 의미 영역이 넓습니다. 즉, 분할은 모듈화의 한 형태로 보는 것이 정확하죠. 그렇지만, 가장 많이 사용하는 의미에서는 모듈화는 시스템을 모듈 단위로 나누는 분할이라고 할 수 있습니다.
시스템을 통째로 모듈로 나누는 분할 만을 모듈화라고 하지 않습니다. 시스템의 특정 영역이 필요에 따라서, 또는 변화 속성이 다름에 따라서 분리되는 것도 모듈화라고 부릅니다. 가장 일반적인 사례가 프린터의 카트리지나 토너입니다. 카트리지나 토너는 프린터 전체 시스템과 "소비"라는 다른 변화 속성을 갖습니다. 프린터를 사용하다 보면 카트리지, 토너 안의 잉크를 소비하게 되고, 새것으로 교체해야 하는 필요가 생기죠.
그런데, 카트리지, 토너가 프린터의 다른 부품과 밀접하게 연결이 되어 있다면, 또는 특정 모델에 의존적으로 토너나 카트리지가 설계되어 있다면 교체도 어렵고, 다양한 모델에 동일한 모델의 카트리지, 토너를 사용할 수도 없겠죠. 이렇게 시스템의 특정 영역을 나누는 것 또한 모듈화라고 부릅니다.
한번 설계된 시스템의 기능을 추가하거나 보완하고자 할 때 매번 새로운 시스템을 만들어야 한다면 그것만큼 낭비도 없겠죠. 이런 경우는 기존 시스템에 별도의 모듈을 추가하여 기존 시스템의 기능, 성능을 추가나 보완하는 것도 모듈화라고 할 수 있습니다.
최근 나오는 스마트폰이 배터리 용량이 작으면 확장 배터리를 이용하죠. 카드 수납 기능이 부족하다고 생각하여 케이스를 연결하죠. 내구성이 떨어진다고 생각하여 보강 케이스를 추가합니다. 음악을 듣기 위해서 무선 이어셋을 연결하는 것도 추가되는 모듈로 기능을 확장하는 것으로 볼 수 있습니다.
분할, 분리, 확장은 시스템 내에서 일어나는 모듈화 활동이라고 한다면, 시스템 자체가 더 큰 외부 시스템과 연결하기 위해서, 또는 외부와의 의존성을 줄이고 독립성을 확장하기 위해서, 시스템 자체를 독립시키는 것은 시스템 간 일어나는 모듈화 활동입니다.
즉, 시스템을 외부로부터 독립 시키는 것 또한 모듈화입니다.
시스템을 분할하고, 분리하고, 확장하고, 독립시키는 것은 결국 모듈 간 연결 관계를 재정립하는 과정입니다. 즉, 인터페이스를 정의하는 과정이고, 이것은 디지안 룰, 설계 규칙을 만드는 과정입니다. 모듈 간의 독립성을 유지하여 각각의 라이프 사이클에 따라서 기획하고, 설계하고, 양산하기 위해서는 지켜야 할 규칙이 있고, 이것이 디자인 룰이 됩니다.
디자인 룰이 만들어졌다면 이것을 준수하겠다는 약속을 해야 합니다. 그것이 표준화입니다. 모듈화를 통해서는 고객이 원하는 사양에 따라서 선택할 모듈의 종류, 모듈 간의 인터페이스가 정의되고, 표준화를 합니다. 이래야만 모듈화의 두 번째 원리인 조합을 활용할 수 있게 됩니다.
표준화의 결과는 결국 아키텍처가 됩니다. 시스템의 아키텍처는 시스템의 뼈대이고, 이대로 시스템이 만들어지게 됩니다. 모듈화를 한다는 건 종국에는 모듈 기반으로 시스템의 아키텍처를 만들겠다는 것입니다.
모듈화의 결과인 아키텍처의 핵심은 모듈과 인터페이스입니다.
여기서 모듈은 기본적으로 유사한 성격의 것들끼리 묶고, 상이한 성격의 것들끼리 나누는 과정의 산물입니다.
그렇지만, 그 기준은 한두 가지 아닙니다. 의존 관계, 사양 요인, 비사양 요인, 고정과 변동 여부 등 다양한 의사결정 요인에 따라서 모듈들이 결정됩니다. 아쉽지만, 모든 기준을 만족하여 모듈을 나눌 순 없습니다.
그래서, 결과적으로는 최적화를 해야 합니다. 시스템의 품질 속성을 몇 가지 정해두고, 이것들이 가장 최적으로 만족하는 상태의 모듈들을 결정해야 합니다. 이 과정에는 정답이 없습니다. 모듈화 과정은 할 때마다 새로운 답이 나오는 건 최적화 방법, 의사결정 기준 등이 다르기 때문입니다.
결국 정답이 없기 때문에 최적화된 조건에 맞춰서 다양한 분야의 의사결정을 조율하여 결정해야 합니다. 이렇게 해도 문제가 되는 부분이 생기기 때문에 모듈화를 한 후에는 정기적으로 리뷰하여 최적화하는 과정을 거쳐야 합니다.
이번엔 모듈러 디자인의 핵심 원리 중 하나인 모듈화를 다뤘습니다. 모듈화를 잘 했다는 건 시스템에서 갖고자 한 의도를 제대로 파악하여 이를 반영했다는 것을 의미합니다.
어렵다고 생각될 수 있는 개념이지만, 기본을 알면 생각보다 명료한 해법을 구할 수 있는 개념입니다.
Pixabay 의 Sam Karanja 의 이미지