목차
1. T4란 무엇일까요?
2. 편리한 작업 환경 구성
3. 첫 예제 구현
4. 이미 있는 T4 Template 수정해보기 예제 (MVC Scaffolding에 나만의 주석달기)
5. 라이브러리 참조하여 사용하기와 디버깅하기
6. 매개변수를 위한 UI 구성
7. 코드 생성 툴로써 실행해보기
8. VS와 연결하기
1. 첫 예제 구현
첫번째 예제를 시작하기 전에 코딩페이지의 구조를 이해하기 위해 간단하게 기본작성법을 먼저 간략하게 알아보도록 합니다.
T4는 아래와 같이 asp.net의 “<% %>”기호 대신에 “<# #>”를 유사하게 사용한다고 생각하면 수월합니다.
크게 아래와 같이 5개 영역으로 이루진다.
1. 텍스트 영역
“<#”으로 시작하고 “#>”으로 종료하는 영역이외의 영역으로 파일에 그대로 출력되는 텍스트 영역입니다.
2. 지시어 영역
“<#@”으로 시작해서 “#>”으로 종료하는 영역으로 템플릿정의, parameter, output, assembly, import, include같은 지시어를 사용하는 영역입니다.
3. 일반 control 영역
“<#”으로 시작해서 “#>”으로 종료되는 영역으로 일반 코딩영역입니다.
4. 표현 control 영역
“<#=”으로 시작해서 “#>”으로 종료하는 영역내의 실행결과를 출력하는 영역입니다.
5. Class control 영역
“<#+”으로 시작해서 “#>”으로 종료하는 영역으로 속성, 메서드 등을 정의하는 영역입니다.
자, 그럼 기본 지시어 영역하고
텍스트 영역에 간단하게 메세지를 적고
일반 control영역에 날짜를 출력하는 아래와 같은 간단한 첫 예제를 만들어봅니다.
예제를 통해서 기본적으로 .net library를 기본적으로 사용할 수 있음을 확인할 수 있습니다.
Design time에 실행할 수 있는 방법은 해당 tt파일의 팝업 메뉴 중 [Run Custom tool]을 클릭합니다.
실행 후 tt파일 아래의 text파일을 열어 결과를 확인합니다.
너무 쉽습니다. 모든 것은 첫 걸음 부터 차근차근 …
2. 이미 있는 T4 Template 수정해보기 예제 (MVC Scaffolding에 나만의 주석달기)
이번에는 약간 생뚱맞을 수도 있지만 T4 Template이 우리 생활에 얼마나 많이 침투해 있는지 간단한 예제를 하나 만들어 봄으로 살펴보고자 합니다.
나아가 그 T4 Template 살짝 흠집을 내어보는 센스를 발휘해 보도록 하겠습니다.
사용한 예제는 ASP.net MVC 4.0으로 코딩을 별도로 하지 않고 Scaffolding으로만 간단하게 연락처 관리 프로그램을 하나 만들어 봅니다.
아래와 같이 새로운 프로젝트를 “ASP.NET MVC4 Web Application” > “Internet Application” 템플릿으로 생성합니다.
사용할 App_Data폴더에 database를 추가합니다.
새로 생성된 데이터 베이스를 열고 새로운 table을 아래와 같이 추가합니다.
Models폴더에 Entity data model(ORM)을 추가하면서 생성했던 contacts 스키마를 추가합니다.
이렇게 생성된 스카마는 XML형태로 작성되어지고 이런 XML으로 Entity model을 생성합니다.
T4로 작성되었음을 아래와 같이 팝업메뉴와 해당 edmx의 속성을 확인하여 custom tool이 연결되어 있는 것을 봄으로써 확인할 수 있습니다.
참고: table을 딸랑 하나만 넣으면 아예 스키마가 들어오지 않은 문제점이 생기는 경우가 있습니다. 이럴때는 2개이상의 개체를 선택하고 generator하고 난 다음 필요없는 개체를 삭제하는 방법이 대안이 될 수 있습니다.
생성된 edmx가 code generator에 의해서 코드가 생성되어진다는 것을 아래의 스크린샷을 통해 확인할 수 있습니다.
참고: 그럼 T4가 아닌 새로운 형태의 Code Generator만들어서 사용할 수 있다는 이야기일 것 같습니다. 네 맞습니다. 아래의 URL을 참고하여 기본적인 내용을 확인할 수 있습니다.
http://drewnoakes.com/snippets/WritingACustomCodeGeneratorToolForVisualStudio/
자 다음으로 ORM에 독립적인 business class를 작성하기 위해서 POCO class Template을 설치하고 사용합니다. 이 또한 T4 Template입니다.
먼저 [Tools]-[Extension Manager]를 엽니다.
[Online Gallery]를 선택합니다.
우측의 검색박스에 “EF 4.x POCO Entity Generator for C#”으로 검색하고 설치합니다.
설치가 완료되면 이미 생성해두었던 mycompany.edmx를 열고 [Add Code Generation Item…]을 선택합니다.
[Code]-[EF 4.x POCO Entity Generator]을 선택, 아래에 “mycompany.tt”을 입력하고 [Add]버튼을 클릭합니다.
tt를 통해 Data context class와 Model class가 생성되어집니다.
나머지 [Controller]와 [View]는 기본 Scaffolding으로 생성합니다.
이 시점에서 컴파일을 한번 해줍니다. Model class가 생성되어 다음 scaffold에서 참조하기 위함입니다.
그리고 [Controller]폴더의 팝업메뉴의 [Add]-[Controller]를 선택합니다.
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를 선택합니다.
지정된 매개변수로 각 페이지들이 T4 Template에 의해서 자동으로 작성되어지는 것을 목격할 수 있습니다.
자 이제 이미 말씀드린대로 별도의 코딩한 줄 없이 아주 간단한 형태의 CRUD동작을 수행할 수 있는 MVC internet application을 완성하였습니다.
결과를 확인합니다.
만족스럽지 못한 결과입니다.
그럼 만들어진 뼈대를 수정하면서 사용하는 것이 당연한 수순입니다.
하지만 여기서 우리 회사에는 이 정도는 자동으로 만들어진다면 매번 수행하는 작업의 상당한 부분을 절약할 수 있을텐데라고 생각할 수 있습니다.
바로 이를 위해서 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파일을 엽니다.
아래와 같이 주석을 추가합니다.
변경된 내용을 저장함과 동시에 실행되어 반영되어집니다.
2. Model class에 주석 남기기
아래와 같이 model class를 엽니다.
Namespace 바로 밑에 주석을 추가합니다.
마찬가지 저장과 동시에 실행되면서 반영되어짐을 확인할 수 있습니다.
3. Controller class에 주석을 추가하기
“C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 4\CodeTemplates\AddController\controllerwithcontext.tt”을 엽니다.
주석을 추가합니다.
참고: 관리자권한으로 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”
주석을 추가합니다.
이제 기존의 솔루션에 contacts2Controller를 추가해봅니다.
scoffolding되어진 주석을 확인하여 [add]버튼을 클릭하면.. OMG… 급 OTL…
위의 에러문을 활용하여 구글 검색을 통해서 아래와 같이 microsoft의 tangible editor의 issue라는 내용과 함께 해결책이 제시되어 있습니다.
tangible-engineering 의 Managing Director: Dipl.-Inf. Tim F. Fischer가 MVC3 tools update와 함께 해결이 되었다고 하나 저는 MVC4를 사용해서 그런지 해당 패치를 해도 같은 현상이 있어 해결책이라고 되어 있는 dll파일의 full path를 주는 방법으로 아래와 같이 해결하였습니다.
까짓거 공짜로 쓰고 같은 엔지니어끼리 좀 이해하면서 살자는 생각으로 이해하고 넘어갑니다. (해결책만 다오..ㅋㅋ)
그래서 다시 한번 scaffolding하면 아래와 같이 주석이 추가된 결과물을 확인할 수 있습니다.
이번 세션은 여기까지입니다.
4번째 세션까지 오면서 까지도 거의 T4는 어떤 것인지에 포인트를 맞추어 설명을 드렸습니다.
기본 강좌이니만큼 전체적인 아주 기본적인 것을 위주로 알아보는 내용입니다.
앞으로는 실제 T4의 작성에 있어서 필요한 기본적인 사항을 하나 하나 짚어보도록 하겠습니다.
Comment 5
-
한머리
2012.04.18 09:08
넘치는 관심 감사합니다. :)
-
오옷~ 감사합니다. 강좌 완료되면 세미나 한번 진행해도 좋을 내용~ 추천추천입니다~
-
유스
2012.04.18 16:38
아... 어렵네용... 저만 바보인듯한 기분.......
결국 MVC에서 자동으로 코드 만들어주는것도 저런 방식으로 만들기 때문에 템플릿을 수정하면 기본으로 생성되어지는 부분도 어느정도 활용이 가능하다..... 라는게 요점인듯..
따라하면서 보니 저기 위에 있는 ASP .NET MVC 4 Web Application 을 못 구해서 MVC 3으로 따라했습니다..
MVC 4는 도데체 어디서 구하신??
이미지가 많아서 따라하기 좋네요.
잘 보고 있습니다..
다른 분들도 부끄럼쟁이라 댓글을 안 다실뿐이지 많이 보고 계신듯.. 조회수가.. ^^
-
한머리
2012.04.18 17:07
MVC 4는 아직 베타입니다. 아래의 URL을 통해서 내용도 확인하고 설치가 가능하십니다.
요점도 정확히 보신 것 같습니다.
그리고 탬플릿은 어느 정도 활용가능한게 아니라 t4만 알면 완전히 다른 형태로도 수정가능하며 view의 경우에는 해당 경로 새로운 tt파일을 넣으면 새로운 템플릿도 추가 가능합니다.
한머리님~ 관심 대단히 많습니다. 저도 공부 하면서 한머리님 강좌로 T4 template 시작해야겠습니다.
감사해요~