'Scottgu'에 해당되는 글 1건

  1. 2010.07.05 Introducing "Razor" - a new view engine for ASP.NET (8)
안녕하세요? 웹지니입니다.

주말 동안에 구슬이 횽아가 멋진 소식을 전했네요. 뭐 거두 절미하고 번역 들어갑니다. ㅋ 원문은 여기를 클릭하세요.
(제가 태우는 담배가 레종 - Raison - 인데 발음이 비슷해서 그런가 왠지 친근한 느낌이... 켈룩 -ㅅ-;;)

달랑 점심 시간 1시간을 투자해서 번역한 글이라 다소 투박하거나 원문과 일치하지 않을 수 있음을 양해해 주시기 바랍니다.

UPDATED: ASP.NET Web Pages라는 이름으로 Razor Syntax를 지원하는 VS 2010 애드온의 베타 1버전이 발표 되었어요. 아쉽게도 현재로서는 .NET 4만 지원하는 것 같습니다. 정식 릴리즈때는 3.5도 지원해주면 좋겠네요. 다운로드는 여기로!!

ASP.NET의 새로운 뷰 엔진 - Razor

우리 팀에서 진행하는 작업 중 하나는 ASP.NET을 위한 새로운 뷰 엔진 옵션을 구현하는 것이었습니다.

ASP.NET MVC는 "뷰 엔진"이라는 개념을 지원하는데 이 뷰 엔진이란 서로 다른 템플릿 문법을 구현하는 교체 가능한 모듈입니다. ASP.NET MVC가 사용하는 기본 뷰 엔진은 ASP.NET 웹 폼의 템플릿과 마찬가지로.aspx/.ascx/.master 파일들을 사용합니다. 그 외에도 ASP.NET MVC 뷰 엔진으로 SparkNHaml이 많이 사용되고 있습니다.

우리가 구현하는 새로운 뷰 엔진은 코드 중심의 템플릿 접근법을 사용한 HTML의 생성에 최적화되어 있습니다. 이 새로운 뷰 엔진의 코드명은 "Razor"로 조만간 첫 번째 공식 베타 버전을 릴리즈할 예정입니다.

디자인 목표

우리는 "Razor"를 구현하면서 다음과 같은 디자인 목표를 수립했습니다.
  • 간결하고 유기적이며 풍부한 표현: Razor는 파일을 작성하는데 필요한 문자와 입력 수를 최소화하여 빠르고 유기적으로 워크플로우를 코딩할 수 있습니다. 다른 템플릿 문법들과 달리 Razor는 HTML 코드 내에 서버 측 코드를 명시적으로 표시할 필요가 없습니다. Razor 파서는 여러분의 코드 내에서 서버 측 코드를 알아서 유추해 냅니다. 따라서 정말 간결하며 풍부한 표현이 가능한 문법을 제공할 수 있기 때문에 빠르고 재미있게 코드를 작성할 수 있습니다.
  • 쉬운 학습: Razor는 배우기 쉬우며 최소한의 개념으로 매우 생산적으로 코드를 작성할 수 있습니다. 여러분은 이미 알고 있는 언어와 HTML 기술을 그대로 활용할 수 있습니다.
  • 새로운 언어는 아닙니다: 우리는 의도적으로 Razor를 위한 새로운 언어를 구현하지 않았습니다. 대신 개발자들이 이미 친숙한 C#과 VB (혹은 다른 언어)를 Razor와 함께 사용할 수 있기를 원했으며 여러분이 사용하는 언어를 토대로 놀라운 HTML 생성 기능을 제공하는 템플릿 마크업 문법을 제공하고자 했습니다.
  • 모든 텍스트 편집기에서 동작: Razor는 특별한 도구를 필요로 하지 않으며 평범한 텍스트 편집기에서도 코드를 작성할 수 있습니다(심지에 메모장으로도 훌륭한 결과를 만들어 낼 수 있습니다).
  • 훌륭한 인텔리센스 지원: Razor가 별도의 도구나 코드 편집기를 필요로 하지는 않지만 Visual Studio에서는 완벽한 인텔리센스를 지원합니다. Visual Studio 2010과 Visual Web Developer 2010은 Razor를 위한 완벽한 기능의 코드 편집기를 제공합니다.
  • 단위 테스트: 새로운 뷰 엔진은 뷰에 대한 단위 테스트를 제공합니다(컨트롤러나 웹 서버 및 특별한 AppDomain 없이도 모든 종류의 단위 테스트 프로젝트를 호스팅할 수 있습니다).
우리는 지난 몇 개월 간 애플리케이션의 구현을 위해 Razor를 사용했으며 (.NET이 아닌 다른 분야의 웹 개발자들의 그룹을 포함한) 다양한 자원봉사자들과 여러 가지 사용성 연구를 하고 있습니다. 많이 사용해 보시고 다양한 피드백을 주시면 감사하겠습니다.

선택과 확장성

ASP.NET의 훌륭한 기능 중 하나는 대부분의 기능들이 교체 가능하다는 점입니다. 만일 여러분이 원하는대로 동작하지 않는 기능을 발견한다면 다른 모듈로 대체할 수 있습니다.

ASP.NET MVC의 다음 버전에서는 "추가 > 뷰" 대화 상자를 새로 구현하여 뷰 템플릿 파일을 생성할 때 여러분이 템플릿 문법을 선택할 수 있도록 개선될 예정입니다. 또한 시스템에 설치되어 사용 가능한 뷰 엔진 중 하나를 손쉽게 선택할 수 있는 기능을 제공하여 보다 자연스럽게 뷰를 선택할 수 있게 될 것입니다.


Razor는 ASP.NET MVC에 내장된 뷰 엔진 중 하나가 될 것입니다. 모든 도우미 메서드들과 프로그래밍 모델 기능들은 Razor와 .ASPX 뷰 엔진에서 동일하게 적용됩니다.

또한 하나의 애플리케이션이나 사이트에서 여러 개의 뷰 엔진을 사용하는 뷰 템플릿을 혼합해서 사용할 수 있습니다. 예를 들어 일부 뷰는 .aspx 파일을 사용하고 다른 일부는 .cshtml이나 vbhtml 파일(각각 C#과 VB.NET을 위한 Razor의 파일 확장자입니다)을 사용할 수 있으며 또 다른 일부는 Spark나 NHaml을 사용하여 구성할 수 있습니다. 또한 어떤 뷰 엔진을 사용하는 뷰 템플릿 내에서 다른 뷰 엔진을 위한 부분 뷰(Partial View)를 중첩할 수도 있습니다. 여러분은 완벽한 선택과 유연성의 혜택을 보게 될 것입니다.

Razor를 이용한 Hello World 예제

Razor를 이용하면 정적 HTML (혹은 다른 텍스트 콘텐츠)에 서버 코드를 추가하여 동적인 페이지를 구성할 수 있습니다. Razor의 핵심 디자인 목표 중 하나는 이러한 코딩 과정을 보다 유기적으로 만들어 최소한의 코딩으로 서버 코드를 HTML 마크업에 추가할 수 있도록 하는 것입니다.

그러면 아래와 같은 결과를 만들어 내는 간단한 "Hello, World" 예제를 만들어 보겠습니다.


.ASPX 코드로 구현된 뷰

이 "Hello World" 예제를 ASP.NET의 ASPX 마크업 문법으로 구현한다면 우리는 HTML 마크업 내의 코드를 표현하기 위해 아래와 같이 <%= %> 태그를 사용해야 합니다.


이 "Hello World" 예제를 잘 살펴보면 코드의 시작과 끝을 알리기 위해 5개의 문자(<%= %>)가 필요합니다. 이들 중 일부(특히 키보드의 가운데 상단에 있는 % 문자)는 입력하기가 쉽지 않습니다.

Razor를 이용한 뷰

Razor에서는 @ 문자를 이용하여 코드의 시작과 끝을 표시할 수 있습니다. <% %> 태그와 달리 Razor는 코드 블록을 명시적으로 닫을 필요가 없습니다.


Razor 파서는 코드 블록 내에서 사용된 C#/VB 코드를 의미적으로 파악하기 때문에 위에서와 같이 코드 블록을 명시적으로 닫을 필요가 없습니다. Razor는 이런 구문들을 자체 코드 블록으로 파악하고 우리를 대신해 묵시적으로 코드 블록을 닫아줍니다.

이렇게 간단한 "Hello World" 예제에서 우리는 벌써 12개의 키 입력을 아낄 수 있었습니다. @ 문자는 % 문자보다 더 쉽게 입력할 수 있기 때문에 전체적으로 빠르고 유기적으로 코드를 입력할 수 있습니다.

루프와 중첩된 HTML 예제

일련의 제품 목록(과 제품의 가격)을 나열하는 또 다른 예제를 살펴보도록 합시다.


.ASPX 코드로 구현된 뷰

ASP.NET의 .ASPX 마크업 문법을 사용한다면 각각의 제품 정보를 나열할 <ul> 목록과 <li> 항목을 동적으로 생성하기 위해 아래와 같이 코드를 작성해야 합니다.


Razor를 이용한 뷰

아래의 예제 코드는 위의 코드를 Razor로 구현한 코드입니다.


위의 예제에서 알 수 있듯이 foreach 구문은 @ 기호를 이용하며 코드 블록 내에서 HTML 콘텐츠를 생성합니다. Razor 파서는 코드 블록 내의 C# 코드의 의미를 알고 있으므로 <li> 콘텐츠는 foreach 구문 내에 존재해야 하며 반복되는 콘텐츠로 처리됩니다. 또한 마지막의 } 문자는 foreach 구문을 종료하기 위한 것이라는 점도 인식합니다.

Razor는 <li> 태그 내의 @p.Name과 @p.Price 구문이 서버 측 코드이며 루프 내에서 매번 실행해야 한다는 것을 인식할 만큼 충분히 똑똑합니다. 또한 HTML과 코드가 혼합된 상황에서 유추를 통해 @p.Name과 @p.Price 코드를 자동적으로 닫아야 한다는 점도 스스로 알아냅니다.

이처럼 코드 블록을 열거나 닫기 위한 기호 없이도 코드를 작성할 수 있다는 것은 전체적인 코딩 프로세스를 매우 유기적이며 빠르게 만들어 줍니다.

If 블록과 다중 구문

아래와 같은 몇 가지 예제 코드를 더 살펴보겠습니다.

if 구문

foreach 예제와 마찬가지로 if 구문(혹은 C#이나 VB외의 다른 언어 구조)에서도 명시적인 코드 블록의 시작과 끝을 지정하지 않고도 콘텐츠를 포함할 수 있습니다. 예제를 살펴보겠습니다.


다중 구문

또한 @{ code } 블록내에 여러 줄의 구문을 포함할 수도 있습니다.


위의 예제에서 알 수 있듯이 변수들은 여러 개의 서버 코드 블록으로 확장될 수 있습니다. 예를 들어 message 변수는  여러 구문을 포함하는 @{ } 블록에 선언되었지만 @message 코드 블록에서도 사용됩니다. 이는 개념적으로 .aspx 마크업 파일의 <% %>와 <%= %> 구문과 동일합니다.

다중 토큰 구문

@( ) 구문은 여러 개의 토큰을 가질 수 있습니다. 예를 들어 문자열을 조합하는 앞서 예제의 코드는 다음과 같이 @( ) 코드 블록으로 재작성할 수 있습니다.


콘텐츠와 코드의 통합

Razor 파서는 여러분이 명시적으로 해왔던 작업들을 간소화할 수 있는 여러 가지 내장 기능들을 제공합니다.

HTML에서 메일 주소에 사용된 @와 충돌은 없나요?

Razor의 언어 파서는 템플릿에 사용된 @ 문자가 코드인지 정적 콘텐츠인지를 구분할 수 있습니다. 예를 들어 아래의 @ 문자는 메일 주소의 일부로 사용되고 있습니다.


이 파일을 파싱할 때 Razor 파서는 @ 문자 오른편의 콘텐츠가 C# 코드인지(CSHTML 파일의 경우) 아니면 VB 코드인지(VBHTML 파일의 경우) 아니면 그냥 정적인 콘텐츠인지를 판단합니다. 위의 코드는 아래와 같은 HTML 코드를 만들어 냅니다(메일 주소는 정적인 콘텐츠로 표현되며 @DateTime.Now는 서버 코드로 표현되고 있습니다).


콘텐츠가 코드로도 사용될 수 있는 경우(그리고 여러분은 이 콘텐츠를 콘텐츠로 처리하고 싶은 경우)에는 @@을 입력하여 명시적으로 @문자로 취급하도록 할 수도 있습니다.

중첩된 코드의 식별

if/else 구문이나 foreach 등 코드 블록 구문을 이용하여 HTML 콘텐츠를 중첩할 때 콘텐츠 블록의 시작을 명시적으로 판별할 수 있도록 HTML이나 XML 요소로 내부의 콘텐츠를 감싸야 합니다.

예를 들어 아래의 코드는 (서버 코드를 포함한) 다중 콘텐츠 블록을 <SPAN> 요소로 감싸고 있습니다.


이 코드는 다음과 같이 <SPAN> 태그를 그대로 사용하는 HTML 콘텐츠를 만들어 냅니다.


중첩된 콘텐츠를 <text> 블록으로 감싸면 콘텐츠를 감싸는 태그를 생략하고 나머지 콘텐츠만 렌더링할 수 있습니다.


위의 코드는 아래와 같이 콘텐츠를 감싸는 태그를 생략한 결과를 만들어 냅니다.


HTML 인코딩

기본적으로 @ 블록에 의해 출력되는 콘텐츠는 XSS 공격을 차단하기 위해 자동적으로 HTML 인코딩된 값으로 출력됩니다.

레이아웃/마스터 페이지 시나리오 - 기초

웹 사이트나 웹 애플리케이션에서 일관된 UI를 제공하는 것은 매우 중요한 일입니다. ASP.NET 2.0은 "마스터 페이지" 개념을 도입하여 .aspx 기반 페이지와 템플릿에 일관된 UI를 구현할 수 있는 기능을 제공합니다. Razor 또한 "레이아웃 페이지"를 제공하기 때문에 일반적인 사이트의 템플릿을 정의하고 이를 상속하여 사이트 내의 뷰와 페이지가 일관된 UI를 구현할 수 있습니다.

간단한 레이아웃 예제

아래의 예제는 SyteLayout.cshtml이라는 파일에 작성한 간단한 레이아웃 페이지입니다. 이 페이지에는 정적인 HTML 콘텐츠는 물론 동적인 서버 코드도 작성할 수 있습니다. 또한 "RenderBody()" 도우미 메서드를 호출해서 요청된 URL에 대한 콘텐츠를 채워넣을 수 있습니다.


그런 후 요청된 페이지를 위한 페이지 본문을 구성하는 콘텐츠/코드를 가지고 있는 "Home.cshtml" 뷰 템플릿을 생성하고 아래와 같이 콘텐츠를 작성하면 됩니다.


위의 코드에서 보듯이 LayoutPage 속성에 Home.cshtml 파일을 지정하였습니다. 이렇게 하면 이 뷰에 대한 레이아웃 페이지로 SiteLayout.cshtml 파일이 사용됩니다. 혹은 ASP.NET MVC 컨트롤러가 Home.cshtml 파일을 뷰 템플릿으로 호출할 때 레이아웃 파일을 지정하거나 아니면 사이트를 위한 기본 레이아웃을 설정할 수도 있습니다(이 경우 프로젝트 내의 모든 뷰 템플릿이 자동적으로 지정된 하나의 레이아웃 페이지를 사용하게 됩니다).

Home.cshtml 파일을 뷰 템플릿으로 렌더링하면 레이아웃과 자식 페이지의 콘텐츠가 하나로 합쳐져 아래와 같은 결과를 만들어 냅니다.


간결하고 명확하며 풍부한 표현이 가능한 코드

위의 예제에서 알 수 있듯이 레이아웃을 정의하고 사용하면 뷰나 페이지를 간결한 코드로 명확하게 구현할 수 있습니다. SiteLayout.cshtml 파일과 Home.cshtml 파일의 코드는 모든 콘텐츠를 두 개의 .cshtml 파일로 구성합니다. 즉, 추가적인 설정이나 태그도 필요치 않으며 <%@Page %> 디렉티브도 필요하지 않으며 다른 어떤 태그나 값을 설정할 속성도 필요치 않습니다.

우리는 여러분이 간력하고 쉬우며 유기적인 코드를 작성할 수 있도록 노력하고 있습니다. 또한 텍스트 편집기 만으로 모든 작업이 손쉽게 가능하도록 구현하고자 합니다. 여기에는 어떠한 코드 생성이나 인텔리센스도 필요치 않습니다.

레이아웃/마스터 페이지 시나리오 - 섹션 덮어쓰기

레이아웃 페이지에는 또 다른 섹션을 정의하여 해당 레이아웃을 사용하는 뷰 템플릿이 사용자 정의 콘텐츠를 채워넣을 수 있는 기능을 제공합니다. 이 기능을 활용하면 단편화된 콘텐츠 영역을 레이아웃 페이지에 채워넣어 사이트의 레이아웃에 대한 유연성을 확보할 수 있습니다.

예를 들어 SiteLayout.cshtml 파일에 두 개의 섹션을 추가하여 사이트가 제공하는 뷰 템플릿을 어디에 채워넣을지를 결정할 수 있습니다. 새로 추가된 섹션들은 "menu"와 "footer"라고 명명하고 RenderSection() 메서드를 호출할 때 optional=true 매개 변수를 지정하여 해당 섹션이 선택적인(즉, 반드시 필요하지는 않은) 부분이라고 표시할 수 있습니다(이 기능은 제가 예전에 포스팅했던 C#의 새로운 선택적 매개 변수 문법을 통해 구현됩니다).


새로 추가된 두 섹션은 선택적인 섹션으로 표시하였기 때문에 이 두 섹션을 Home.cshtml 파일에 정의할 필요는 없습니다. 따라서 이 사이트는 두 개의 섹션에 채워질 뷰 템플릿이 존재하지 않더라도 잘 동작합니다.

그러면 Home.cshtml 파일로 돌아가 Menu와 Footer 섹션을 정의해 보겠습니다. 아래의 코드는 Home.cshtml 파일의 모든 콘텐츠를 구현한 코드입니다. 별도로 다른 파일에 구현할 필요는 없습니다. 한 가지 변경된 것은 LayoutPage 속성 설정을 전체 사이트를 위한 설정으로 변경했다는 점입니다.


Menu와 Footer 섹션은 파일 내의 @section {}  블록을 통해 재정의되었습니다. 주 콘텐츠와 본문 콘텐츠를 구별할 필요 없이 단순히 인라인 코드로 정의하기만 하면 됩니다 (이렇게 함으로써 키 입력을 줄일 수 있음은 물론 이미 존재하는 페이지의 코드를 변경하지 않고도 레이아웃 페이지에 새로운 섹션을 손쉽게 추가할 수 있습니다).

Home.cshtml 파일을 다시 렌더링해보면 레이아웃과 서브 페이지들의 콘텐츠가 결합되어 새로 정의한 두 개의 섹션이 나타나게 될 것입니다. 클라이언트에 전송되는 HTML 코드는 다음과 같습니다.


캡슐화와 HTML 도우미 클래스의 재사용

지금까지 레이아웃 페이지를 이용해 사이트 전반의 UI를 구성하는 방법에 대해 알아보았습니다. 이제는 HTML 도우미 클래스를 재사용하여 HTML 생성 기능을 전체 사이트 - 는 물론 서로 다른 여러 사이트에서도 - 에서 재사용하는 방법에 대해 알아보겠습니다.

코드 기반 HTML 도우미

ASP.NET MVC에서는 코드 블록 내에서 호출이 가능하며 HTML 코드를 생성하는 HTML 도우미 메서드라는 개념을 제공합니다. 이들은 순수하게 코드로 (특히 확장 메서드 형태로) 구현되어 있습니다. ASP.NET MVC에 내장된 모든 HTML 확장 메서드는(여러분이 직접 구현하든 다른 사람이 구현했든) Razor 뷰 엔진에서도 그대로 활용할 수 있습니다.


선언적 HTML 도우미

코드만으로 구성된 클래스를 이용하여 HTML 출력물을 생성하는 방법은 잘 동작하기는 하지만 이상적인 형태는 아닙니다.

우리가 Razor를 통해 제공하고자 했던 기능 중 하나는 재사용 가능한 HTML 도우미를 보다 선언적인 방법으로 사용할 수 있도록 하는 것이었습니다. 아래와 같이 @helper {} 문법을 이용하면 재사용 가능한 도우미를 정의할 수 있습니다.


여러분은 Views\Helpers\ 디렉토리에 세 개의 .cshtml 파일을 구현하고 이를 사이트 내의 다른 어떤 뷰나 페이지에서도 재사용할 수 있습니다(특별히 다른 단계를 밟을 필요가 없습니다).


위의 예제에서 보듯이 ProductListing() 도우미 메서드는 매개 변수와 인자를 정의할 수 있습니다. 따라서 여러분은 원하는 어떤 것이든 매개 변수로 전달할 수 있습니다(또한 선택적 매개 변수와 Nullable 타입, 제네릭 등 기존의 언어적 특성들을 그대로 활용할 수 있습니다). 또한 Visual Studio를 사용한다면 이 메서드들을 디버깅할 수도 있습니다.

참고: @helper 구문은 Razor의 첫 번째 베타에는 포함되지 않을 예정이지만 이후의 버전에는 포함될 것입니다. 코드 기반 도우미는 첫 번째 베타에서 정상적으로 동작할 것입니다.

인라인 템플릿을 매개 변수로 전달하기

Razor의 또 다른 유용한 (그리고 정말 강력한) 기능은 "인라인 템플릿"을 도우미 메서드의 매개 변수로 전달할 수 있다는 점입니다. 이러한 "인라인 템플릿"은 HTML과 코드를 모두 포함할 수 있으며 필요에 따라 도우미 메서드에서 호출할 수도 있습니다.

아래의 예제는 DataGrid를 렌더링하는 "Grid" HTML 도우미 메서드를 사용하는 방법을 보여줍니다.


위의 예제에서 호출하는 Grid.Render() 메서드는 C# 구문입니다. 우리는 C#의 새로운 명명된 매개 변수 문법을 이용하여 강력하게 형식화된 인수를 Grid.Render 메서드에 전달합니다. 따라서 위의 구문은 컴파일 시점에 완벽한 코드 완성 및 인텔리센스의 지원을 받을 수 있습니다.

우리가 컬럼을 정의할 때 전달한 "format" 매개 변수가 바로 "인라인 템플릿"이며 보시다시피 HTML과 코드를 모두 포함하여 출력될 데이터의 형식을 재정의할 수 있습니다. 이 기능의 강력한 점은 Grid 도우미가 인라인 템플릿을 마치 대리자 메서드처럼 호출할 수 있으며 필요에 따라 몇 번이고 호출할 수 있다는 점입니다. 예제에서는 Grid의 각 행을 렌더링할 때 매번 인라인 템플릿이 호출되며 데이터를 표시하는 역할을 담당하는 템플릿에서 참조할 수 있는 "item" 변수를 전달해 줍니다.

이 방법을 이용하면 보다 풍부한 HTML 도우미 메서드를 개발할 수 있습니다. 이러한 도우미 메서드는 코드 접근 방식(현재 확장 메서드를 이용하는 방식) 뿐만 아니라 @helper {} 구문을 이용하는 선언적 방식으로도 구현이 가능합니다.

Visual Studio 지원

앞서 설명했듯이 Razor의 구현 목표 중 하나는 최소한의 입력이며 기본적인 텍스트 편집기에서도 손쉽게 편집이 가능하도록 하는 것입니다. 이를 위해 우리는 문법 자체를 간결하며 명확하게 유지했습니다.

또한 우리는 Razor를 디자인함에 있어 Visual Studio의 풍부한 코드 편집 기능을 활용할 수 있도록 구현했습니다. Razor 기반 파일에서도 HTML과 자바스크립트, C#/VB 코드에 대한 인텔리센스 기능을 완벽하게 지원합니다.


위의 그림에서 보듯이 foreach 구문 내에 포함된 코드에서 @p를 통해 참조하는 Product 객체에 대해 인텔리센스 기능이 동작하는 것을 볼 수 있습니다. 또한 솔루션 탐색기를 보면 Views 폴더가 .aspx 뷰 템플릿과 .cshtml 뷰 템플릿을 모두 가지고 있음도 알 수 있습니다. 여러분은 하나의 애플리케이션에서 여러 가지 뷰 엔진을 사용할 수 있으며 이로 인해 여러분에게 적합한 뷰 엔진을 손쉽게 선택할 수 있습니다.

요약

우리는 "Razor"가 코드 중심의 템플릿을 위한 새로운 뷰 엔진이라고 생각합니다. Razor를 이용하면 빠르고 풍부하며 재미있는 코딩을 즐길 수 있습니다. 문법은 매우 간결하며 입력을 최소로 줄여주는 동시에 마크업과 코드의 가독성을 전체적으로 향상시켜줍니다. Razor는 ASP.NET MVC의 다음 버전에서는 내장 뷰 엔진 중 하나로 제공될 것입니다. 또한 개별적인 .cshtml/.vbhtml 파일을 애플리케이션에 추가하여 개별적인 페이지로 실행시킬 수도 있습니다. 이를 통해 ASP.NET 웹 애플리케이션에서도 Razor를 활용할 수 있게 됩니다.

우리가 지난 몇 달간 고생해서 만든 Razor를 많은 개발자들이 사용해보고 다양한 피드백을 제공해 주기를 기대합니다. 조만간 첫 번째 공개 베타를 공개할 예정이므로 많은 피드백을 제공해 주시기를 바랍니다.

이 글이 도움이 되었기를 바라며

Scott

P.S: 블로그 외에도 저는 트위터를 통해 업데이트 소식과 관련 링크를 전달하고 있습니다. twitter.com/scottgu를 통해 저를 팔로우 해주세요.


Posted by 웹지니 트랙백 0 : 댓글 8