MP의 구성

Midnight Peach 2008. 10. 10. 14:35

[주의]
이 글은 MP의 현재 버전 (3.X)에 맞지 않습니다.

단순 참고용으로만 활용하십시오

MP의 주요 구성 요소를 도해하면 대략 아래와 같은 그림이 됩니다.

DBML과 패키지는 코드를 생성하기 위해 사용자가 제공하는 요소이며, 스키마는 코드 생성을 위해 DBML에 있는 데이터베이스 모델을 추상화시킨 엔터티입니다.

 

코드 생성기가 코드를 생성하기 위해서는 두 개의 입력이 필요한데, 스키마와 패키지가 그것입니다.

스키마는 스키마 추출기가 DBML 파일에서 추출하며, 패키지는 MP의 내장 패키지 혹은 사용자 정의 패키지로 제공될 수 있습니다.

 

MP의 범용성은 바로 이 두 가지 입력에서 기인합니다.

DBML에 있는 데이터 모델을 바로 이용하지 않고 스키마 라는 추상 구성요소를 두고 있기 때문에, 다른 데이터베이스 시스템을 지원할 수 있습니다.

만일 MySql이나 Oracle을 지원해야 한다면, 각각 MySql과 Oracle용 스키마 추출기만 추가하면 될 것입니다.

 

MP는 LINQ to SQL에 기반을 두고 있기 때문에 MS SQL 서버 외의 다른 데이터베이스는 지원하지 않습니다만, MP의 전신이라고 할 NOW 라는 코드 생성기에서는 위와 같은 구조에 의해 다른 데이터베이스를 지원합니다. (NOW는 아직 공개할 만한 수준이 되지 않아 공개하지 못하고 있습니다)

 

MP의 범용성을 이루는 두 번째 요소는 패키지 입니다.

패키지는 한 개의 패키지 정의 파일(확장자가 pds)과 여러 개의 템플릿 파일(확장자가 tpl)로 이루어져 있습니다.

 

패키지 정의 파일은 패키지와 그에 속한 템플릿에 대한 각종 설정이 저장되는 XML 파일 입니다.

예를 들어 아래 그림은 패키지 정의 파일에 대한 설정을 지정하는 것입니다.

 

패키지 정의 파일에는 두 개의 XML 요소(Element)가 있습니다.

패키지에서 사용되는 변수를 정의하는 Variable과 템플릿의 정보를 설정하는 Template 요소가 그것입니다.

(GeneratedCode 라는 요소도 있지만 이는 MP 내부에서 임시로 사용되기 때문에 여기서는 제외합니다.)

아래 그림은 패키지 정의 파일의 XSD를 XSD 디자이너에서 연 화면 입니다.

 

패키지 정의 파일과 함께 패키지를 이루는 두 번째 구성품은 템플릿입니다.

템플릿은 매크로가 포함된 단순한 텍스트 파일입니다.

코드 생성기는 템플릿에 포함된 매크로를 스키마에 있는 적절한 값으로 치환시켜 코드를 생성합니다.

 

예를 들어 MP가 생성한 아래 코드에 대해 생각해봅시다.

이 코드를 생성하는 템플릿은 아래와 같습니다.

이 템플릿에 스키마 추출기가 추출해 낸 Memo 라는 스키마 엔터티를 전달하면 위와 같은 코드가 생성되는 것입니다.

이 경우 Memo를 템플릿의 소스라고 할 수 있겠습니다.

 

마지막으로 템플릿은 적용 범위를 가집니다.

템플릿의 소스가 데이터베이스이냐 테이블이냐에 따라서, 이는 "database" 혹은 "table" 중의 하나입니다.

 

위 템플릿 예제는 "table" 적용 범위를 가진 템플릿입니다. 따라서 템플릿의 소스는 테이블인 Memo가 됩니다.

반면에 아래 템플릿과 그에 의해 생성된 코드는 "database" 적용 범위를 가진 템플릿의 예입니다.

 

 

: