목차

1.     T4란 무엇일까요?

2.     편리한 작업 환경 구성

3.     첫 예제 구현

4.     이미 있는 T4 Template 수정해보기 예제 (MVC Scaffolding에 나만의 주석달기)

5.     라이브러리 참조하여 사용하기와 디버깅하기

6.     매개변수를 위한 UI 구성

7.     코드 생성 툴로써 실행해보기

8.     VS와 연결하기

 

크게 호응이 없는 듯하여 살짝 잠정적으로 강좌를 잠수를 타거나 없어져 버릴려고 했는데 하나의 댓글이 달리면서 작은 책임감이 생겨 T4 기초강좌를 이어가 봅니다.

그림이 많아서 스크롤의 압박이 있습니다.

내용을 요약하면 제목 그대로 아주 간단한 예제 하나를 만들어 보고 MVC Scaffolding을 한번 해보고 scaffold로 만들어지는 코드에 간단하게 주석을 추가해보는 수정을 해보는 것입니다.

1.     첫 예제 구현

첫번째 예제를 시작하기 전에 코딩페이지의 구조를 이해하기 위해 간단하게 기본작성법을 먼저 간략하게 알아보도록 합니다.

T4는 아래와 같이 asp.net“<% %>”기호 대신에 “<# #>”를 유사하게 사용한다고 생각하면 수월합니다.

크게 아래와 같이 5개 영역으로 이루진다.

1.     텍스트 영역

“<#”으로 시작하고 “#>”으로 종료하는 영역이외의 영역으로 파일에 그대로 출력되는 텍스트 영역입니다.

2.     지시어 영역

“<#@”으로 시작해서 “#>”으로 종료하는 영역으로 템플릿정의, parameter, output, assembly, import, include같은 지시어를 사용하는 영역입니다.

3.     일반 control 영역

“<#”으로 시작해서 “#>”으로 종료되는 영역으로 일반 코딩영역입니다.

4.     표현 control 영역

“<#=”으로 시작해서 “#>”으로 종료하는 영역내의 실행결과를 출력하는 영역입니다.

5.     Class control 영역

“<#+”으로 시작해서 “#>”으로 종료하는 영역으로 속성, 메서드 등을 정의하는 영역입니다.

 

, 그럼 기본 지시어 영역하고

텍스트 영역에 간단하게 메세지를 적고

일반 control영역에 날짜를 출력하는 아래와 같은 간단한 첫 예제를 만들어봅니다.

3-01.png

예제를 통해서 기본적으로 .net library를 기본적으로 사용할 수 있음을 확인할 수 있습니다.

Design time에 실행할 수 있는 방법은 해당 tt파일의 팝업 메뉴 중 [Run Custom tool]을 클릭합니다.

3-02.png

실행 후 tt파일 아래의 text파일을 열어 결과를 확인합니다.

3-03.png 

3-04.png

너무 쉽습니다. 모든 것은 첫 걸음 부터 차근차근

 

2.     이미 있는 T4 Template 수정해보기 예제 (MVC Scaffolding에 나만의 주석달기)

 

이번에는 약간 생뚱맞을 수도 있지만 T4 Template이 우리 생활에 얼마나 많이 침투해 있는지 간단한 예제를 하나 만들어 봄으로 살펴보고자 합니다.

나아가 그 T4 Template 살짝 흠집을 내어보는 센스를 발휘해 보도록 하겠습니다.

 

사용한 예제는 ASP.net MVC 4.0으로 코딩을 별도로 하지 않고 Scaffolding으로만 간단하게 연락처 관리 프로그램을 하나 만들어 봅니다.

아래와 같이 새로운 프로젝트를 “ASP.NET MVC4 Web Application” > “Internet Application” 템플릿으로 생성합니다.

4-01.png 

4-02.png 

4-03.png 

4-04.png 

 

사용할 App_Data폴더에 database를 추가합니다.

4-05.png 

4-06.png 

 

새로 생성된 데이터 베이스를 열고 새로운 table을 아래와 같이 추가합니다.

4-07.png 

4-08.png 

4-09.png 

4-10.png 

4-11.png 

4-12.png 

 

Models폴더에 Entity data model(ORM)을 추가하면서 생성했던 contacts 스키마를 추가합니다.

4-13.png 

4-14.png 

4-15.png 

4-16.png 

4-17.png 

4-18.png 

 

이렇게 생성된 스카마는 XML형태로 작성되어지고 이런 XML으로 Entity model을 생성합니다.

T4로 작성되었음을 아래와 같이 팝업메뉴와 해당 edmx의 속성을 확인하여 custom tool이 연결되어 있는 것을 봄으로써 확인할 수 있습니다.

참고: table을 딸랑 하나만 넣으면 아예 스키마가 들어오지 않은 문제점이 생기는 경우가 있습니다. 이럴때는 2개이상의 개체를 선택하고 generator하고 난 다음 필요없는 개체를 삭제하는 방법이 대안이 될 수 있습니다.

생성된 edmxcode generator에 의해서 코드가 생성되어진다는 것을 아래의 스크린샷을 통해 확인할 수 있습니다.

4-19.png 

4-20.png 

4-21.png 

참고: 그럼 T4가 아닌 새로운 형태의 Code Generator만들어서 사용할 수 있다는 이야기일 것 같습니다. 네 맞습니다. 아래의 URL을 참고하여 기본적인 내용을 확인할 수 있습니다.

http://drewnoakes.com/snippets/WritingACustomCodeGeneratorToolForVisualStudio/

 

자 다음으로 ORM에 독립적인 business class를 작성하기 위해서 POCO class Template을 설치하고 사용합니다. 이 또한 T4 Template입니다.

먼저 [Tools]-[Extension Manager]를 엽니다.

4-22.png 

 

[Online Gallery]를 선택합니다.

우측의 검색박스에 “EF 4.x POCO Entity Generator for C#”으로 검색하고 설치합니다.

4-23.png 

 

설치가 완료되면 이미 생성해두었던 mycompany.edmx를 열고 [Add Code Generation Item…]을 선택합니다.

4-24.png 

 

[Code]-[EF 4.x POCO Entity Generator]을 선택, 아래에 “mycompany.tt”을 입력하고 [Add]버튼을 클릭합니다.

4-25.png 

 

tt를 통해 Data context class Model class가 생성되어집니다.

4-26.png 

 

나머지 [Controller] [View]는 기본 Scaffolding으로 생성합니다.

이 시점에서 컴파일을 한번 해줍니다. Model class가 생성되어 다음 scaffold에서 참조하기 위함입니다.

 

그리고 [Controller]폴더의 팝업메뉴의 [Add]-[Controller]를 선택합니다.

4-27.png 

 

Controller name“ContactsController”로 입력합니다.

Template은 기본 선택인 “Controller with read/write actions and views, using Entity Framework”을 유지합니다.

Model class T4에 의해 생성된contacts class를 선택합니다.

Data context class또한 T4에 의해서 생성된 mycompanyEntities class를 선택합니다.

4-28.png 

 

지정된 매개변수로 각 페이지들이 T4 Template에 의해서 자동으로 작성되어지는 것을 목격할 수 있습니다.

4-29.png 

 

자 이제 이미 말씀드린대로 별도의 코딩한 줄 없이 아주 간단한 형태의 CRUD동작을 수행할 수 있는 MVC internet application을 완성하였습니다.

결과를 확인합니다.

 4-30.png

4-31.png

 

 

만족스럽지 못한 결과입니다.

그럼 만들어진 뼈대를 수정하면서 사용하는 것이 당연한 수순입니다.

하지만 여기서 우리 회사에는 이 정도는 자동으로 만들어진다면 매번 수행하는 작업의 상당한 부분을 절약할 수 있을텐데라고 생각할 수 있습니다.

바로 이를 위해서 T4 Template 새로 생성해서 추가하거나 기존의 것을 수정하는 방법이 있을 것입니다.

물론 금번 강좌에서는 깊이 있는 내용을 다루기에는 아직 너무나 기초가 없으므로 간단하게 생성되는 코드에서 텍스트(커맨트)를 수정해보는 것으로 살펴보도록 하겠습니다.

전체적인 과정에 Code generator가 사용된 곳은 3가지입니다.

1)     ORM, 2) DB Context, Model class생성, 3) controller/view생성

여기서 ORM에 해당하는 Entity Framework은 제외한 2가지에 나만의 주석을 추가하여보도록 하겠습니다.

1.     DB Context class에 주석 남기기.

Data context class T4 Template파일을 엽니다.

4-33.png

아래와 같이 주석을 추가합니다.

4-34.png

변경된 내용을 저장함과 동시에 실행되어 반영되어집니다.

4-35.png

2.     Model class에 주석 남기기

아래와 같이 model class를 엽니다.

4-36.png

Namespace 바로 밑에 주석을 추가합니다.

4-37.png

마찬가지 저장과 동시에 실행되면서 반영되어짐을 확인할 수 있습니다.

4-38.png 

4-39.png

3.     Controller class에 주석을 추가하기

“C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 4\CodeTemplates\AddController\controllerwithcontext.tt”을 엽니다.

4-40.png

주석을 추가합니다.

4-41.png

참고: 관리자권한으로 visual studio를 실행해서 해당 파일을 열어줍니다.

결과는 view까지 수정하고 한꺼번에 확인하기로 합니다.

4.     View에 주석을 추가하기

리스트 뷰 템플릿만 하나 수정해보기로 합니다.

“C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 4\CodeTemplates\AddView\CSHTML\List.tt”

4-42.png

주석을 추가합니다.

4-43.png

이제 기존의 솔루션에 contacts2Controller를 추가해봅니다.

4-44.png

scoffolding되어진 주석을 확인하여 [add]버튼을 클릭하면.. OMG… OTL…

 4-45.png

위의 에러문을 활용하여 구글 검색을 통해서 아래와 같이 microsoft tangible editor issue라는 내용과 함께 해결책이 제시되어 있습니다.

http://connect.microsoft.com/VisualStudio/feedback/details/648748/mvc-3-view-template-cs0234-compile-error

tangible-engineering Managing Director: Dipl.-Inf. Tim F. Fischer MVC3 tools update와 함께 해결이 되었다고 하나 저는 MVC4를 사용해서 그런지 해당 패치를 해도 같은 현상이 있어 해결책이라고 되어 있는 dll파일의 full path를 주는 방법으로 아래와 같이 해결하였습니다.

까짓거 공짜로 쓰고 같은 엔지니어끼리 좀 이해하면서 살자는 생각으로 이해하고 넘어갑니다. (해결책만 다오..ㅋㅋ)

4-46.png

그래서 다시 한번 scaffolding하면 아래와 같이 주석이 추가된 결과물을 확인할 수 있습니다.

4-47.png 

4-48.png

이번 세션은 여기까지입니다.

4번째 세션까지 오면서 까지도 거의 T4는 어떤 것인지에 포인트를 맞추어 설명을 드렸습니다.

기본 강좌이니만큼 전체적인 아주 기본적인 것을 위주로 알아보는 내용입니다.

앞으로는 실제 T4의 작성에 있어서 필요한 기본적인 사항을 하나 하나 짚어보도록 하겠습니다.