제공 : 한빛 네트워크
저자 : Jeff Richley
역자 : 김탁용
원문 : GMF: Beyond the Wizards
오늘날, 사용자들은 개발환경에서 데이터와 환경설정, 그리고 시스템의 프로세스까지도 비쥬얼하게 보여주길 바란다. 그래서 비즈니스 전문가들과 요구사항을 비쥬얼하게 이야기할 수 있기 위해 툴들을 사용한다. UML에 대해 생각해보라. 그것은 소프트웨어 요구사항과 디자인에 대한 커뮤니케이션을 단순화시키기 위해 복잡한 데이터 집합을 비쥬얼하게 표현한다. 이처럼 업무 흐름이나 데이터 마이닝, 서버 관리, 그리고 많은 다른 비즈니스 프로세스들을 표현하기 위한 잠재성 있는 비쥬얼 툴들이 있다. 이런 툴들은 생산성을 높이고, 비용을 감소시키며. 이는 분명히 win-win 상황이다.
역사적으로 이런 툴들을 작성하는 것은 매우 시간소비적이고 보통사람들보다 뛰어난 GUI 구루들에게나 맡겨진 일이었다. 그러나 그 장벽이 무너졌다. 이클립스 Graphical Modeling Framework(GMF)를 연구한 이들에 의해서 말이다.
아마 당신은 "GMF가 무엇이며, 날 위해 무엇을 할 수 있는가?"에 대해 궁금할 것이다. GMF는 환경파일들(도메인 모델, 그래픽 정의, 도구 정의)을 모두 믹서기로 돌려서 슉- 하고 사라졌다 나타나는 마술처럼 전문적인 이클립스 플러그인을 만들어내는 프레임워크다. 디자인한 대부분의 기능들을 만들어낼 뿐만 아니라 인쇄, 드래그-앤-드랍, 이미지 저장, 커스터마이징과 같은 여러 보너스들도 제공한다. 일단 플러그인과 편리한 기능들 모두를 완성시키고 나면, 당신의 사용자들에게 이것을 널리 퍼뜨릴 수 있다. 클라이언트들의 업데이트를 유지하는 악몽으로부터 벗어나게 해줄 배포 사이트를 만들기 위한 이클립스 플러그인 개발 환경(PDE)의 기능들도 있다. UI 프로그래밍을 해봤다면, 코딩을 요하는 얼마나 많은 기능(이라고 쓰고 "버그"라고 읽음)들이 제거되는지를 알 것이다. MVC 셋업과 레이아웃 관리, 프로퍼티 리스너들, 이런 것들 모두가 만들어진다. 평범하고 따분한 작업들이 처리된다면, 당신은 프로젝트에서 재미있고 창조적인 업무들에 집중할 수 있을 것이다.
튜토리얼에서는 SDK의 일부로 제공되는 위저드로 GMF와 함께 뛰어드는 방법을 보여줄 것이다. GMF 애플리케이션을 개발하는데 사용되는 위저드들과 대쉬보드는 매우 강력하다. 데이터 모델을 제외하고 모든 환경 파일들이 위저드로부터 만들어 진다. 나는 위저드를 선호하지만 "이해하지 않은 것은 만들지 말라"란 모토를 갖고 있다. 그럼, 위저드로 감싸진 내부, 특히 ecore, gmfgraph, gmftool, gmfmap에 대해 살펴보도록 하자.
ecore/genmodel 파일들은 대부분의 이클립스 기반 애플리케이션을 개발할 때 시작이 되는 도메인 모델이다. EMF 개발 패턴의 기본은 도메인 객체를 모델링하고 EMF가 빈들과 이를 연결하는 코드를 포함해 전체 모델의 코드 기반을 만들어내게 하는 것이다.
그래픽과 도구 정의들은 직관적이다. 그래픽 쪽은 도메인 모델로부터 클래스들을 그리기 위해 다이어그램에서 사용될 gmfgraph 파일들에 있는 그림들의 목록이다. gmftool파일은 도구 팔레트와 버튼 툴팁으로 표시하려는 텍스트들을 정의한 도구들 정의다.
마지막 단계는 gmfmap 파일을 만들어 이 모든 부분들이 어떻게 함께 동작하는지를 GMF에 말해주는 것이다. 이는 도구가 선택될 때 어떤 액션을 취할지, 어떤 클래스들을 만들지, 클래스들을 다이어그램에 추가할 때 어떤 그림을 렌더링할지를 GMF에 설명하는 다른 세 개의 환경파일들을 연결한다. 모든 것이 서로 연결되면 gmfgen 파일과 애플리케이션을 만들고, 이클립스의 테스트 인스턴스를 실행해 새 애플리케이션을 테스트한다.
지금까지 GMF 애플리케이션이 무엇이고 그것들을 만드는 단계들의 일반적인 설명을 했다. 이제 커피샵 관리를 모델링하는 예제 애플리케이션을 살펴보자. 초기 기능은 매니저와 직원들을 추가하고 매니저와 그가 책임지는 직원들을 결합하는 것이다. 이것은 정말 편리한 작은 툴이지만 샵에 커피 기계들을 추가할 수 있다면 더 좋을 것이다. 결국 이것은 커피샵이고 우리는 따뜻한 갈색 물을 만들 필요가 있다.
자, 원본의 플러그인을 보기 위해 이클립스를 실행시켜보자. 우리는 커피 기계를 추가할 것이다. 프로젝트들을 이클립스에 추가시키고 예제 애플리케이션을 실행시킨다. (그림1)
[그림 1] 이클립스 플러그인 실행하기
File->New->Other->Examples->Coffee Diagram을 선택해 새 커피샵 다이어그램을 만든다. 이제 작업을 할 새 다이어그램이 생겼다. (그림 2) 계속해서, 하나 혹은 둘의 매니저를 추가하고, 직원 몇 명을 추가한다. 그리고 매니저와 직원들을 연결한다. 다이어그램을 만들었다면 이를 저장한다. - 실제로, 커피머신에서 연결하는 나중을 위해 보존하라.
[그림 2] 예제 커피샵 다이어그램
초기 셋업과 작업을 했으니, CoffeeMachine 클래스의 인스턴트를 생성하는 기능을 추가해보자. 생성 작업을 위해서는 다음 단계를 거친다.
- 디스플레이를 위한 그림을 정의한다.
- 도구 팔레트에 사용할 생성 도구를 정의한다.
- 생성 도구와 그림들, 그리고 뒤쪽의 모델 클래스를 맵핑한다.
화면용 그림 정의하기
상점에서 사용하는 CoffeeMachine을 나타낼 그림들을 만드는 것을 우선 보자. coffee.gmfgraph 파일을 열고 내부에 뭐가 있는지 살펴 본다. (그림 3) 이해해야 할 네 가지 타입의 상속 요소들이 있다.
- Figure Gallery : 애플리케이션을 위한 도형들
- Nodes : 도메인 모델의 그래픽 표현
- Diagram Labels: 사용자에게 유용한 피드백을 제공하는 노드의 라벨들
- Connections: 그래픽 요소들 간의 관계를 나타내는 선들
[그림 3] coffee.gmfgraph 파일 뷰
다이어그램을 정의하는 첫 번째 단계는 사용할 에디터의 그림을 만드는 것이다. Figure Gallery에서 오른쪽 클릭을 하고 New Child->Rectangle (또는 선호하는 다른 도형)을 선택한다. 새롭게 만들어질 Rectangle을 선택하고 Properties 뷰를 보자. 여기서 채워야 할 하나의 아이템은 Name 필드이다. 엘리먼트들에 명명을 하는 것에 대해 조언을 하자면 : "쉽게 구별할 수 있는 이름을 붙여라." 내가 했던 한 가지 실수는 다른 엘리먼트와 매우 비슷해 보이는 모호한 이름을 주었던 것이다. 일관성을 유지한다면, 맵핑 단계에서 매우 행복할 것이다. 내가 일반적으로 사용하는 이름 규칙은
Figure 또는 Diagram이다. 여러분에게 맞는 방법을 선택하되 하나를 정하면 그를 고수해라.
좋은 사용자 경험을 위하여 그림 라벨이 어떤 타입의 모델이 표시될 것인가를 나타내는 것이 좋다. 사각형이 실제로 커피 머신인 것을 나타내는 라벨을 추가하려면, CoffeeMachineFigure에서 오른쪽 버튼을 클릭하고 New Child»Label을 선택한다. Properties 뷰에서 이름으로 새로운 라벨을 준다; 명명 규칙에 따라 CoffeeMachineFigureLabel과 같은 것이 될 것이다. Text 필드는 에디터에 그려질 때 그림 라벨 위에 표시될 내용을 나타낸다. "<- Coffee Machine ->" 처럼 사용자가 그것이 커피 머신임을 알도록 문구를 입력한다. 다시 한번 그림들을 표시하는 표준방법을 정하고, 그것을 지켜라; 그렇게 하는 것이 장기적으로 사용자를 위하는 길이다.
GMF가 다이어그램에 모델들을 표현하기 위해서는 맵핑할 Node가 필요하다. Canvas에서 오른쪽 클릭을 하고 New Child->Nodes Node를 선택해 Node를 만든다. 이 설정은 매우 직관적이다; 이름을 주고 디스플레이 시 사용할 그림을 선택한다.
다음 단계는 Diagram Label 노드를 만드는 것이다. 이 요소는 사용자 피드백을 위해 다이어그램 그림에 텍스트를 추가한다. Canvas에서 오른쪽 클릭을 하고 New Child->Labels->Diagram Labels를 선택한다. 여기엔 완성해야 할 두 가지 프로퍼티가 있다: Name 과 Figure. 우리의 명명규칙을 지켜서, 새로운 Diagram Label 에 CoffeeMachineDiagramLabel 이라 이름을 짓는다. Figure는 디스플레이할 때 사용할 Figure Gallery에 있는 엘리먼트이다. 드랍다운 리스트에서 CoffeeMachineFigureLabel를 선택한다.
여기까지 했으면, 다이어그램에 CoffeeMachine을 추가하기 위한 gmfgraph 정의 파일이 완료된 것이다.
생성도구 정의하기
coffee.gmftool 파일을 열어 보면, 사실 그렇게 많은 것들이 있지 않다는 것을 알 수 있다. (그림 4)
[그림 4] coffee.gmftool 파일 뷰
만들 수 있는 몇 종류의 도구들과 그룹들이 있지만 우리는 목적대로 생성 도구에 관심이 있다. Tool Group을 오른쪽 클릭을 하고 New Child->Creation Tool을 선택한다. Properties 뷰에서 Title과 Description을 채워라. Title은 그 도구가 무엇을 하는지 힌트를 주기 위해 팔레트에 표시될 것이다. Description은 도구 위에 마우스를 놓았을 때 보여지는 툴팁을 만드는 데 사용된다. 이게 생성도구를 만들기 위해 여러분이 해야 할 전부다; 얼마나 쉬운가?
맵핑 정의 만들기
gmfgraph와 gmftool이 끝났으니 이제 그것들이 함께 어떻게 동작하는지, 뿐만 아니라 모델의 어떤 부분들이 포함될지를 정의할 시간이다. 커피 샵 모델링은 coffee.gmfmap 파일에 되어 있다. (그림 5)
[그림 5] coffee.gmfmap 파일 뷰
커피 기계는 여기 있는 Top Node Reference에 의해 표현될 것이다. Mapping 에서 오른쪽 클릭하고 New Child->Top Node Reference을 선택한다. 이 엘리먼트에서 설정되는 단 하나의 프로퍼티는 Containment Feature이다. 이 리스트로부터, CoffeeMachines가 포함될 컬렉션의 이름을 선택한다. 여기서는 shopCoffeeMachines가 그것이다.
새로운 Top Node Reference에서 오른쪽 클릭을 하고 New Child->Node Mapping을 선택해서 Node Mapping 하나를 만든다. 이 노드에 모든 것들이 놓일 것이다; 다음 세 개의 프로퍼티를 주의하라.
- Element: 이 맵핑의 대상인 클래스(모델)
- Diagram Node: Element 프로퍼티에서 선택된 모델 클래스가 그려질 때 사용되는 그림
- Tool: Element 프로퍼티에서 선택된 모델 클래스가 생성될 때 사용할 도구
Element에서 CoffeeMachine을 선택하는 것은, CoffeeMachine의 인스턴스를 관리하고 있다는 것을 GMF에게 알리는 것이다. Tool 선택에서 drop-down 은 매우 직관적이다; CoffeeMachine 생성을 위해 올바른 설명이 담긴 툴을 선택한다. gmfgraph 바로 바깥의 Diagram Node에서는 CoffeeMachineNode를 선택하라.
마지막 단계는 Label Mapping을 추가하는 것이다. 이것은 사용자들에게 그들이 무엇을 보고 있는지 이해시켜서 비쥬얼적 도움 이상을 제공할 모델 속성들을 보여준다. Node Mapping을 오른쪽 클릭하고 New Child->Label Mapping을 선택한다. Properties 에서는 Diagram Label을 CoffeeMachineDiagramLabel로 한다. 패턴이 보이는가? Features 에는 디스플레이되길 원하는 도메인 모델의 속성 목록으로부터 선택한다.
코드 생산하기
이제 어려운 부분은 모두 정리됐다. 남은 건 오직 코드를 생산해 GMF에게 무거운 짐을 지게 하는 것뿐이다. coffee.gmfmap에서 오른쪽 클릭하고 Create generator model을 선택한다. 그리고 위저드를 따라 진행한다. 이는 실제로 에디터 코드를 생산하는 마지막 환경 파일을 만드는 것이다. 끝으로, coffee.gmfgen 파일에서 오른쪽 클릭하고 Generate diagram code을 선택해 우리는 코드를 생산해낼 수 있다. 그것으로, 우리는 이자에 앉아 애플리케이션을 만들고 컴파일하는 것을 보기만 하면 된다. 이제 애플리케이션을 다시 실행시킬 수 있고, 상점에 커피 기계들을 추가하는 것을 시작할 수 있다.
결론
다이어그램에서 각 모델 클래스에 대해서 반복해서 해주는 과정들이 있다. 애플리케이션을 정의하면서 세부적인 것 몇 개만 기입해주면, GMF가 많은 양을 처리주기 때문에 여러분이 할 것은 많지 않다. 비슷한 노드들에 대해서는 잘라내기 & 붙여넣기만 하고 프로퍼티 몇 개만 변경시켜주는 자신을 보게 될 것이다. 맵핑 파일들에 대해 익숙해지면 여러분의 플러그인 개발을 통해 훨훨 날게 될 것이다.
GMF는 반복적이고 에러가 발생하기 쉬운 대부분의 일들을 처리해주고, 많은 진보된 기능들을 제공하는 매우 강력한 프레임워크다. 초기 위저드에서 만들어내는 것에 대해 조금만 시간을 내서 살펴보면 모델 연결, 커스텀 도형, 에디터의 다양한 꾸미기 등 앞서 설명하지 않은 다른 기능들에 대해서도 쉽게 배울 수 있다. GMF를 배우는 가장 좋은 방법은 환경 파일들을 갖고 놀면서 무슨 일이 벌어지는지 지켜보는 것이다.
라이센스
GMF를 포함하여 모든 이클립스 프로젝트는 Common Public License (CPL)와 Eclipse Public License (EPL)를 따른다. 여러분이 GMF를 사용해 새로운 플로그인을 작성할 때는 어떤 라이센스든지 사용해 배포할 자유가 있다. (이클립스 코드를 수정하지 않는한) 이클립스 라이센스에 관해 더 많은 정보를 원한다면 resources의 링크들을 살펴 보라.
Resources
역자 김탁용님은 연세대학교 컴퓨터과학과를 졸업하고 현재 대한항공 정보시스템실에서 근무하고 있습니다. 무엇인가 새로운 것을 만드는 일, 그로 인해 다른 사람들에게 도움이 되는 일에 관심이 많아 소프트웨어 개발을 계속 하고 있습니다.