객체지향, CBD(Component Based Development) 등이 보급되면서 재사용에 대한 관심이 매우 높아졌지만 관심에 비해 재사용을 제대로 활용하는 프로젝트는 많지 않았다. 재사용 프로젝트는 비용이 적게 들어가는 것으로 알고 있지만, 재사용을 전제로 한 최초 소프트웨어를 만들 때는 비용과 노력이 더 많이 필요하다.
재사용은 소스 코드만 재사용하는 것은 아니다. 문서나 프로세스도 재사용이 가능하고 법적인 문제로 재사용 범위가 제한되기도 한다. 재사용의 일반적인 인식은 장점은 공감하지만 많은 제약 조건으로 인해 적용이 어렵다고 알려져 있다. 이 글에서는 재사용이 다시 주목받는 이유에 대해 알아보고, 재사용이 성공할 수 있는 필수 요소가 무엇인지 알아본다. 마지막으로, 최근에 인식하지 못한채 사용되고 있는 재사용 형태를 간단히 정리해본다.
재사용이 다시 주목받는 이유
개발팀의 가장 큰 바램은 이전에 개발했던 것을 다음 프로젝트에서 재활용하는 것이다. 개발 시간과 비용도 낮아지지만 이미 검증이 되어 개발팀의 품질 부담을 줄이는 것이 가장 큰 이유이다. 재사용을 위해 객체(Object)와 컴포넌트(Component) 개념을 기반으로 한 OO(Object Oriented), CBD(Component Based Development) 방법론 등이 많이 활용되었고, 최근에는 아키텍처와 어플리케이션까지 재사용이 확대되는 추세다.
재사용의 필요성
일반적인 재사용의 정의는 소프트웨어 개발의 품질과 생산성을 높이기 위한 방법으로 기존에 개발한 소프트웨어의 경험과 지식을 새로운 소프트웨어 개발이나 유지보수에 재 적용하는 것이다. 재사용이 올바르게 적용되었다면 완성된 소프트웨어를 효율적으로 분석하는 재공학(Reengineering), 역공학(Reverse Engineering), 소프트웨어를 잘 폐기하기 위한 파괴공학(Destruction Engineering) 등으로 확대될 수 있다. 재사용은 규모에 따라 분류될 수 있다(표 1 참조).
<표 1> 재사용 규모에 따른 분류
<표 1>을 살펴보면, 함수와 객체를 재사용하기 위해서는 경우에 따라 코딩을 다시 하거나 컴파일(Compile)이나 링크(Link) 작업을 다시 해야 하지만, 컴포넌트나 어플리케이션은 별다른 작업 없이 재사용이 가능한 경우가 많다. 재사용은 컴포넌트나 어플리케이션 단위로 만들어야 추가 공수가 필요 없지만 재사용을 위한 컴포넌트나 어플리케이션을 설계하기가 매우 어려워 시간이나 비용이 한정적인 프로젝트에서는 논의조차 어려운 경우가 일반적이다.
재사용을 망설였던 원인
재사용의 장점은 매우 높지만, 최근까지도 재사용은 잘 되지 않고 있다. 처음부터 재사용을 위한 개발을 해야 하기 때문에 추가적인 비용과 시간이 많이 들고 재사용 전문가가 반드시 개발에 참여해야 하기 때문이다. 재사용 소프트웨어를 만들어도 유지 보수하는데 어려움이 매우 크고, 들어간 노력 대비 재사용되는 횟수가 적은 것도 재사용을 망설이는 요인 중 하나다. 그 중에서 가장 큰 요인은 다른 사람이 개발한 것을 믿지 못하는 개발 문화이다.
NIH 증후군 (Not invented here syndrome)은 말 그대로 '여기서 개발한 것이 아니다.'(Not invented here)라는 의미로, 제3자가 개발한 기술이나 연구 성과는 인정하지 않는 배타적 조직 문화 또는 그러한 태도를 말한다. 따라서 주어진 문제에 대한 해법을 자신 또는 조직 내부의 역량만을 고집하여 해결하려는 배타적인 현상이 나타난다. NIH 증후군은 타인이나 다른 조직에서 나온 기술이나 아이디어는 무시하거나 수용하지 않으려 한다는 점에서 소통과 협업을 어렵게 만드는 장애 요인으로 작용한다. (자료: 위키피디아) |
재사용이 어렵고 적용된 사례도 많지 않지만, 반드시 필요하다는 인식은 줄어들지 않고 있다. 재사용이 널리 확산되지 못했던 이유도 재사용 자체의 문제보다는 적용의 한계가 있었기 때문이다. 적용이 어렵지만 재사용이 다시 주목 받는 이유는, 완성만 된다면 소프트웨어의 생산성 향상, 기간과 비용 단축에 높은 효과가 있고 개발팀도 체계적인 재사용 자산관리를 할 수 있다는 장점 때문이다.
지금부터 재사용의 장점을 살리기 위해 필요한 것이 무엇인지 알아보도록 한다.