소프트웨어 모듈러 디자인
기계, 전기전자, 소프트웨어 구성요소가 결합한 복합시스템에서 점차 소프트웨어의 비중이 커지고 있습니다.
우리가 흔히 볼 수 있는 자동차만 보더라도 누가 봐도 자동차는 기계 장치라고 말할 수 없을 정도로 소프트웨어 비중이 커지고 있습니다. 특히 자동차가 서비스를 제공하는 객체가 되면서 웬만한 소프트웨어 시스템보다 자동차의 소프트웨어의 복잡도가 높은 상황이기도 합니다.
소프트웨어 중요성과 비중이 커지면서 소프트웨어 모듈러 디자인에 대한 관심도 커지고 있습니다.
혹자는 이미 소프트웨어는 모듈화 설계 개념을 포함하고 있는 데 무슨 소리냐고 묻는 사람도 있겠지만, 기계나 전기전자와 같이 일반의 모듈러 디자인 개념에서 소프트웨어를 바라봤을 때는 당장 무엇을 해야 하는지 막막한 것이 사실입니다.
소프트웨어라고 해서 기계나 전기전자와 모듈러 디자인 개념이 다르지 않습니다.
다만, 소프트웨어 모듈러 디자인은 다음 두 가지 개념을 나눠서 생각해야 합니다.
먼저 "모듈로써 소프트웨어"의 의미를 살펴보겠습니다.
전체 시스템에서 소프트웨어는 하나 또는 하나 이상의 모듈로 동작합니다.
모듈로 동작한다는 것은 특정 소프트웨어를 통해서 고객에게 제공하는 서비스가 타 서브시스템과 독립적으로 개발 및 운영이 가능함을 의미합니다.
예를 들어서 자동차에 자율주행 기능이 필요할 때는 기존 자동차에 인스톨하면 다른 소프트웨어를 포함한 서브시스템에 영향을 미치지 않고 서비스가 가능하고, 언인스톨 하면 역시나 다른 서브시스템에 영향을 미치지 않고 서비스를 제거할 수 있어야 함을 의미한다.
자동차가 스마트폰처럼 다양한 구성이 가능함을 의미하겠죠.
이것이 소프트웨어 모듈러 디자인의 목적이라면, 소프트웨어 모듈화는 이것을 이루기 위한 수단입니다. 모듈로써 소프트웨어를 달성하기 위해서 서브 시스템으로 소프트웨어의 모듈성을 높이는 활동을 소프트웨어 모듈화라고 합니다. 소프트웨어도 하나의 시스템이고, 전체 제품 관점에서는 서브 시스템이기 때문에 개발 효율성, 시장 대응력을 높이기 위해서 소프트웨어 아키텍처를 모듈화 해야 합니다.
여기서 모듈화 하는 방법론은 기계나 전기전자 서브시스템과 크게 다르지 않습니다. 다만, 소프트웨어는 가시성이 없기 때문에 가시성이 없는 것을 고려해서 진행해야 합니다. 정리하면 소프트웨어 모듈러 디자인은 모듈로써 소프트웨어를 달성하기 위해서 소프트웨어 모듈화를 수행해야 합니다. 두 가지 개념을 포함하는 것이 소프트웨어 모듈러 디자인의 핵심입니다.