IT Solutions/MDD

최첨단 소프트웨어 개발 방식, MDD로 미래를 대비하자

2016.08.29 09:30

2013년 영국 옥스퍼드 대학교는 10년 후 사라질 직업, 702개 업종을 분석하여 발표한 적이 있는데요. 인공지능을 연구하는 마이클 오스본 교수가 쓴 논문 ‘Future of Employment: How Susceptible Are Jobs to Computerisation?(고용의 미래-우리 직업은 컴퓨터화에 얼마나 민감한가?)’에서 주장한 내용입니다. 


이 내용은 올해 초 알파고와 이세돌의 대국에서 재조명되었습니다. 논문에서는 앞으로 10년 후 미국 총 고용자의 47%의 일이 컴퓨터나 로봇으로 대체되어 자동화될 가능성이 높다고 밝혔습니다.


놀랍게도 프로그래머(Computer Programmer)가 사라질 확률이 48%나 됩니다. 반면에 응용 소프트웨어 설계자(Software Developers, Applications)의 경우에는 4.2%, 시스템 소프트웨어 설계자(Software Developers, Systems Software)는 1.3%에 불과합니다.



 인공지능이 대체할 미래의 직업, 프로그래머


주어진 설계서를 보고 소스 코드를 작성하는 단순 반복적인 프로그래밍은 쉽게 컴퓨터로 대체될 수 있다는 이야기겠지요. 반면에 사용자와 의사소통하면서 요구 조건에 맞게 설계서를 만들어내는 소프트웨어 설계자의 작업은 인간의 창조적인 영역에 해당되기 때문에 기계가 대신하기 어렵습니다. 


모델 기반 개발 방식(MDD: Model Driven Development)에서는 모델로 작성한 설계 문서로부터 소스 코드를 자동 생성함으로써 프로그래밍 작업을 기계가 대체할 수 있습니다. 대신 기존의 프로그래머들은 단순 반복적인 프로그래밍 대신 더 가치 있는 응용 소프트웨어 설계자나 자동화 도구와 같은 기반 기술을 개발하는 시스템 소프트웨어 설계자로 역할이 전환되고 있습니다



그렇다면, 소프트웨어 사용자의 요구 사항을 분석하고 설계하는 작업은 어떨까요? 인간의 창조적 영역이기 때문에 컴퓨터가 대체하는 것이 전혀 불가능할까요? 


LG CNS는 리버스 엔지니어링을 통해 이 가능성을 현실화시키고 있습니다.


 리버스 엔지니어링이란?


일반적으로 소프트웨어를 개발할 때 설계서를 보고 프로그래밍 언어로 소스 코드를 작성합니다. 소프트웨어는 한번 개발된 후 버리는 것이 아니라 유지 보수를 통해 계속해서 수정•보완됩니다. 


유지 보수를 원활하게 하기 위해서는 설계서도 최신화되어야 합니다. 대개는 사람이 수작업으로 이 작업을 수행하지만, LG CNS의 리버스 엔지니어링은 기계가 소스 코드를 역으로 분석하여 설계서도 자동으로 추출해 내고자 하는 요구에서부터 출발했습니다.


그렇다면 리버스 엔지니어링은 어떠한 원리로 동작할까요?


리버스 엔지니어링은 서로 다른 언어를 번역하는 것과 비슷합니다. 인터넷 번역기에서 영어를 입력하고 대상 언어를 한국어로 설정하면 번역기가 영어의 문법과 문장의 패턴을 분석하여 한국어의 문법에 맞게 한국어 문장을 새로 만들어줍니다. 


때로는 번역된 결과가 어색했던 경험도 있을 것입니다. 인간이 언어를 구사하는 방식이 천차만별인데 번역기가 이미 인지하고 있는 패턴이라면 자연스럽게 번역되겠지만, 알려지지 않은 문법이나 새로운 단어 등 번역기가 분석할 수 없는 표현이 나온 경우에는 제대로 번역이 되지 않습니다.


l 인터넷 번역기 그림 예시


프로그래밍 언어는 컴퓨터와 사람이 의사소통하기 위한 언어로서, 사람의 언어와 마찬가지로 문법을 가지고 있습니다. 리버스 엔지니어링에서는 소스 코드가 영어에, 설계서가 한국어에 해당됩니다. 


LG CNS의 리버스 엔지니어링에서는 프로그래밍 언어의 문법과 패턴을 분석하여 UML[각주:1] 설계 모델의 구성 요소에 대응하는 ‘변환 규칙’을 작성합니다. 번역기가 영어의 규칙과 한국어의 규칙을 매핑하여 변환 규칙을 가지고 있는 것과 비슷합니다. 


LG CNS는 Java뿐만 아니라 객체 지향 언어가 아닌 C, COBOL로 작성된 소스 코드로부터 텍스트로 된 설계서는 물론이고, 그림으로 된 UML 모델을 생성해 냅니다.


 리버스 엔지니어링의 진화와 모델의 재사용


리버스 엔지니어링은 단순히 기존 소프트웨어를 분석하기 위한 용도로만 활용할 수 있는 것이 아닙니다. 소프트웨어는 전체 기능을 신규로 만들어낼 수도 있지만, 본래 가지고 있는 기능을 베이스로 요건을 추가하거나 일부 기능을 수정하여 개발할 수도 있습니다. 


낡은 건물을 구입해서 집을 새로 짓는다고 가정을 해봅시다. 기존 건물을 철거하고 다시 짓는 것과 건물의 뼈대를 유지한 채 내부 구조를 변경하는 방법 중 어느 쪽이 더 효율적일까요? 


건물의 구조체가 얼마나 튼튼한지, 내부 구조를 얼마큼 변경해야 하는지 등에 따라 다를 수 있겠지만, 전체를 새로 짓는 것에 비해 비용과 시간을 단축할 수 있는 리모델링 방식이 선호되고 있습니다.


LG CNS는 기존의 시스템이 존재한다면, 소스 코드로부터 건물의 뼈대에 해당하는 기본 설계 모델을 생성하기 위하여 리버스 엔지니어링을 활용하기 시작했습니다. 이러한 경우 워드, 엑셀 등 텍스트 기반의 문서보다 표준화된 모델이 개발을 진행하기에 효과적입니다. 


리버스 모델을 생성해 놓으면, 소프트웨어가 가지고 있는 기본적인 요구 사항에 대한 설계서를 미리 만들어 놓는 것과 비슷합니다.


l LG CNS의 모델 기반 리버스 엔지니어링 예시


모델 재사용을 전제로 리버스 엔지니어링을 진행할 경우, 약간의 수작업을 더한다면 새로운 소스 코드를 생성할 수 있는 수준으로 정교한 모델을 생성해야 합니다. 


위 그림처럼 소스 코드의 상세 로직까지 모델로 변환하려면 모델 안에서 이것을 표현할 수 있는 표준이 정의되어 있어야 합니다. 단순하게 소스 코드의 텍스트를 모델에 옮겨놓은 것이라면 언어가 바뀔 때 재사용이 어렵겠지요. 


LG CNS는 상세 로직을 포함하여 100% 소스 코드를 생성할 수 있는 모델 표준을 보유하고 있고, 리버스 엔지니어링을 하는 경우에 이러한 모델 표준에 최대한 매핑될 수 있도록 세밀하게 변환 규칙을 작성합니다.

 

 모델 기반 리버스 엔지니어링의 장점


모델 기반 리버스 엔지니어링은 여러 가지 장점을 가지고 있습니다. 


첫째, 리버스를 통해 생성된 모델은 기존 업무의 분석 효율을 높여줍니다. 텍스트로 된 복잡한 소스 코드를 그림으로 그려진 모델로 변환하면 가독력이 높아져서 전체적인 구조를 이해하기 쉽습니다. 


세부 로직은 위 그림의 붉은색 네모 박스의 프로그래밍 명령어를 오른쪽 녹색 네모 박스의 내용처럼 자연어로 된 단순한 표현식으로 바꾸어 보여줍니다. 특히 모델은 소프트웨어가 동작하는 구현 플랫폼이 무엇이든 상관없이 논리적인 흐름 중심으로 표현되기 때문에, 업무 분석가들에게 불필요한 코드의 기술적인 부분은 생략해서 보여줍니다. 


모델로 변환하였다고 해서 지은이의 의도가 저절로 파악되는 것은 아니지만, 더욱 효율적으로 분석할 수 있게 도움을 주는 것이지요.


둘째, 기존 프로그램의 문제점과 개선 포인트를 찾아줍니다. 변환 규칙을 만드는 과정에서 표준을 지키지 않은 프로그램이 식별되고, 구조적인 결함이 발견되기도 합니다. 중복된 기능이나 사용하지 않는 기능도 찾아낼 수 있습니다. 


건축 리모델링에서 내장재를 뜯어내고 불필요한 구조를 철거하고 난 후 기본 뼈대를 살펴보니 비로소 금이 간 벽면이라든가 배관에서 누수가 발견되는 것과 비슷한 것입니다. 이 경우 벽면을 보수하고 배관을 수리하는 등 기본적인 기능을 먼저 보완하고 난 후, 구조를 변경하거나 건물을 확장하는 공사를 진행하겠지요. 


소프트웨어도 오랜 기간 유지 보수를 하다 보면 기존 프로그램을 분석하여 문제점을 찾아내고 보완하는 과정이 필요한데, 이때 리버스 엔지니어링을 활용하면 됩니다.

 

l MDD 방식을 적용한 소프트웨어 개발 과정 예시


마지막으로, 위 그림처럼 리버스 모델을 재사용하여 소스 코드를 다시 생성하는 순공학(Forward Engineering)[각주:2]을 진행할 수 있습니다. LG CNS의 리버스 엔지니어링에서는 대상 언어의 종류에 상관없이 MDD에서 사용하는 것과 동일한 표준의 모델을 생성합니다. 


이 모델은 순공학을 진행하는 기본 뼈대가 됩니다. 설령 요구 사항 정의가 덜 되었다 하더라도 기존의 기능이 모델에 그대로 남아있기 때문에 누락될 염려가 없습니다. 


LG CNS는 수년간 대형 IT 시스템 재구축 경험을 통하여 고객사가 기존 시스템의 기능을 6~70% 정도 유지하고자 한다는 것을 파악하였고, 일정 규모 이상의 프로젝트에서는 리버스 엔지니어링을 의무화하여 요구 사항 누락을 방지하고 있습니다.


리버스 엔지니어링이 소프트웨어 개발의 만병통치약은 아닙니다. 규칙을 무시하고 엉망으로 작성된 소스 코드로부터 환상적으로 잘 정제된 모델을 뽑아내는 것은 불가능하겠지요. 소프트웨어의 기능이 상당 부분 바뀌어야 한다면 다 지우고 하얀 도화지에서 밑그림을 그리는 것이 나을 수도 있습니다. 


하지만 어느 정도 재사용이 가능한 수준이라면 리버스를 통해 설계서의 일부분을 자동으로 생성하는 것이 효율적입니다. 궁극적으로는 MDD 개발 방식을 적용하여 완벽히 표준화된 모델을 보유한다면 재사용률이 극대화될 것입니다.

 

 

설계서인 모델을 통하여 소스 코드를 100% 자동 생성하고, 이후 모델로 유지 보수를 하는 것이 불가능하다고 생각했던 것이 MDD를 통해 현실화되었습니다. 지금은 기존의 소스 코드로부터 설계서인 모델을 자동 생성하는 단계에 이르렀습니다. 


소프트웨어 개발 과정에서 단순 반복적인 작업은 앞으로도 계속해서 자동화될 것입니다. 하지만 자동 생성된 모델을 보면서 고객과 의사소통하고, 무엇을 버리고 변경할지, 어떠한 기능을 신규로 추가할지 설계하는 것은 인간의 창조적인 영역으로 그 가치가 더욱 부각될 것입니다. 


프로그래머가 만든 인공지능이 프로그래머를 위협하고 있는 시대이지만, 자동화를 적극적으로 이용하여 한발 앞서 나가는 선견지명이 필요한 시점입니다.


글 ㅣ LG CNS MDD기술팀


['최첨단 소프트웨어 개발 방식 MDD' 연재 현황]


* 해당 콘텐츠는 저작권법에 의하여 보호받는 저작물로 LG CNS 블로그에 저작권이 있습니다.

* 해당 콘텐츠는 사전 동의없이 2차 가공 및 영리적인 이용을 금하고 있습니다.



  1. UML(unified modeling language): 요구분석, 시스템설계, 시스템 구현 등의 시스템 개발 과정에서, 개발자간의 의사소통을 원활하게 이루어지게 하기 위하여 표준화한 모델링 언어이다. [두산백과] [본문으로]
  2. 순공학: 소프트웨어 시스템을 개발하기 위하여 분석, 설계, 코딩, 테스트, 유지 보수 등의 절차를 밟아가며 개발하는 공학. 반대 용어는 역공학(Reverse Engineering)이다. [컴퓨터인터넷IT용어대사전] [본문으로]
저작자 표시 비영리 변경 금지
신고
Posted by IT로 만드는 새로운 미래를 열어갑니다 LG CNS
위로