brunch

모듈화를 통해서 얻어야 하는 제품 특성

모듈화를 제대로 했는지 확인하는 방법

by 심야서점

얼마 전 특정 회사에서 진행한 모듈러 디자인에 대한 협의 중에 모듈화를 했는데, 바뀐 것이 없다는 의견이 나왔습니다. 비용과 리소스를 써서 모듈화를 했는데, 변하는 것은 아무것도 없다는 취지에서 이젠 무엇을 해야 하는가 모르겠다는 의견이었죠.


모듈화를 하면 제품이 어떤 특성을 갖게 되는지, 앞으로 어떻게 변화해야 하는지 방향성을 잡지 않고, 기계적으로 수행한 것이 아닌가 생각이 들었습니다.


이번 글에서는 모듈화를 통해서 제품이 가져야만 하는 제품 특성과 그것이 왜 필요한 지 살펴보겠습니다.


첫 번째는 모듈의 기능 연결 (Function Binding)입니다.


모듈화를 할 때, 기능 분석부터 진행을 합니다. 그건 새로운 제품이 갖게 될 사양 변화에 대해서, 최소한의 모듈 변화만 용인하고 기존 모듈을 최대한 공용화하기 위해서입니다.


예를 들어서, 하나의 기능을 담당하는 모듈이 두 개 이상이라면, 해당 기능과 연관된 사양이 변화하면 두 개 이상의 모듈을 바꿔야 하는 상황이 발생하는 것이죠. 그리고, 동일한 사양이라면 동일한 모듈을 갖는 것이 최선일 텐데, 두 개 이상의 모듈을 공용화하는 것이 한 개의 모듈을 공용화하는 것보다 쉽지 않겠죠.


그래서, 최대한 특정한 기능을 수행하는 모듈을 하나로 묶는 것이 공용화 측면에서 유리합니다.


두 번째는 인터페이스 표준화 (Interface Standardization)입니다.


특정 기능을 수행하는 모듈이 한 종류라고 할지라도, 모듈 간의 의존성이 높다면 새로운 사양이 발생할 경우 두 개 이상의 모듈을 변경해야만 하는 상황이 발생합니다. 가장 이상적인 것은 사양 변화에 꼭 변경이 필요한 모듈만 골라서 바꾸고 싶은데, 그러기 위해선 연결 관계, 즉 인터페이스가 표준화되어있어야만 합니다.


또한, 정해진 모듈 수를 한정하더라도, 모듈 간의 조합을 통해서 다양한 사양의 제품을 적용하기 위해서는 연결 관계는 1가지 또는 소수로 한정되어 있어야 합니다.


예를 들어서 제품에 모듈 A, B 두 개가 있고, 각각 모듈 A는 A1, A2, 모듈 B1, B2가 있는데,

모듈 A와 모듈 B 간의 인터페이스가 표준화되어 있지 않으면, 모듈 A1의 전용 모듈 B1, 모듈 A2의 전용 모듈 B2가 생기는 것이죠. 그렇게 되면 모듈 A, B가 각각 2개의 종류가 있으면, 제품도 2종류만 만들 수 있는 것이죠.


반면에, 만약 모듈 A, B 간의 인터페이스 표준화되어 있으면, A1-B1, A2-B1, A1-B2, A2-B2 총 4 종류의 제품 사양이 나올 수 있게 됩니다. 앞으로 나올 조합 특성에 인터페이스 표준화는 필수 특성입니다.


세 번째는 공용화 (Commonality)입니다.


모듈화를 하고, 모듈은 하나의 사양에 하나만 존재하는 것이 이상적입니다. 또한 향후 비슷한 사양이 필요할 때는 기존에 만들었던 모듈을 재사용하는 것이 이상적입니다. 이것을 위해서 기능 연결과 인터페이스 표준화 특성을 갖게 한 것입니다.


만약 하나의 사양을 갖는 여러 개의 모듈을 개발해서 운영했다면, 그것만큼 낭비가 없는 것이죠. 모듈화를 했다면, 최소의 모듈을 운영하고 있는지 확인해봐야 합니다.


네 번째는 조합성 (Combinationality)입니다.


모듈러 디자인은 모듈의 수를 한정하면서, 모듈로 만들어지는 제품의 수를 최대한 늘리자는 방향성을 갖습니다. 제가 예전에 표현할 때, 합으로 곱을 대응한다고 이야기한 적 있습니다.


앞의 예시처럼 모듈 A, B가 각각 두 종류의 모듈을 갖게 되면, 내부적으로 관리하는 모듈의 총 수는 4개이지만, 이것을 가지고 대응이 가능한 제품의 수는 모듈 종수의 곱 4개가 되죠. 여기서 모듈 A의 새로운 사양이 생겨서 모듈 A의 종류가 3가지가 되면 관리하는 모듈 종수는 5개이지만, 가능한 제품의 수는 3X2 = 6 종류가 됩니다.


여기서 내부 복잡성을 줄이면서, 외적으로 제품 다양성을 확보할 수 있다는 원리가 생기는 것이죠.


모듈화를 했다면, 앞의 특성을 갖는지 다음 체크리스트로 확인해봐야 합니다.


만약 하나라도 불확실하다면 모듈화는 잘못된 겁니다. 다시 하세요.


첫 번째, 하나의 기능이 하나의 모듈에 연결되어 있는가? 하나의 사양에 영향을 받는 모듈이 최소화되었는가?

두 번째, 모듈 간 인터페이스가 표준화되어 있고, 이것이 설계 규칙에 반영되어 있는가?

세 번째, 특정 사양에 해당하는, 특정 기능에 담당하는 모듈이 최소로 개발하여 운영되고 있는가? 모듈이 조합된 상위 구성요소도 동일한 사양에 최소로 운영되고 있는가?

네 번째, 모듈 간의 조합을 통해서 다양한 사양이 대응 가능한가? 조합이 안 되는 모듈, 전용 모듈이 있지 않은가?

keyword
매거진의 이전글Openess와 Modularity 관계