소프트웨어에서의 개념설계 역량
김정호 (명지대학교 융합소프트웨어학부 교수)
국내 산업계에 커다란 화두를 던져준 책 ‘축적의 시간’에서는 한국 산업이 처한 위기의 본질을 ‘개념설계 역량’이 부족해서’라고 말하고 있다[1]. ‘개념설계 역량’이란 “제품이 되었건, 비즈니스 모델이 되었건 산업계가 풀어야 할 과제가 있을 때, 이 문제의 속성 자체를 새롭게 정의하고, 창의적으로 해법의 방향을 제시하는 역량”1을 말한다. ‘축적의 시간’의 후속서인 ‘축적의 길’2에서 저자는 ‘개념설계’의 의미를 쉽게 설명하기 위해 초고층 빌딩을 건축하는 예를 들고 있다. 건축물을 짓기 위해서는 설계도가 필요하고, 그에 따라 필요한 건축자재와 물품을 구매하고, 인력을 배치하고 법적 검토와 인허가 작업 등등 각각의 프로세스대로 실행하여 시공건축해 나가는 과정이 필요하다. 이 복잡한 과정은 두 단계로 단순화하면 ‘개념설계’와 ‘실행’으로 이루어져 있다
개념설계는 건축물이나 자동차, 휴대폰 등과 같은 유형의 제품뿐 아니라 TV예능 프로그램이나 비즈니스 모델, 조직구조 등과 같은 무형의 서비스나 포맷에도 들어가 있다. 즉 다양한 분야에서 제품이나 서비스의 개념을 정의하는 개발 초기의 밑그림을 ‘개념설계’라 볼 수 있다. 소프트웨어 분야는 새로운 개념이 끊임없이 나오고 있는 분야이다. 만약 우리가 새롭게 등장하는 소프트웨어 개념을 효과적으로 설계할 수 있다면, 즉 소프트웨어의 개념설계를 잘 할 수 있다면, 이는 큰 산업 발전을 가져오고 우리의 미래를 바꿀 수 있는 역량일 것이다.
소프트웨어 산업에 있어서 개념설계란 “소프트웨어 제품의 개념을 정의하기 위해 밑그림을 그려내는 것, 즉 제품 개발 초기 단계에 제품의 목적을 명확하게 설명하는 행위”([3])3이다. 본 고에서는 기존의 소프트웨어 제품이 가지는 문제점과 이런 문제점을 피할 수 있는 방법으로서 개념설계 역량이 무엇인지 논의하고자 한다.
소프트웨어 분야의 기술은 하루가 다르게 변하고 있다. 빅데이터와 AI(Artificial Intelligence: 인공지능)는 기본적인 기술이 되었고, 블록체인이나 마이크로서비스 아키텍처(Micro-Service Architecture)같은 새로운 기술들도 지속적으로 나오고 있다. 생산자 위주의 제품 개발에서 소비자 위주의 개발 시대로 넘어가면서 빅데이터를 활용하고, 보다 편의를 높이기 위해 AI기술을 접목시키려는 시도가 계속되고 있다. 그러나, 과연 우리는 이런 다양하고 새로운 기술들을 우리 산업 제품과 서비스에 제대로 활용하고 있는 것일까? 예를 들어 최근에 많은 가전 회사에서는 AI기술을 접목한 가전제품들을 선보이려 하고 있다. 그러나 현재까지 출시된 국내 가전 제품들의 소프트웨어는 구조적으로 이런 신기술을 쉽게 받아들일 수 있도록 설계되어 있지 않다. 즉, 제품을 개발할 당시에 이미 신기술을 수용할 수 있도록 개념설계가 되어 있어야 신기술의 용이한 수용이 가능한데 그렇게 하지 못하였던 것이다. 또 다른 예로 많은 한국 기업들이 마이크로서비스 아키텍처란 신기술을 도입하여 소프트웨어 시스템을 구축하려고 노력하는 중이다. 하지만 기존 기업의 기능을 마이크로서비스로 구분하여 설계하는 역량을 축적하지 않았기 때문에 마이크로서비스 아키텍처가 가지는 서비스의 유연성을 시스템에 녹이지 못하는 실정이다.
이런 문제점을 해결하기 위해서는 세 가지의 개념설계 역량이 필요하다.
첫째, 제품의 품질을 파악할 수 있는 역량이 필요하다. 많은 사람들이 신기술이라고 하면 새로운 기능이 만들어지는 것이라고 생각한다. 하지만 최근의 신기술은 새로운 기능을 만들어내는 것보다는 제품의 품질을 높이기 위해 등장하는 경우가 많다. 따라서 제품 품질을 높이는 것이 신기술 적용의 목적일 가능성이 많다. 자동차를 예로 들어보자. 자동차가 나온 18세기 무렵의 고객들은 이전에 없던 자동차라는 새로운 이동수단의 등장만으로도 큰 가치를 느꼈을 것이다. 그러나 요즘에 자동차를 사려는 고객들은 단순히 자동차가 가진 이동수단 기능만으로 자동차를 사진 않는다. “얼마나 안전한가? (안전성)”, “얼마나 고장이 안 나고 오래 탈 수 있는가? (신뢰성)”, “얼마나 조용하고 편안한가? (사용성)”과 같은 다양한 자동차의 품질들을 기준으로 자동차를 사게 된다. 소프트웨어 제품도 마찬가지이다. 처음에는 시스템의 기능 그 자체에 매력을 느끼지만, 점차 새로운 기술을 적용한 고품질의 시스템을 고객은 원한다. 소프트웨어 제품들의 경우에도 역시 새로 나온 신기술들은 많은 경우 품질을 높여 주기 위해서 사용된다. AI는 “얼마나 정확한 예측을 해내는가?”라는 정확성이란 품질을 높여주고, 마이크로서비스 아키텍처는 “얼마나 급변하는 비즈니스 환경을 신속하게 반영할 수 있는가?”라는 유지보수성을 높여주기 위한 기술이다. 이런 품질 목표를 반영한 소프트웨어 개념 설계를 하려면 제품의 품질을 우선 파악하는 역량이 필요하다. 따라서 제품의 품질 목표를 정확하게 파악하는 능력, 이것이 소프트웨어 제품의 개념설계에 필요한 첫 번째 역량이다.
둘째, 파악된 품질을 추상화할 수 있는 역량이 필요하다. 소프트웨어 제품의 품질 목표를 명확하게 이해한다고 해도 이를 개념설계에 반영하지 못한다면 소용없는 일이 되고 만다. 제품의 품질 목표를 개념설계에 반영하려면 추상화(abstraction)하는 능력이 필요하다. 추상화란 사물의 특징을 잘 드러나게 단순화하는 능력을 말한다 [2]. 복잡한 시스템을 목적에 맞게 단순화하면 그 목적을 파악하기가 쉽다. 예를 들어, 제품 개발 시점에 아직 나오지도 않은 새로운 기술을 알 수는 없지만 새로운 기술을 추가하게 될 가능성은 매우 높으므로 신기술을 쉽게 연동할 수 있도록 소프트웨어 제품을 추상화할 수 있을 것이다. 복잡한 시스템을 단순화하면서 보고 싶은 부분에 집중하는 추상화 능력, 이것이 신기술을 연동하는 개념설계에 필요한 두 번째 역량이다.
셋째, 추상화된 개념을 프로토타입으로 구현할 수 있는 역량이 필요하다. 아무리 목적에 맞는 개념을 추상화하여 설계하였더라도 이것이 실현 가능하다는 확신(feasibility)을 줄 수 있다면 사람들은 믿지 못할 것이다. 다시 말해, 신기술이 들어간 개념설계가 실제 제품에 반영될 수 있다는 확신을 줄 수 있어야 하고 개념설계의 구현 방향성을 제시할 수 있어야 한다. 소프트웨어 시스템에서 개념설계가 올바로 되었는지 입증하려면 실제 구현(implementation)을 해 봐야만 알 수 있다. “축적의 시간”에서도 언급되었듯이 개념설계는 대부분의 경우 한번에 완성되지 않는다. 다양한 시행착오를 겪은 후에야 보다 정확하고 목적에 맞는 개념설계를 해낼 수 있게 된다. 소프트웨어 제품은 눈에 보이지 않아서 특히 더 많은 시행착오가 필요할 수 있다. 따라서, 소프트웨어 제품의 개념설계를 제품의 프로토타입 형태로 구현하고, 목적에 부합하지 않을 경우에 수정된 개념설계를 수행하는 일련의 반복적 시행 착오 과정이 필요하다. 이렇게 시행착오를 효과적으로 반복하여 소프트웨어 제품의 개념설계를 입증할 수 있는 프로토타입 구현 능력이 세 번째 역량이라고 할 수 있다.
위에서 제시한 세가지 역량을 갖추었을 때, 소프트웨어 제품이 우리 산업 발전의 새로운 매개체가 될 수 있을 것이라 필자는 확신한다. 하지만 개념설계 역량이 산업 발전의 매개체로서 역할을 할 수 있기 위해서는 위의 개념설계 역량을 갖추는 것 만으로는 충분하지 않고, “축적의 시간”에서도 ‘위험 공유의 사회’의 필요성을 언급하였듯이, 새로운 개념설계를 장려하고 실패하더라도 용인할 수 있는 사회적인 인식도 필요하다.
소프트웨어 개념설계를 위한 세가지 역량이 계발되고, 다양한 경험적 지식의 축적이 가지는 가치에 대한 사회적 인식이 확산되면 새로운 산업 발전의 돌파구가 만들어 질 수 있을 것이다.
참고문헌
- 이정동 외, 축적의 시간, 지식노마드, 2015.
- 이정동, 축적의 길, 지식노마드, 2017.
- 렌 베스 외, 소프트웨어 아키텍처 이론과 실제, 에이콘출판사, 2007.
1 [1] p. 43.
2 [2]
3 [3] pp. 19~23. 소프트웨어의 상위 수준 설계이며 제품의 목적을 보여주는 설계를 소프트웨어 아키텍처라고 부른다.