노무현 대통령 배너

MDA툴 AndroMDA - 코딩

Development/자동화 2008/04/07 15:50 posted by k16wire
지난번에 작성한 모델을 가지고 코드를 생성합니다. 혹시 모델링이 힘드신 분을 위해 Magic Draw로 작성한 timeracker.xmi를 첨부합니다.



C:\timetracker 폴더에서 명령줄 창을 열고 다음과 같이 입력합니다.
mvn install
사용자 삽입 이미지

빌드가 성공적으로 끝나게 되면 common\target\src\org\andromda\timetracker 밑에 모델링한 클래스들이 생성되어 있는걸 확인할 수 있습니다.
  • UserService.java : 서비스 메소드에 대한 인터페이스
  • UserServiceImpl.java : 개발자가 실제로 비즈니스 로직을 구현하는 클래스
  • UserServiceException.java
  • UserVO.java
  • UserDaoImpl.java
이클립스에서 AndroMDA로 만든 프로젝트를 읽어들여 보겠습니다. 이클립스를 실행하고 timetracker 프로젝트를 import 합니다.
File > Import > Existing Projects into Workspace
사용자 삽입 이미지

지금부터는 이클립스를 이용하여 개발을 진행하면 됩니다. 개발이 진행되고 나면 Maven을 이용하여 JBoss에 배포하고 테스트하는게 가능합니다. handleGetAllUsers 메소드를 다음과 같이 구현합니다.
Collection userVOs = getUserDao().loadAll(UserDao.TRANSFORM_USERVO);
return (UserVO[])userVOs.toArray(new UserVO[0]);


크리에이티브 커먼즈 라이선스
Creative Commons License
TAG AndroMDA, MDA

MDA툴 AndroMDA - 모델링

Development/자동화 2008/04/07 13:13 posted by k16wire
안드로메다를 가지고 개발을 시작하기 위해서는 먼저 모델링을 해야 합니다. Magic Draw를 가지고 모델링하고 나중에 이 모델을 가지고 코드를 생성해 보겠습니다.

UML 모델링
UML 모델을 그리기 위해서 모델링 툴이 필요합니다. 안드로메다에서 권장하는 툴은 Magic Draw입니다. Magic Draw는 모델링 범위가 제한되어 있지만 자유롭게 사용이 가능한 Communitey edition을 제공합니다.
MagicDraw 9.5 SP1.1 Community edition Download(15.6 MB)
사실 안드로메다와 사용가능한 모델링 툴은 더 많이 있습니다. 더 자세한 정보는 다음 URL을 참고하세요.
CASE tools that have been tested for AndroMDA compatibility
MagicDraw를 설치하고 나면 프로그램을 실행하고 나서
C:/timetracker/mda/src/main/uml/timetracker.xml파일을 열어서 모델링을 시작합니다.
timetracker.xml 파일을 로딩하기 위해서는 안드로메다에 대한 UML 프로파일을 필요로 하는데 이를 설정해 주어야 합니다. andromda의 Magic Draw UML Profile은 Maven Repository에 이미 들어있습니다.
.m2\repository\org\andromda\profiles
timetracker.xml 파일 안에 보면 아래와 같이 UML Profile에 대한 경로가 지정되어 있는걸 찾을 수 있습니다.
<mdElement elementClass='FileProperty'>
  <value>&lt;maven2.repository&gt;\org\andromda\profiles\uml14\
andromda-profile\3.2\</value>
  <selectionMode xmi.value='0'/>
</mdElement>
이 timetracker.xml 파일을 MagicDraw가 읽어들이기 위해서는 Maven과 Maven2에 대한 환경번수를 지정해 줘야합니다. 처음 파일을 읽어들일때 물어보는대로 경로를 찾아줘도 되며 미리 설정을 해도 됩니다.

MagicDraw를 실행하고 메뉴에서 [선택사항] >[환경변수]를 선택하여 다음과 같이 메이븐 레파지터리를 추가 합니다. 그러면 MagicDraw가 자동으로 UML Profile을 읽어들이게 됩니다.
사용자 삽입 이미지

timetracker.xml 파일을 MagicDraw에서 성공적으로 읽어들이면 다음과 같은 화면을 볼 수가 있습니다.
사용자 삽입 이미지

이제 모델링을 시작할 준비는 모두 끝났으니 실제로 모델을 작성해 보겠습니다. 처음 만들것은 ValueObject인 UserVO입니다.
  1. 마우스 오른쪽 버튼을 눌러서 [새요소] > [패키지]를 선택하여 org.andromda.timetracker 패키지를 만들고 그 밑으로 vo 패키지를 생성합니다.
  2. vo 패키지에서 [새 다이어그램] > [클래스다이어그램]을 선택합니다. 다이어그램의 이름은 Value Object 입니다.
  3. 다이어그램의 왼쪽 툴바를 이용해 아래 그림에서 보이는것처럼 UserVO 클래스와 UserVO[]클래스를 생성합니다.
  4. UserVO 클래스의 스테레오 타입은 <<ValueObject>>이며 id,username,firstName,lastName 네개의 속성을 갖습니다.
사용자 삽입 이미지

이번에는 UserService 서비스를 생성하겠습니다.
  1. service 패키지를 생성합니다.
  2. service 패키지에서 services 이름을 갖는 클래스 다이어그램을 생성합니다.
  3. 스테레오 타입이 <<Service>>이고 이름이 UserService인 클래스를 다이어그램에 추가합니다.
  4. public UserVO[] getAllUsers() 오퍼레이션을 클래스에 추가합니다.
사용자 삽입 이미지

이번에 생성할 클래스는 User 엔티티입니다.
  1. domain 패키지를 생성합니다.
  2. domain 패키지에서 Domain Objets 이름을 갖는 클래스 다이어그램을 생성합니다.
  3. 스테레오 타입이 <<Entity>>인 User 클래스를 다이그램에 추가합니다.
  4. 클래스 속성에서 꼬리표 값이 andromda.persistence.table에 USER라고 값을 입력합니다.
  5. username, firstName, lastName 속성을 User 클래스에 추가합니다.
사용자 삽입 이미지

User 엔티티 UserVO 간에 Dependency 관계를 맺어줍니다. Value Object 클래스 다이어그램에 domain 패키지에 있는 User 클래스를 가져와서 의존성 관계로 연결합니다.
사용자 삽입 이미지

UserService 서비스와 User 엔티티간에도 의존성 관계를 연결합니다. services 클래스 다이어그램은 다음과 같이 변경됩니다.
사용자 삽입 이미지

이것으로 모델링이 끝났습니다. 다음에는 이 모델을 가지고 코드를 생성해 보겠습니다.


크리에이티브 커먼즈 라이선스
Creative Commons License
TAG AndroMDA, MDA

MDA를 지원하는 툴

Development/자동화 2008/03/10 08:11 posted by k16wire
MDA는 그 특성상 실용적으로 구현하기 위해서는 툴 사용이 필수적입니다. MDA를 지원하는 툴을 찾아봤습니다.

상용 도구
  • ALTOVA : MagicDraw 에 번들로 제공되지만 다른 UML 도구도 아답터 형태로 지원이 가능.
  • MCC(Model Component Compiler) : InferData사의 상용 MDA 도구로 J2EE에 대한 코드 생성만을 지원
  • OptimalJ : 컴퓨웨어사 상용 MDA 도구로 PSM 변환을 위해 패턴화된 노테이션을 지원. 기존 UML 과는 조금 다른 노네이션을  사용한다.
  • SosyInc Modeler and Transformation Engine : UML 모델을 기반으로 사전에 정의된 애플리케이션 아키텍처와 비즈니스 규칙을 기반으로 GUI를 생성해주는 변환 엔진
  • Model-in-Action : Mia 소프트웨어가 지원하는 도구로 코드 생성, 모델변환을 지원.
  • MetaEdit+ : 언어정의와 코드 생성을 위한 통합 모델링 도구. 메타모델과 모델을 위한 XML과 SOAP/Webservice 인터페이스 지원.
  • MDAWorkbench : 텍스트와 모델 변환 툴셋. 모든 종류의 메타모델 지원. Eclipse의 EMF를 기반으로 한다. 세가지 에디션 지원(Free, Academic, Profession)
  • iQgen : 템플릿 기반의 도구로 XMI, XML, ECore와 같은 여러 포멧의 모델 지원, JSP 템플릿으로 템플릿 작성 지원
  • Acceleo : Eclipse기반의 도구로 메타모델 지원
  • jmatter :

오픈소스
  • AndroMDA : UML/XMI로부터 J2EE 코드를 생성하는 오픈소스 템플릿 툴. VTL 스크립트를 지원하며 넷빈의 MDR을 지원
  • Groovy MDA : 스크립트 언어인 그루비를 이용해서 UML로부터 코드를 생성해 내는 도구
  • Sculptor : MDSD, DDD를 지원하는 스프링 프레임워크 기반의 코드 생성을 지원하는 MDA 도구
  • Taylor : 루비온레일스를 기반으로 하는 MDA도구로 J2EE 애플리케이션 코드를 생성
  • OpenArchitectureWare : XMI와 통합되어 코드를 생성해주는 템플릿 기반의 프레임워크
  • Kermeta : OCL 지원, 이클립스 EMF의 확장셋, 이클립스 워크벤치형태로 메타 프로그래밍 환경
  • MOFScript :
  • MTF(The IBM Model Transformation Framework) :
  • The ATL Engine : 아틀라스 그룹에서 지원하는 모델 변환 언어와 툴킷, 이클립스 서브 프로젝트
  • General Model Transformer(GMT) : 이클립스 서브 프로젝트로 이클립스 플랫폼 기반의 모델 변환 기술.
  • OpenMDX : J2EE와 .NET에 대한 코드 생성을 지원하고 XMI를 지원하는 도구와 통합이 가능한 MDA 환경
  • XDoclet : 속성기반의 J2EE 코드 생성 도구. MDA 도구는 아니지만 활용도가 높음
  • Middlegen : JSBC, Velocity, Xdoclet, Ant 기반의 데이터베이스 코드 생성 도구
Reference : http://www.modelbased.net/mda_tools.html

크리에이티브 커먼즈 라이선스
Creative Commons License

'Development > 자동화' 카테고리의 다른 글

MDA툴 AndroMDA - 코딩  (0) 2008/04/07
MDA툴 AndroMDA - 모델링  (0) 2008/04/07
MDA를 지원하는 툴  (0) 2008/03/10
MDA툴 AndroMDA - 샘플 애플리케이션 TimeTracker  (0) 2008/03/07
MDA툴 AndroMDA - 설치 및 설정  (0) 2008/03/06
MDA툴 AndroMDA - 개요  (0) 2008/03/06
TAG MDA
안드로메다에는 빨리 안드로메다를 경험해 볼 수 있도록 간단한 근태관리 시스템을 샘플 애플리케이션으로 제공하고 있습니다. 다음 그림은 기존에 사용하던 타임카드를 나타냅니다.

사용자 삽입 이미지

다운로드 및 설치
안드로메다 사이트에 가서 샘플애플리케이션을 다운로드 받아서 C:\timetracker-completed폴더에 압축을 해제합니다. 폴더를 변경하면 샘플내의 pom.xml 파일을 변경해줘야 합니다.
C:\timetracker-completed폴더로 이동하여 명령줄 창에서 다음과 같이 입력하고 실행합니다.
mvn install
그러면 TimeTracker가 필요로 하는 모든 jar 파일을 자동으로 다운로드 하여 로컬 저장소에 넣어놓습니다.
사용자 삽입 이미지
C:\timetracker-completed\pom.xml 파일에 오류가 있는거 같습니다. 파일내용중에 <modules/>에 대한 부분이 있는데 pom.xml 파일을 열어서 아래와 같이 app 모듈을 주석처리 하셔야 위와같은 결과를 볼 수 있습니다.
<modules>
        <module>mda</module>
        <module>common</module>
        <module>core</module>   
        <module>web</module>  
        <!--module>app</module-->        
</modules>

Database 만들기

MySQL 데이터베이스에 timetracker라는 이름의 데이터베이스를 생성합니다. 그리고 timetracker라는 아이디를 가진 사용자를 생성하여 timetracker 데이터베이스에 대한 모든 권한을 줍니다. 사용자 암호 역시 timetracker 입니다. 그리고 나서 명령줄 창에서 다음 명령어를 실행합니다.
mvn -f core/pom.xml andromdapp:schema -Dtasks=create
쿼리문이 실행되면 timetracker 데이터베이스에 테이블이 생성됩니다.
사용자 삽입 이미지
MySQL 데이터베이스에 대한 드라이버가 없다는 오류가 발생할 수 도 있습니다. 이 경우에는 MySQL의 JDBC 드라이버 파일인 mysql-connector-java-5.0.8-bin.jar를 maven의 lib 폴더에 넣어주면 인식합니다.

샘플 데이터 추가
샘플 데이터가 들어있는 쿼리 파일은 C:\timetracker-completed\app\src\main\sql에 들어 있습니다.
static-data-insert.sql
test-data-insert.sql
이 쿼리파일을 이용해서 샘플데이터를 timetracker 데이터베이스에 추가합니다.

애플리케이션 배포
이제 Timetracker를 JBoss 서버에 배포하려고 합니다. 배포를 위한 EAR를 만들기 위해 다음과 같이 명령줄 창에서 입력하고 실행합니다.
mvn -f app/pom.xml -Ddeploy
app/pom.xml 파일에도 약간의 오류가 있습니다. pom.xml 파일 중간에 보면 <version>이 빠져 있는 부분이 2군데 있습니다. 이 부분을 추가해줘야 합니다.
<dependency>
                <groupId>${pom.groupId}</groupId>
                <artifactId>timetracker-common</artifactId>
                <version>${pom.version}</version>   
                <exclusions>
                    <exclusion>
                        <groupId>${pom.groupId}</groupId>
                        <artifactId>timetracker-mda</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.andromda.profiles.uml14</groupId>
                        <artifactId>andromda-profile</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>commons-digester</groupId>
                <artifactId>commons-digester</artifactId>
                <version>1.7</version>                  
                <exclusions>
                    <exclusion>
                        <groupId>xml-apis</groupId>
                        <artifactId>xml-apis</artifactId>
                    </exclusion>
                </exclusions>
</dependency>
명령이 성공적으로 실행되면 다음과 같이 JBoss의 default\deploy 위치에 timetracker-1.0-SNAPSHOT.ezr이 배포되었음을 알려줍니다.
사용자 삽입 이미지

애플리케이션 테스트
이제 JBoss를 실행하고 TimeTracker를 테스트해 볼 순서가 되었습니다. JBoss의 %JBOSS_HOME%\bin\run.bat 파일을 실행합니다. JBoss가 실행되고 TimeTracker가 올라오는것을 로그로 확인할 수 있습니다. 브라우저를 실행하고 다음 URL을 입력하여 TimeTracker를 시작합니다.
http://localhost:8080/timetracker
사용자 삽입 이미지

Username은 nbhatia, Password는 cooldude로 입력하고 Log In을 눌러서 TimeTracker로 로그인 합니다.
Search timecards를 눌러서 현재 타임카드를 조회해 볼 수 있습니다.
사용자 삽입 이미지

지금까지 안드로메다로 애플리케이션을 개발하는 방법에 대해 TimeTracker라는 샘플 애플리케이션을 통해서 살펴봤습니다. 다음에는 좀 더 상세하게 들어가 보도록 하겠습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
TAG MDA

MDA툴 AndroMDA - 개요

Development/자동화 2008/03/06 08:52 posted by k16wire
안드로메다라고 부르는 AndroMDAUML 모델을 기반으로 J2EE, .NET 코드 생성을 지원하는 템플릿 기반의 프레임워크 입니다. 다른 MDA 도구와 달리 Spring, jBPM, Struts, JSF, Hibernate와 같은 프레임워크에 코드 생성을 직접 지원합니다. 원하는 UML 도구로 생성한 모델을 기반으로 코드를 생성 할 수 있습니다.

사용자 삽입 이미지

현재 안드로메다 최신버전은 4.0입니다면 여기서는 3.2버전을 기준으로 기본적인 특징들을 살펴보겠습니다.
UML 버전
안드로메다는 현재 UML 1.4를 지원합니다.(2008/02/19 현재) UML 2.0은 개발중에 있습니다.
UML 툴 지원
MagicDraw, Poseidon, Enterprise Architect를 지원합니다. 더 자세한 UML툴에 대한 안드로메다 호환성 테스트 결과는 CASE tools that has been tested for AndroMDA compatibility를 참고하세요.
카트리지
AndroMDA 4.0이 현재 지원하는 카트리지를 나열해 보겠습니다.
  • Spring
  • EJB 2/3
  • Webservices
  • JSF
  • XSD
  • .NET
  • Hibernate
  • Struts
기존 카트리지를 수정해서 자신만의 카트리지를 만들수도 있습니다. 메타 카트리지라고 부르는 기존 카트리지를 카트리지 툴킷을 이용해서 수정하게 되면 새로운 카트리지를 만들 수 있고 이 카트리지로 UML 툴을 이용해서 소스 생성이 가능합니다.
IDE
안드로메다는 이클립스 플러그인 형태로 설치가 됩니다.
템플릿
Velocity, FreeMarker를 지원합니다.
텍스트 생성
소스코드, SQL, HTML, O/R 맵핑 파일 생성이 가능합니다.

이런 특징을 갖고 있는 안드로메다로 어떤일을 할 수 있는 걸까요 ? 다음과 같은 아키텍처를 갖는 엔터프라이즈 애플리케이션을 만든다고 가정 해 보겠습니다.
사용자 삽입 이미지

레이어드 아키텍처는 아키텍처를 정의하는데 가장 많이 사용되는 아키텍처 스타일입니다. 각 레이어별 설명은 생략하겠습니다. 이런 아키텍처를 가진 애플리케이션을 안드로메다로 개발하려면 각 레이어 별로 사용하는 기술셋이 맵핑되어야 합니다.
사용자 삽입 이미지

안드로메다를 이용하면 오른쪽에 나와있는 기술셋으로 구현된는 J2EE 애플리케이션을 모델로부터 생성해 내는게 가능합니다. 프레임워크를 위한 설정파일은 자동으로 생성되며 개발자는 비즈니스 로직 구현에만 전념하면 됩니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
TAG AndroMDA, MDA