소프트웨어 모듈러 디자인
소프트웨어 재사용은 1960년대 논문에서 찾아볼 수 있을 정도로 소프트웨어 영역의 오래된 주제입니다.
클래식한 주제이지만 소프트웨어 복잡성 증가로 인해서 가장 중요한 주제 중 하나이며,
소프트웨어 공학의 발전은 곧 소프트웨어 재사용 스킬의 발전이라고 할 수 있을 정도입니다.
그런데 많은 기업들이 소프트웨어 재사용에 관심을 갖고 있으면서도 제대로 하고 있는 기업은 얼마나 될까요?
이번 글에서는 소프트웨어 재사용 세부적인 스킬보다는 유념해야 할 내용들을 다뤄보고자 합니다. 제 책에서도 다룬 적이 있는 주제이고, 블로그에도 글이 있을 겁니다. 다시 되새기는 느낌으로 정리하고자 합니다.
경험적으로 사후에 이뤄지는 소프트웨어 재사용은 큰 효과가 없다는 것은 입증이 되었습니다.
즉, 소프트웨어를 개발하는 과정에서 향후 재사용할 대상을 선별하고 정제하여 활용하는 것은 큰 효과를 얻을 수 없습니다.
그럼에도 아직도 사후적인 소프트웨어 재사용 활동에 집중하는 기업들이 많죠. 가장 실행하기 쉽기 때문일 겁니다. 물론, 강력한 리더십이나 관리 역량을 갖추고 있다면 성공할 수도 있겠으나, 이런 곳은 극소수라고 장담합니다.
그렇다면 어떻게 해야 할까요?
효과적인 소프트웨어 재사용을 위해서는
재사용 대상, 재사용 조건, 재사용 효과, 재사용 관리를 확실히 정해두어야 합니다.
첫 번째, 재사용 대상은 소프트웨어 재사용되는 단위로 보통 모듈, 라이브러리, 컴포넌트, 프레임워크, 아키텍처 등 소프트웨어 구성요소를 의미합니다. 재사용 대상은 도메인 엔지니어링 또는 Design for Reuse 등을 통해서 특정 제품이나 소프트웨어 완성품에 의존적이지 않은 채로 정의되고 만들어져야 합니다.
그렇지 않고, 앞서 설명한 사후적인 재사용 활동을 통해서 만들어진 재사용 대상은 특정 제품에 지나치게 과적합화되어 재사용 범위가 국한될 가능성이 높습니다.
재사용 대상은 재사용 범위와 반비례하는 경향을 갖습니다. 재사용 대상이 크면 재사용할 수 있는 범위가 좁아지고, 재사용 대상이 작으면 재사용할 수 있는 범위가 넓어지죠.
두 번째, 재사용 조건은 앞서 정의한 재사용 대상을 재사용할 상황을 의미합니다. 제품 종류일 수도 있고, 제품의 사양일 수도 있고, 제품이 제공할 기능일 수도 있습니다. 해당 조건은 설계 규칙으로 정의해놓고 기계적으로 준수해야만 합니다. 그런 의미에서 재사용 조건은 설계 규칙이라고도 볼 수 있습니다. 재사용 조건에는 준수해야만 하는 설계 규칙뿐만 아니라, 커스터마이징이 필요한 경우 사용하는 방법도 포함되어 있습니다.
앞서 언급한 재사용 범위와 연결되어 있습니다. 재사용 조건에 많으면 재사용 범위가 좁아지고, 재사용 조건이 적으면 재사용 범위가 넓어지겠죠.
세 번째, 재사용 효과는 재사용을 했을 때 기대하는 정성적, 정량적 이점을 의미합니다. 보통 돈, 시간, 리소스, 품질 등으로 표현할 수 있는데, 재사용 효과가 명확해야만 재사용 대상을 분리하여 만들어낼 비용을 상쇄할 수 있습니다. 재사용 효과가 명확하지 않을 땐 재사용 자체를 재고해야 하죠. 재사용 효과는 일반적으로 재사용 대상의 규모와 비례합니다. 재사용 대상의 규모가 크면 재사용 효과가 크고, 재사용 범위가 작아집니다. 재사용 대상의 규모가 작으면 재사용 효과가 작고, 재사용 범위가 커지죠.
마지막, 재사용 관리는 재사용에 대한 라이프사이클 관리를 의미합니다.
어떻게 보면 중요한데, 가장 준비하기 어렵습니다.
재사용 대상을 별도로 만들기도 어렵고, 그것을 준수하는 것을 강제화하기도 어렵죠. 그리고, 그것을 최신화하는 것도 어렵습니다. 재사용을 위한 조직도 필요하죠.
예를 들어서, 일반적인 재사용을 활용하는 기업의 활동 패턴은 제품 개발 → 재사용 대상 발굴 → 재사용 실행 → 효과 산출로 이어지는데, 제대로 돌아가기 어렵습니다.
이 부분, 각 활동 별로 발생하는 문제는 다음 글에서 다루도록 하겠습니다.
Image by alluvitmedia from Pixabay