brunch

You can make anything
by writing

C.S.Lewis

by Jin Sep 20. 2023

모듈 간 인터페이스 표준화 시 고려사항

왜 모듈화를 하면 무게, 부피가 늘어날 수 있나요?

모듈러 디자인에서 모듈의 독립성을 유지하기 위해서는 모듈 간 인터페이스를 표준화해야 한다고 합니다. 모듈 각각 설계의 주체, 설계 시점이 다르더라도 상호 간 영향을 주지 않도록 모듈 간 연결 관계, 즉 인터페이스를 표준화해야 합니다.


그런데, 모듈 간 인터페이스를 표준화할 때 유의해야 할 사항이 있습니다. 이것들로 인해서 모듈러 디자인을 적용했을 때 반드시 제품 특성이 좋아지는 것만 아니라는 것을 생각해 두어야 합니다.


1. 모듈 간 인터페이스 표준화는 지속성과 범용성을 고려해야 한다.


모듈 간 인터페이스를 표준화하기 위해서는 표준화한 결과가 인터페이스가 연결되는 모듈들의 생명주기보다는 길어야 합니다. 힘들게 표준화를 했는데, 모듈을 설계할 때마다 달라진다면 표준화의 의미가 없고, 모듈의 독립성을 유지해서 얻고자 하는 공용화, 재사용, 조합의 효과를 얻지 못하기 때문입니다.


그래서, 인터페이스를 표준화할 때는 시계열 상으로는 지속성, 다양한 모듈의 조합을 용인하는 범용성의 특성을 가져야 합니다.


그것 때문에 자연스럽게 당장은 불필요하지만, 미래를 대비해서 여유를 만들어 놓는 경우가 있습니다. 예를 들어서, 소프트웨어 모듈을 캡슐화하고, 여기에 접근하기 위한 인터페이스인 함수를 정의를 해놓는다고 가정하겠습니다. 함수가 곧 외부 모듈과 해당 소프트웨어 모듈 간 인터페이스가 되며, 함수 명, 파라미터 자료형, 파라미터 명칭, 리턴 값 등이 인터페이스 구성요소가 될 겁니다.


그런데, 모듈의 기능이 변화가 일어날 수 있고, 기능에 대한 설정을 위해서는 지금 당장은 불필요하지만 미래엔 필요할 수 있는 파라미터의 여유분을 미리 만들어 두기도 합니다. 인터페이스의 지속성을 늘리기 위해서입니다.


이렇게 하지 않는 경우, 해당 모듈의 변화에 따라서 인터페이스인 함수가 여러 버전이 만들어질 수 있고, 이전 버전을 사용하지 않도록 따로 주석으로 표기를 해두겠죠.


이러한 여유 공간은 지속성뿐만 아니라, 다양한 사용처에 대비한 범용성을 확보하기 위해서도 늘어납니다.


2. 인터페이스의 단순화를 위해서 복잡성을 내부로 전이한다.


모듈 간 인터페이스를 표준화하기 위해서는 먼저 모듈 간 인터페이스를 단순화해야 합니다. 원래 복잡하던 인터페이스를 단순화하기 위해서는 불필요한 인터페이스를 끊고, 인터페이스 결합 강도를 낮추는 등의 조치를 사전에 취하겠지만, 결국 시스템으로 작동하기 위해서 필요한 연결 관계를 아예 없앨 순 없습니다. 이 상황에서 모듈 간의 인터페이스의 단순화는 곧 기존에 있었던 복잡성을 모듈 내부로 전이하는 결과를 가져옵니다. 즉, 시스템 전체의 복잡성이 동일할 때, 모듈 간 연결 관계의 복잡성이 줄어들기 위해서는 그것을 받아서 늘어나는 쪽도 있는 겁니다. 그 과정에서 자연스럽게 모듈 자체의 물리적 규모, 논리적 규모가 커지기도 합니다.


예를 들어서, 하나의 보드에 전반적인 운영을 담당하는 영역 (메인부)과 통신을 담당하는 영역 (통신부)이 설계되어 있습니다. 그런데, 메인부는 제품마다 새롭게 개발해야 하고, 세대의 변화에 민감한 반면에 통신부는 제품 상관없이 거의 동일하고, 몇 세대에 걸쳐서 공용화할 수 있을 정도로 공통화된 영역이었습니다.

그런데, 하나의 보드로 구성되다 보니 메인 부의 변동성에 맞춰서 제품 개발마다 새롭게 개발하는 상황이었었죠. 이 상황을 개선하고, 통신부를 공용화하고 재사용하기 위해서 메인 부 PCB와 통신부 PCB를 분리하는 작업을 합니다.


그리고, 둘을 커넥터로 연결하는 방식을 취하죠. 이 상황에서 장점은 메인부 PCB는 신규 개발하더라도 통신부 PCB는 하나만 만들어서 공용화/재사용할 수 있게 되죠.


그런데, 단점은 무엇일까요? 예전에는 하나의 보드로 만들었으니까, 메인부와 통신부 연결이 복잡하더라도 상관이 없었습니다. 어차피 보드 안에서 일어나는 상황이기도 하니까요. 그런데, PCB를 분리하면서 둘을 커넥터로 연결하면 커넥터로 전달되는 데이터를 사전에 표준화를 해놔야 합니다. (앞선 여유 분 문제가 발생할 수도 있죠.) 커넥터로 둘 간의 연결 관계가 단순화되고, 표준화가 되는 동시에 메인부와 통신부 내부는 오히려 복잡해지는 상황이 될 수 있습니다. 과거에는 직접 연결하다 보니 통신부에 특정 영역에 직접 연결도 하고, 컴포넌트를 생략하기도 하는 등 여러 가지 재량이 있었으나, 이젠 각각의 커넥터와 연결을 해야 하니까 내부의 복잡성이 증가하는 상황도 발생할 수 있습니다.


3. 모듈이 통합 시에 중복되는 부분을 제거할 수 있었으나, 모두 중복 기능을 유지해야 한다.


원래 하나의 팀이었던 마케팅 기능과 영업 기능이 두 개의 팀으로 쪼개졌다고 가정해 봅시다. 그전까지는 유기적으로 마케팅 담당자와 영업 담당자가 협의해 가면서 일 처리를 해왔는데, 이젠 팀이 변경되면서 정해진 연결 창구에 따라서 정해진 업무 절차에 따라서 협업해서 일하는 것으로 변경이 됩니다. 즉, 팀으로 나눠지면서 팀 간의 일하는 방식 (인터페이스)가 표준화되는 거죠.


이렇게 팀으로 나눠지면서, 과거엔 마케팅과 홍보 기능이 쉐어해왔던 것들이 늘어나게 됩니다. 두 팀을 나누는 칸막이가 생기고, 예산이 나눠지고, 예산 담당자가 마케팅과 홍보팀이 나눠지고, 총무도 나눠지고, 작은 거지면 탕비실과 탕비실 관리도 나눠지게 되죠. 가장 중요한 것, 팀장도 두 명이 될 겁니다. 과거에는 두 기능이 하나의 팀에 있으면서 쉐어했던 것들이 팀이 나눠지면서 늘어나게 되는 거죠.


모듈이 나눠지는 것도 동일합니다.


하나의 모듈로 존재할 때는 다 기능을 했던 부품들이 두 개의 모듈로 나눠지면서 부품의 수가 늘어나게 됩니다. 모듈로 나눠지면서 모듈의 합이 오히려 규모가 커지는 상황이 되는 거죠.


이러한 3가지 이유로 모듈화를 하면 대상 시스템이나 제품이 무게가 증가하고, 부피가 늘어날 수도 있다고 말하는 겁니다.


그 상황을 고려하고도 얻을 수 있는 이점이 크다면 모듈화를 하는 것이겠지만, 그것이 아니라면 오히려 시스템/제품 경쟁력을 해치는 상황이 될 수 있음을 염두에 두어야 합니다.


Image by Clker-Free-Vector-Images from Pixabay




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari