소프트웨어의 구조, 아키텍처를 중요시 합시다. 컴퓨터= 과학 & 공학

난 소프트웨어의 구조를 집착에 가까울 정도로 중요시한다. 특히나 여러 컴퍼넌트를 여러 개발자가 나눠서 개발하고 통합을 해야 하는 경우에는 더더욱 중요하다.

개별 기능 하나하나에 대해 어떻게 구현을 하느냐는 중요하지 않다. 나로서는 감당조차 할 수 없는 어려운 영역일수도 있고, 학교 숙제 수준의 간단한 문제일수도 있다. 각자의 능력과 역량에 따라 쉽게 개발했을 수도 있고 고생하며 개발했을 수도 있다. 이런 것들은 각자가 알아서 해결하면 되고 큰 이슈가 되지 않는다.

문제는 통합이 되면서 구조적인 복잡도가 기하급수적으로 상승할 때 나타난다. API수준에서의 복잡도와 상호 연관구조에서의 복잡도와 배포 구조에 따른 복잡도(C++의 경우라면 관련된 DLL이나 static library의 개수, 그리고 같이 공유되어야 하는 전처리 옵션이나 header파일의 개수 등)를 통제하지 않는다면 개인이 관리할 수 있는 영역을 넘어서서 통제불능의 상태가 올 수도 있다. 물론 이런 경우는 극히 드물겠지만, 적어도 구조를 파악하고 정리하고 관리하는데 만만치 않은 고통이 뒤따를 가능성이 높아지기 마련이다. 무언가 다른 컴퍼넌트 때문에 적용한 변경이 구조의 문제에서 발생하는 파악하기 힘든 사이드 이펙트가 발생하게 된다. 거기다 빌드에 필요한 시간도 과도하게 증가할 수도 있다.

소프트웨어의 노화속도는 상상을 가볍게 뛰어 넘는다. 제품을 출시하기도 전에 늙어버려 폐기하고 다시 개발해야 하는 상황에 놓이기도 한다. 노화하지 않도록 끊임없이 살아 움직이게 하려면 늘 각각의 부분들이 유기적으로 맞물려 돌아갈 수 있도록 관리하고, 그 접합부를 유연하게 유지해야 한다.

time-to-market 등의 이슈로 타협해야 하는 상황이 생길수도 있겠지만, 프로젝트가 길어지고 해당 제품이 복잡해질수록 구조의 중요성은 점점 높아질 뿐이다. 그리고 그럴수록 구조에서 오는 시간낭비를 줄여야 하는 것이다.



덧글

  • 에규데라즈 2012/07/05 15:06 # 답글

    전 그누보드로 사이트 짜자고 말하는 과장 밑에서 일해서 이 포스팅이 안보입니다 ;ㅅ; (눈에 안 들어와요 ㅠㅡㅠ)
  • xeraph 2012/07/06 00:19 # 답글

    오랜만에 글 쓰셨네욤 잘 지내시는지? ㅎㅎ
댓글 입력 영역