IT Solutions/MDD

프로그래밍 언어 없이도 프로그래밍이 가능한가요?(2편) - MDD(Model Driven Development), 모델 기반 개발 방식 -

2014.10.08 10:13

지난 시간에서 모델 기반 개발 방식(MDD: Model Driven Development)이 무엇인지 그 개념을 알아보았습니다. 이번 시간에는 간단한 예제 모델을 통해 MDD를 적용하는 방법과 그 핵심 기술이 무엇인지 함께 살펴보겠습니다.


프로그래밍 언어 없이도 프로그래밍이 가능한가요?(1편) : http://blog.lgcns.com/573

 

우리가 인터넷 뱅킹으로 송금을 할 때 한 번에 송금할 수 있는 금액의 한도가 정해져 있습니다. 여러분이 알고 있는 ‘이체 한도’입니다. 일정한 금액 내에서 이체할 수 있는 시스템은 인터넷 뱅킹 개발에 꼭 필요한 비즈니스 처리 흐름 중 하나이죠. 이는 이체 한도를 검증하는 로직(Logic)을 통해 구현되는데, 이 역시 MDD로 개발이 가능합니다. 아래 모델이 바로 MDD로 구현한 이체 한도 검증 로직입니다.


<MDD로 설계한 이체 한도 검증 모델>


‘이체 한도 검증’은 모델에서 하나의 오퍼레이션으로 설계할 수 있습니다. 이 오퍼레이션은 ‘당행이체Pbi(Process business interface)’라는 프로세스 컴포넌트에 속해 있으며 컴포넌트의 계층 구조가 그림의 왼쪽과 같이 패키지로 보입니다. 이체 한도 검증 오퍼레이션을 실행할 때 필요한 입력값과 결과값은 매개변수(Parameter)에 담아서 주고 받게 되는데요. 변수에서 사용하는 데이터의 유형은 DTO(Data Transfer Object)라는 모델 구성 요소에 정의합니다. 예시에서는 이체금액과 전자금융 ID 2개를 이체 한도 검증 입력 시 필요한 변수로 정의하였습니다.


이체 한도 검증 오퍼레이션은 다른 오퍼레이션과 상호작용을 하면서 필요한 정보를 주고 받습니다. 이체 서비스를 이용하는 사람들은 자신이 한번에 이체하고자 하는 금액의 한도를 인터넷 뱅킹 서비스를 계약할 때 미리 설정합니다. 이 한도 정보가 이체서비스라는 데이터 저장소에 들어 있는데요. 이 정보를 ‘이체서비스Ebi’라는 엔터티 컴포넌트(Entity Component)의 이체 서비스 조회 오퍼레이션을 통해 제공 받을 수 있습니다.

 

LG CNS MDD에서 비즈니스 로직을 처리하는 컴포넌트는 프로세스 컴포넌트(Pbi)로, 데이터 정보를 처리하는 컴포넌트는 엔터티 컴포넌트(Ebi)로 구분하여 하나의 컴포넌트가 자신의 역할에 맞는 하나의 기능만 처리하도록 설계합니다. 그리고 여러 컴포넌트를 조립하여 하나의 업무 기능을 구현합니다. 


예시에서 당행이체Pbi와 같은 프로세스 컴포넌트는 이체서비스Ebi와 같은 엔터티 컴포넌트와 상호작용하면서 비즈니스에 필요한 로직을 구현하는데요. 이러한 상호작용의 동적 흐름을 UML(Unified Modeling Language)의 시퀀스 다이어그램으로 표현하고 있습니다.



이체 한도 검증 시퀀스 다이어그램의 윗부분에서 ① 파란색 네모 상자로 표현된 것은 상호작용에 참여하는 여러 객체입니다. 당행이체Pbi, 이체서비스Ebi는 앞에서 설명한 기능별 컴포넌트입니다. code와 excp 등 Code 계열의 라이프라인은 뒤에서 설명할 논리표현식을 작성하는 특별한 객체입니다. 


이체 한도 검증 오퍼레이션의 전체 흐름은 다음과 같습니다. 


이체서비스Ebi 컴포넌트에서 ③ 1.2: 이체서비스조회 오퍼레이션을 통해 1회 이체 한도를 구합니다. 그런 다음, 이체 한도 검증 오퍼레이션의 입력값으로 받은 이체금액과 비교하여 이체하고자 하는 금액이 한도보다 큰 경우에는 ⑦ 1: 이체한도검증 오류 처리를 하고, 같거나 작은 경우에는 ⑧ 1: 정상결과 셋팅을 해줍니다.


처리 로직을 좀더 자세히 살펴보겠습니다. 시퀀스 다이어그램에서 ② 1: 이체한도검증, ③ 1.2: 이체서비스조회와 같이 컴포넌트를 향하도록 그려진 화살표는 오퍼레이션의 호출을 의미합니다. UML로 오퍼레이션을 호출하거나, 이미지 안 검정색 네모 상자로 그려진 대체결합단편을 통해 if(위) ~ else(아래)의 분기 처리는 가능하지만, 변수 값 할당이나 비교 연산 등의 세부 로직을 표현할 수 없습니다. LG CNS MDD에서는 이것을 ‘논리표현식’이라는 자체 개발 언어를 통하여 모델에 표현하고 있습니다.


예를 들어, ④ 1.1: 이체서비스조회 입력값 설정의 ⑤ [i이체서비스조회].[전자금융ID] = [i이체한도검증].[전자금융ID];와 같은 변수 할당 구문이나  대체결합단편의 조건식에서 사용된 ⑥ [r이체서비스조회].[일회이체한도] < [i이체한도검증].[이체금액]과 같은 비교문 등 UML로 표현할 수 없는 구문을 ④ Code 계열의 라이프라인 화살표 안이나 ⑥ 결합단편의 상호작용 제한조건에 모델링한 것이 바로 논리표현식입니다. ⑦ 1: 이체한도검증 오류와 ⑧ 1: 정상결과 셋팅 안에 들어가는 내용도 논리표현식으로 작성합니다.


*논리표현식은 LG CNS가 자체적으로 MDD에서 사용하기 위해 개발한 언어로서 DSL(Domain Specific Language)이라 불립니다. 그 표현법은 일반적인 프로그래밍 언어의 문법에 비해 간단할 뿐만 아니라 한글로 작성합니다. 또한, 한글로 작성한 내용은 소스 코드 생성시 용어사전에 등록된 영문으로 자동 변환됩니다.


 

전통적인 방식의 MDD는 클래스와 오퍼레이션 선언, 호출 관계만을 표현하는 수준의 일부 소스 코드만 생성하였는데요. LG CNS의 MDD는 이와 달리 논리표현식으로 100% 완전한 소스 코드를 생성합니다. 또한, DevOn MDA의 모델 검증 기능 등을 이용해 기술적으로 모델의 품질을 보증하고, 소스 코드 템플릿과 용어 사전을 활용하여 표준화된 소스 코드를 생성할 수 있습니다.


<DevOn MDA의 모델 검증 기능>


설계를 마치면 자동으로 생성되는 소스 코드를 통해 테스트를 진행할 수 있습니다. 이때 화면(단말)과 같은 사용자 인터페이스가 없어도 거래 테스트 편집기를 통해 간편하게 필요한 입력데이터를 넣고 수행 결과를 확인할 수 있습니다. 수행 결과에서 오류가 발생할 경우에는 소스 코드가 아닌 모델을 수정합니다.

 

<MDD로 자동 생성한 이체 한도 검증 소스 코드>


 

<이체 한도 검증 오퍼레이션의 거래 테스트 편집기>

 

LG CNS MDD에서는 간단한 오퍼레이션 호출 관계만 설계하여도 실행이 가능한 소스 코드가 생성됩니다. 그래서 설계 초기 단계부터 테스트를 진행하면서 조기에 결함을 발견하고, 완성도 높은 소프트웨어를 만들 수 있습니다. 또한, 한글로 작성하는 모델을 통해 고객 또는 개발 팀원 간의 의사소통을 원활하게 할 수 있고, 그림으로 표현된 모델은 영문으로 된 소스 코드보다 업무 파악이 용이하다는 장점이 있습니다. 뿐만 아니라, 모델로부터 각종 산출물을 자동으로 생성하는 기능으로 개발자들의 산출물 작성 부담을 줄일 수 있고, 고객에게는 소스 코드와 일치된 요구에 맞는 다양한 산출물을 제공할 수 있습니다.


<MDD로 자동 생성한 이체 한도 검증 컴포넌트 명세서>


지금까지 살펴본 인터넷 뱅킹 시 사용되는 이체 한도 검증 로직 개발 과정을 통해 LG CNS MDD의 주목할 한만 장점들을 만나보았습니다. 개발자들이 프로그래밍 언어 개발 방식이나 소프트웨어 하부에서 프레임워크가 처리해 주는 기술적인 부분에 대해 신경 쓰지 않고 비즈니스 업무 로직 설계에 자신의 역량을 집중할 수 있다는 것인데요. 소프트웨어 개발을 위해서는 프로그래밍 언어 습득이 당연시되던 상식이 깨진 것입니다. 좋은 아이디어가 있지만 기술적인 지식 부족으로 도전해보지 못한 분이라면 LG CNS MDD를 활용해 새로운 방식의 프로그래밍을 체험해보시기 바랍니다.


● LG CNS MDD에 대해 자세한 내용은 :  http://mdd.lgcns.com


LG CNS 금융솔루션팀


Posted by IT로 만드는 새로운 미래를 열어갑니다 LG CNS

댓글을 달아 주세요

  1. Favicon of https://zoahaza.net BlogIcon 조아하자 2014.10.10 09:15 신고  댓글주소  수정/삭제  댓글쓰기

    프로그래밍 언어 없이도 프로그래밍이 가능하면 사회에 주는 영향이 좋지만은 않을듯... 기존에 프로그래밍으로 먹고살던 사람은 뭘로 먹고사나요? ㅠㅠ

    • Favicon of https://zoahaza.net BlogIcon 조아하자 2014.10.10 15:15 신고  댓글주소  수정/삭제

      정성스러운 댓글이네요^^ 성의있는 답변 감사합니다!

    • 장경희 2014.10.10 15:40  댓글주소  수정/삭제

      안녕하세요? 이 글을 작성한 LG CNS 장경희입니다.
      우리가 일하는 방식을 MDD로 바꾸고자 할 때, 고려해야 할 정말 중요한 이야기를 지적해주셨습니다. 이 토픽만으로 하나의 글을 쓸 수 있을 만큼 많은 것을 생각하게 하는 주제입니다.

      혹시 찰리와 초콜릿 공장이라는 영화를 보셨나요? 주인공인 찰리의 아버지는 치약공장에서 손으로 치약 뚜껑을 돌려닫는 일을 하다가 자동화 기계가 들어오면서 일자리를 잃고 맙니다. 우리나라에서도 비슷한 예로 고속도로 톨게이트에 하이패스가 도입되면서부터, 요금소 수납직원의 인력감축에 대한 대책마련을 촉구하는 기사글이 꾸준히 나오고 있습니다.

      이렇게 사람이 수작업으로 수행하던 일(프로그래밍)을 기계(MDD)가 대신하게 되면 실업을 유발한다고 생각할 수 있습니다. 하지만 실업은 실제로 그 사람들의 직무를 전환하지 않고 정책적으로 '해고'하고자 할 때 일어나는 것입니다.

      저희 회사에서 MDD를 활성화시킨 계기 중 하나가 프로그래밍 개발자의 '노령화' 때문입니다. 단순 프로그래밍 지식만으로는 금융SI와 같은 프로젝트에 참여하기 어렵습니다. 해당 업무에 대한 지식도 같이 필요하지요. 그런데 업무적인 지식을 오랫동안 쌓아온 '나이 많은' 개발자들은 Java와 같은 최신 프로그래밍 언어를 습득하기가 어렵습니다. 반대로 Java를 잘 아는 '젊은' 개발자들에게 금융 업무를 잘 알게 만드는것도 쉽지 않습니다. 둘 다 잘 하는 사람들로만 프로젝트를 할 수 있다면 얼마나 좋을까요?

      우리는 특정 프로그래밍 언어에 국한되어 개발하는 것보다 더 나은 방식이 무엇일까 고민하였습니다. 그리고 사람들의 머릿속에서 변하는 것과 변하지 않는 것이 무엇일지 생각하였죠. 기술은 끊임없이 변화하고 진화합니다. 그러나 업무 자체인 비즈니스 로직은 잘 변하지 않습니다. 사람들을 기술로부터 독립시켜주고 비즈니스 로직에 집중하게 함으로써 진정한 업무 전문가로 성장시켜주는 것이 바로 이 MDD라 생각합니다. 또한 과거로부터 축적되어 머릿속에만 남아있는 업무 지식은 '모델'이라는 유형의 것으로 자산화시켜 재사용성을 높였습니다. 반대로 나는 프로그래밍이 너무 좋고 기술에만 집중하고 싶다면, DevOn MDA나 프레임워크를 개발하는 것과 같은 기술 전문 분야에서 일을 하면 됩니다.

      찰리의 아버지는 나중에 자신을 교체했던 기계 수리공으로 다시 치약공장에 취직합니다. 저희 회사도 MDD로 인해 일하는 방식이 변화는 것을 예측하고 여러가지 교육 프로그램을 만들어서 개발자들이 쉽게 적응할 수 있도록 체계적인 전환 교육을 실시하고 있습니다.

      MDD를 하게 된다면, 기존에 '프로그래밍으로 먹고 살던 사람'들이 마치 손으로 빨래하다가 세탁기를 쓰게 됨으로써 여유로워진 시간에 보다 값진 일을 할 수 있다고 느낄 수 있을 것입니다. 그것이 바로 모델링(설계)인 것입니다.

      더 궁금하신 내용 있으면 댓글이나 이메일 주세요. ^^
      jangkh@lgcns.com

  2. 동숭 2014.10.13 10:29  댓글주소  수정/삭제  댓글쓰기

    포스트도 유익했지만, 댓글이 더 많이 와닿습니다.

    MDD 가 말씀하신것 처럼 순기능만 했으면 좋겠네요

    잘보았습니다. 감사합니다.

  3. 2015.02.01 18:22  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

위로