DA# Macro(1): DA#, DA# API, DA# Macro (매크로) 개요

이번 글은 국산 데이터 모델링 도구인 DA#을 소개하고 DA# v5부터 제공되는 API와 이를 활용하여 개발한 도구인 DA# Macro(매크로)에 대해 살펴본다.

1. DA# Macro (매크로) 개요

1.1. 데이터 모델링 도구 DA#

DA#은 ERD(Entity Relationship Diagram)로 표현되는 데이터 모델을 만들고 관리할 수 있는 국산 소프트웨어이고, 개발사는 엔코아(https://en-core.com/)이다.

DA# 홈페이지: https://www.en-core.com/solution/solution2

DA# 화면은 다음과 같다. DA#에 포함되어 있는 예시 모델을 열어 놓은 화면이다.

데이터 모델링 도구 DA# 화면
데이터 모델링 도구 DA# 화면

DA#의 주요 기능은 다음과 같다.

데이터 모델링 도구 DA# 주요 기능
데이터 모델링 도구 DA# 주요 기능

주요 기능 중 API 지원에 대한 내용이 있다.

DA# 주요 기능중 API 언급
DA# 주요 기능중 API 언급

DA#은 v5.0(2016년 출시)부터 API를 제공한다. 참고로, 외산 데이터 모델링 도구인 ERwin, PowerDesigner도 역시 API를 제공하고 있다.

1.2. DA# API

1.2.1. 데이터 모델링 도구에 API가 필요한 이유

데이터 모델링 도구는 기본적으로 2차원 평면에 사각형의 상자를 배치하고 상자의 내용을 채우고 상자들을 선으로 연결하는 그리기 도구이다. 키보드보다는 마우스를 많이 사용할 수밖에 없는 특징이 있다.

  • 생산성 측면의 이유
    • 마우스 작업은 키보드 작업보다 생산성이 떨어진다. 마우스로 하는 작업은 자동화하기가 어려워서 비슷한 작업을 매번 수작업으로 처리해야 한다. (예: 리버스 엔지니어링, 엔터티를 다이어그램에 배치(위치 이동), 여러 모델의 엔터티명/속성명 일괄 변경 등)
    • 자주 반복되는 작업을 도구로 만들어 사용하면 작업에 걸리는 시간을 줄일 수 있고, 사람이라면 누구나 할 수 있는 실수를 줄이거나 아예 제거하여 품질을 높일 수 있다.
    • 이런 도구를 제작하는데 데이터 모델링 도구에서 제공하는 API가 필요하다.
  • 건강 측면의 이유
    • 마우스를 많이 사용하면 손목 터널 증후군 증상이 나타날 수 있다. 심한 경우 손목과 손가락이 저리고 통증이 심해서 업무를 할 수 없을 정도이다.
    • 사람에 따라 느끼는 통증의 정도는 많이 다르지만, 내 경우는 심하게 나타나는 편이다.
    • 통증을 조금이라도 줄이려면 마우스 사용을 최소화해야 하고, 이 경우 데이터 모델링 도구의 API를 활용하면 도움이 된다.

특히, 데이터 모델 파일이 한 두개가 아닌 수십~수백 개 또는 그 이상인 경우에 일괄로 정보를 취합 또는 모델의 일부 정보를 변경하려는 경우 API 활용이 꼭 필요하다.

1.2.2. DA# API 개념과 Object Model

API(Application Programming Interface)의 위키백과 정의는 다음과 같다.

API(Application Programming Interface 애플리케이션 프로그래밍 인터페이스[*], 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.

* 출처: https://ko.wikipedia.org/wiki/API

간단히 말하면, API는 한 응용 프로그램을 다른 응용 프로그램들에서 제어할 수 있는 방법이다.

* 참고 유튜브 영상: DA# 5의 API 그리고 편의기능 – DA# 5 런칭세미나(https://www.youtube.com/watch?v=iGS7B-hJE-4)

DA# API 매뉴얼에 있는 개념도는 다음과 같다.

DA# API 개념도
DA# API 개념도

아래는 DA# API의 최상위 개체인 Application의 도식이다.

DA# API: Application
DA# API: Application

엑셀 Object Model과 유사하게 DA# API에서도 Object Model 개념이 있다.

참고: 엑셀 VBA 강좌(3): 엑셀 Object Model

DA# API의 전체 Object Model은 다음과 같다. (공식 매뉴얼에는 없는 내용이고, 직접 정리하였다.)

DA# API Object Model
DA# API Object Model

다음 내용을 참고하기 바란다.

  • 위 그림에서 배경색이 짙게 표시된 개체는 collection 개체이다.
  • 초록색 화살표는 동일 개체 유형을 가리킨다. Object Model의 계층을 구성하는 개체 중 일부는 다른 계층의 하위에도 나타난다. (대상 개체: Models, Entitys, Attributes, Relations, Tables)
  • UDPS는 이 글을 작성하는 현재 DA# 버전(v5.1.0.4)에서는 member 변수로 제공되지않고 함수를 통해 접근할 수 있다.

1.3. DA# Macro (매크로) 도구 소개

DA# Macro (매크로)는 DA# v5에서 제공하는 API를 활용하여 데이터 모델에 일괄 작업을 실행할 수 있는 도구이다. 엑셀 VBA로 구현되어 있고 DA# v5의 API를 사용한다.

여러 프로젝트에서 데이터 모델과 관련된 작업을 수행하면서 반복되는 패턴의 작업(Get, Set)과 가장 마우스를 많이 사용하는 작업(Reverse)의 생산성과 품질을 높이기 위하여 직접 개발하였다. 2018년 4월에 v1.0을 만들었고, 최근 버전은 2021년 1월 12일 v2.11 이다.

버전 이력은 다음과 같다. 세번째 항목인 DA# Version은 그 버전의 Macro가 정상 동작하는 DA# Version을 의미한다.(해당 version 배포시 확인됨)

일자
(Version)
내용DA# Version
2021-08-14
(v2.12)
– Github 공개용도로 라이선스 내용 일부 수정
– 각 시트 기능 하단 메시지 삭제(버튼을 클릭하기 전에 DA#에서 Modal 창을 띄위놓으면 성능이 크게 향상됨(예: 모델 새로 만들기 창))
  –> DA# v5.0.19.32 이후 API 동작시 내부에서 Modal 창을 띄워 성능이 향상되었고 메시지 안내가 필요 없어짐
[Fix] 엔터티, 속성 Property Get 방법을 array 접근에서 개별 property 접근으로 변경(v1.32 변경 원복)
  – array 접근시 일부 property 값을 가져오지 않는 문제가 있어 원복함
[Fix] 속성 정의를 엔터티 첫 속성만 가져오는 버그 수정
5.0.20.2 이상
2021-01-12
(v2.11)
[Fix] Reverse 입력파일 쓰기 가능하게 읽기, 다 읽고 닫지 않기 옵션 추가5.0.20.2 이상
2021-01-12
(v2.10)
[Add] Reverse 세부 기능 추가
  – 엔터티 그룹명 텍스트 박스 추가 (글꼴명, 글꼴 크기는 설정할 수 없음)
     (텍스트 박스를 추가하는 API는 v5.0.20.2에서 처음 제공되므로 버전을 잘 확인하여 사용할 것!)
5.0.20.2 이상
2021-01-10
(v2.00)
[Add] Reverse 기능 추가: 엑셀 파일로 작성된 테이블 정의서, 컬럼 정의서로부터 DA# 모델 생성
  – 여러 모델을 한번에 Reverse (각 모델별 DBMSType, 정의 설정 가능)
  – 테이블의 주제영역을 설정하여 주제영역별로 나누어서 Reverse
  – 엔터티 그룹 지정으로 한 주제영역내에서 그룹별로 한 위치에 묶어서 배치
  – 엔터티 그룹명 텍스트 박스 추가는 나중에…(현재 텍스트 박스 생성 API가 제공되지 않음)
  – UDP 설정은 이 버전에서는 포함하지 않음 (향후 필요시 포함)
[Fix] 데이터 첫행의 Named Range를 Header로 변경(첫행 삭제하는 경우 오류 방지)
5.0.19.32 이상
2020-12-05
(v1.32)
[Enhance] 엔터티, 속성 Property Get/Set방법을 개별 property 접근에서 array 접근으로 변경
  – 최소 2배에서 3배 성능 향상됨
  – Array 접근 방식으로 제공되지 않는 일부 Property 제외 (예: 속성-DomainName, UDP)
[Add] Attribute(Set) 항목에 ReverseTable, ReverseColumn, ReverseType, ReverseLength 추가
5.0.19.32 이상
2020-08-06
(v1.31)
[Fix] 엔터티, 속성 Property중 여러 행을 입력할 수 있는 property의 행분리 문자 처리
  – 대상 Property: 엔터티-정의, 데이터 처리 형태, 특이사항, Note, 속성-정의
  – 변경전: 엑셀에 엔터티 정의를 여러 행으로 입력해도 DA#에 반영된 결과는 하나의 행으로 나옴
  – 변경후: 여러행을 정상적으로 반영
[Fix] Entity(Get), Attribute(Get) sheet에 1개 행만 있는 경우 CopyToSet 버튼 오류 수정
5.0.19.12 이상
2020-03-01
(v1.30)
[Fix] 변경된 Property 처리 (Model.FilePath –> Model.GetFilePath())
[Fix] 지정한 UDP가 모델에 없을 경우 오류 처리 추가
5.0.19.12 이상
2018-11-10
(v1.23)
[Fix] Attribute(Set)에서 Variant Array를 사용하도록 변경(Transpose 사용하지 않음)5.0.13.7 이상
2018-11-07
(v1.22)
[Fix] 주제영역별 엔터티, 속성 목록 추출에서 모델별 엔터티, 속성 목록 추출로 변경
[Fix] Variant Array의 Transpose 실행할 때 Type Mismatch 오류 발생하여 Range.Offset 접근으로 변경
5.0.13.7 이상
2018-09-09
(v1.21)
[Fix] Attribute 목록 Load 방식 변경(Application.WorksheetFunction.Index –> Variant Array로 직접 읽기)
[Fix] GetModel 변경: 작업 대상 모델이 이미 열려 있는 경우 다시 열지 않도록 처리(Model.FilePath Property 이용
5.0.13.7
2018-09-04
(v1.20)
[Fix] Range.Offset(…) 직접 접근을 Variant Array로 변경하여 성능 향상
[Add] Get/Set 항목 선택기능 추가
[Add] UDP Get/Set 기능 추가
[Add] 열려있는 모델을 목록에 추가하도록 기능 추가 (저장&닫기 여부 선택가능)
5.0.13.4
2018-04-14
(v1.10)
[Fix] Range값의 접근을 Range.Text에서 Range.Value2로 변경
[Fix] Set에서 Range값이 VLOOKUP 결과 #N/A 등의 유효하지 않은 값일 때 skip 하도록 수정
[Fix] Attribute(Get)의 추출 항목 순서 조정(테이블명과 속성명 위치 바꿈)
[Fix] Attribute(Set)의 정의 항목 set되지 않는 버그 수정
[Add] Get/Set 버튼 클릭시 “계속 진행하시겠습니까?” 메시지로 확인
[Add] 성능향상을 위하여 Undo/Redo 해제(Model.ActiveAction(False))
[Add] Set에도 ProgressBar 적용
[Add] Copy to Set 버튼 추가
5.0.11.8
2018-04-08
(v1.00)
최초 배포(Entity/Attribute Get/Set 기본 기능 제공)5.0.11.8

이 글(엑셀 VBA 강좌(10): 엑셀 VBA로 개발하여 사용중인 도구)에서 다음과 같이 소개하였다.

국산 데이터 모델링 도구인 DA# 활용도를 높여주는 Macro 도구이다. DA#은 ‘일괄편집’이라는 훌륭한 기능을 제공하고 있는데, 하나의 모델 단위로만 가능하다. 이 도구는 엔터티/속성 정보 가져오기(Get), 수정하기(Set), Reverse 기능을 한 번에 여러 모델에 대해 처리할 수 있도록 하였다.

예를 들어, 100개의 데이터 모델 파일이 있을 때 전체 데이터 모델에 관리되는 엔터티명 앞이나 뒤에 일괄적으로 특정 값(시스템명 또는 업무명, 사용여부 등)을 더하여 기존 명칭을 변경하려는 경우를 가정해 보자.


“일괄편집”기능을 이용하더라도 일일이 각 데이터 모델 파일을 열고 “일괄편집” 화면에서 작업 후 저장, 닫기, 그리고 그 다음 파일에 대하여 반복작업을 실행해야 한다.

이 작업의 대상이 많지 않고 단 한 번만 실행하는 작업이라면 수작업으로 처리할 수 있겠으나, 대상이 많고 여러 번 실행해야 하는 작업이라면 수작업으로는 생산성이 떨어질 수밖에 없다.


데이터 모델을 Reverse하여 생성하는 기능 또한 데이터 모델이 여러 개인 경우 각 모델별로 리버스 설정과 실행을 수작업으로 반복 처리해야 한다. 데이터 모델이 수십 개 또는 수백 개 이상일 때 많은 수고가 필요하다.


이 경우에 이 글에서 소개하는 DA# v5 Macro 도구가 도움이 될 수 있다.

DA# Macro 실행 화면은 다음과 같다.

DA# Macro: Entity(Get)
DA# Macro: Entity(Get)
DA# Macro: Entity(Set)
DA# Macro: Entity(Set)
DA# Macro: Attribute(Get)
DA# Macro: Attribute(Get)
DA# Macro: Attribute(Set)
DA# Macro: Attribute(Set)
DA# Macro: Reverse
DA# Macro: Reverse

DA# Macro의 주요 기능은 다음과 같다.

  • 공통기능
    • Select Model 버튼: 모델 파일(n개 가능) 선택
    • Clear List 버튼: 현재 목록을 초기화
  • Get Entity/Attribute
    • Get Entity/Get Attribute 버튼: 선택한 모델들의 정보를 엑셀로 추출. 선택한 모델들을 열고, 정보를 추출하고 닫고, 다음 모델을 순차적으로 반복함
    • Copy to Set 버튼: 현재 목록에서 Set 기준값을 Set sheet로 복사(주제영역명 제외)
  • Set Entity/Attribute
    • Set Entity/Set Attribute 버튼: 엑셀 목록의 정보를 선택한 모델에 반영. 선택한 모델들을 열고, 반영하고, 저장하고, 닫고, 다음 모델을 순차적으로 반복함(엑셀 목록의 값이 비어 있는 경우 DA# 모델의 해당 property값을 변경하지 않음)
    • Set 옵션
      • 기준값: 엑셀 목록과 DA# 모델의 정보를 비교할 기준값
      • Append Mode: DA# 모델의 정보항목 현재 값에 엑셀 값을 Append 할지 여부
  • Reverse
    • Table, Column, FK(선택) 목록 엑셀파일로부터 DA# 모델 생성
      • 여러 모델, 여러 주제영역을 한 번에 처리
      • 핵심기능: 한 주제영역내 엔터티 그룹별로 diagram에 배치

1.4. DA# Macro 다운로드

아래 github repository에서 확인할 수 있다.
https://github.com/DAToolset/DA-Macro

또는, 이 URL에서 직접 다운로드할 수 있다.
https://github.com/DAToolset/DA-Macro/raw/main/DA%23%20Macro_v2.12_20210814.xlsm


여기까지 DA#, DA# API, DA# Macro 도구에 대해 살펴보았다. 다음에는 DA# Macro의 기능에 대해 살펴보겠다.


<< 관련 글 목록 >>

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

ko_KR한국어