Midnight Peach Quick Start Part I

Midnight Peach 2012. 5. 23. 23:20

본 포스트는 Midnight Peach 3.x 버전의 빠른 설명서입니다.

본 포스트는 두 개의 파트로 이루어져 있습니다.

파트 I에서는 서비스 레이어(WCF)를 두지 않는 형태(즉, 클라이언트에서 DB에 바로 붙는 경우)를 다루고, 파트 II에서는 서비스 레이어를 포함하는 구조에 대해서 각각 설명합니다.

 

0. DB 스키마 준비

먼저 DB 스키마가 구성되어 있어야 할 것입니다.

여기서는 Memopad 라는 데이터베이스를 만들어 사용하겠습니다.

아래 파일은 위 스키마에 대한 생성 스크립트입니다.

invalid-file

 

1. 솔루션의 생성

MP에는 비주얼 스튜디오 솔루션 템플릿이 내장되어 있습니다.

이 기능을 이용하면, MP가 추천하는 형태대로 프로젝트가 미리 구성된 솔루션을 쉽게 생성할 수 있습니다.

MP를 실행시킨 후 Tool –> Generate Solution 을 실행합니다.

image

Template은 LINQ2SQL Basic, Solution Name은 생성할 솔루션 이름, Folder는 솔루션을 생성할 폴더를 지정한 후, OK 버튼을 누릅니다.

image

솔루션을 생성하고 나면 비주얼 스튜디오에서 열겠냐고 물어보는데, 예를 선택하여 솔루션을 엽니다.

image

두 개의 프로젝트가 생성되는데, Memopad.Biz는 데이터 액세스 레이어와 비지니스 레이어가 결합된 프로젝트이고, Memopad.TestConsole 프로젝트는 Biz 프로젝트를 테스트하기 위한 용도의 콘솔 프로젝트입니다.

Memopad.mp 파일은 MP의 템플릿 파일입니다.

Biz와 Entities 폴더는 각각 사용자가 작성하는 비지니스 클래스와 엔터티 클래스가 들어갈 곳입니다. (DeleteMe.txt 파일들은 부모 폴더를 생성하기 위해 만든 더미 파일이니 삭제하시면 됩니다.)

Generated 폴더 안에는 MP가 생성할 코드가 들어갈 곳입니다. 이 폴더 안의 코드는 개발자가 직접 수정하지 않아야 합니다.

 

2. DBML의 작성

(비주얼 스튜디오에서) Memopad.dbml 파일을 열고 서버 탐색기에서 Memo 테이블과 Category 테이블을 끌어옵니다.

image

N-Tier에서 LINQ-toSQL를 사용하기 위해서는 각 엔터티 프로퍼티의 Update Check 값이 Never로 설정이 되어야 합니다.

아래는 Memo 엔터티중 MemoID 프로퍼티의 예인데, 이런 식으로 모든 프로퍼티가 설정되어야 합니다.

image

엔터티와 프로퍼티 수가 많으면 제법 번거로운 작업이 될 수 있는데, MP에는 이 작업을 쉽게 할 수 있는 기능도 내장되어 있습니다.

MP에서 Tool –> Add Update Check를 실행한 후, 위 DBML 파일을 선택합니다.

image

여기서 중요한 점이 있는데, 위와 같이 Update Check를 설정한 후에는 반드시 비주얼 스튜디오에서 DBML 파일을 다시 열고 나서 저장을 해야 한다는 것입니다.

그렇게 해야 Update Check 값이 Never가 지정된 상태에서 비주얼 스튜디오가 코드를 생성합니다.

 

3. MP의 코드 생성

MP에서 위에서 생성된 Memopad.mp 파일을 열고, Generate –> Data를 실행하여 코드를 생성합니다.

image

이제 MP에 의해 생성된 코드가 Generated 폴더 안에 생겼습니다.

이 시점에서 솔루션이 제대로 구성되었는지 테스트를 해볼 수 있습니다.

TestConsole 프로젝트를 시작 프로젝트로 설정한 후 app.config 파일을 열어 아래와 같이 DB 연결 문자열을 수정합니다.

image

Program.cs 파일을 연 후 아래 코드를 입력한 후 프로젝트를 실행합니다.

image

별다른 예외가 발생하지 않고 정수값이 출력되면 성공입니다.

 

4. 커스텀 비지니스 클래스의 작성

위 단계에서 각 엔터티 마다 20개 이상의 데이터 엑세스 메서드가 생성이 되었습니다.

특히 Get 메서드의 경우 필터링 / 정렬 / 페이징을 각각 포함하는 8개의 오버로드가 제공되어 바로 사용할 수도 있지만, 여기서는 Memo 엔터티에 대한 커스텀 메서드를 하나 만들어 보겠습니다.

만들려고 하는 메서드는 아래와 같습니다.

image

카테고리 이름을 검색 조건으로 하여 Memo 엔터티를 검색하는 메서드인데, 이때 반환되는 각 Memo 엔터티에는 카테고리 이름이 포함되어 있습니다.

즉 다음과 같은 쿼리를 실행하는 메서드입니다.

image

먼저 Memo 엔터티가 카테고리 이름을 가져야 하므로 Memo 엔터티에 CategoryName 이라는 속성을 추가해야 합니다.

물론 Memo 클래스는 DBML을 저장할 때 비주얼 스튜디오가 생성하는 코드이므로, 여기서는 부분 클래스로 만들어야 합니다.

Entities 폴더 안에 Memo 클래스를 추가합니다.

image

(이 스샷은 조금 있다 사용할 MemoBiz 클래스도 같이 추가해 둔 상태입니다.)

새로 만든 Memo 클래스를 부분 클래스로 지정하고 CategoryName 프로퍼티를 정의합니다.

image

네임스페이스를 기존 Memo 클래스와 동일하게 맞추고, partial 키워드를 지정합니다.

이번에는 MemoBiz 클래스를 추가하고 아래와 같이 LINQ 코드를 작성합니다.

image

역시 네임스페이스를 맞추고 partial 키워드를 지정합니다.

위 코드에서 쿼리 내용에 대해서는 여러 가지 이야기할 포인트가 많으니, 별도의 포스트에서 다루도록 하겠습니다.

 

여기까지 해서 서비스 레이어를 두지 않는 형태의 솔루션을 만들어 봤습니다.

다음 포스트에서는 서비스 레이어를 생성하는 형태에 대해서 이야기해 보겠습니다.

: