티스토리 뷰



"ASP.NET 레이저(Razor) 시작하기"에 이어서 VB.NET 기반의 레이저 문법을 정리해 봅니다.

@Code
    Dim today_str = "오늘은 " + DateTime.Now.Date.ToString() + " 입니다."
    Dim req_type As String = Request.RequestType
    Dim max_year As Integer = 200
End Code

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Welcome page</title>
    </head>
    <body>
    <p>페이지 방문을 환영합니다. @today_str</p>
        <p>요청 내용 :</p>
        <ul> @* 코드 외부 주석 *@
        <li>URL : @Request.Url</li>
        <li>요청형식 : @req_type</li>
        <li>길이 : @Request.ContentLength</li>
        </ul>
@Code
    @<p>주요 설정 :</p> @:테스트 메시지<br/>
@* 코드내 주석 *@ 
    @<span>입력 가능 연도 : @max_year</span>
End Code
    </body>
</html>


■ 기본 문법

@Code .... End Code 블럭으로 표현하는 VB.NET 코드는 VB.NET의 문법을 그대로 준용해서 사용합니다. 대소문자를 가리지 않는 변수명 사용, 줄 나누기로 문장을 구분하며 여러 줄에 한 문장을 기술하는 경우 줄 끝에 _ 문자를 사용하는 등 VB.NET 문법을 그대로 사용 할 수 있습니다. 변수 선언 또한 위의 예제와 같이 VB.NET 처럼 Dim 키워드를 이용해서 타입을 미리 지정하지 않는 형태를 사용할 수 도 있고, byte, integer, short, long, single, double, decimal, String, boolean과 같이 데이터 타입을 지정해서 선언할 수도 있습니다. 


@* .... *@ 블럭으로 기술할 수 있는 주석문은(Comment)  @Code .... End Code 코드 블럭의 내부에서도 HTML코드를 기술하는 블럭 외부에서도 사용할 수 있습니다. 위의 그림은 앞선 예제를 웹브라우저를 통해서 확인한 것으로 "@* 코드 외부 주석 *@"와 "@* 코드내 주석 *@" 모두 주석 처리가 되어서 결과 페이지에는 표시되지 않음을 확인할 수 있습니다. 코드 블럭 내부에서는 VB.NET 문법을 준용하므로 ' 문자를 통한 주석 처리도 가능합니다.

@Code .... End Code 코드 블럭 외부에서 변수나 오브젝트를 참조하려면 "@today_str"나 "@Request.ContentLength" 처럼 변수명이나 오브젝트 앞에 @를 붙여서 사용하면 서버의 페이지 제작 과정에 해당하는 값으로 대치시켜 줍니다. PHP에서는 <?=변수명?>으로 ASP에서는 <%=변수명%>으로 사용한 것에 비하면 아주 간단해 졌습니다. 

@Code .... End Code 코드 블럭 내부에서는 그냥 VB.NET 코드로 작성하면 되지만 레이저 문법에서는 코드 블럭 내부에서도 <a> ... </a>처럼 HTML 태그를 시작...끝으로 구분할 수 있거나 "<input ...>"태그처럼 태그 블럭이 명확하다면 "@<span>입력 가능 연도 : @max_year</span>"처럼 코드 블럭 내부에서도 HTML 코드를 자연스럽게 작성할 수 있고 태그 블럭 내부에 변수나 오브젝트 참조를 사용할 수 있습니다. C# 레이저 문법에서는 HTML 태그 블럭을 그대로 기술해도 되지만 VB.NET 레이저 문법에서는 HTML 태그 블럭 앞에 @ 문자를 붙여주어야 합니다. 

VB.NET 레이저 코드 블럭 내부에서 단순 텍스트를 출력하고 싶은 경우에는 "@:테스트 메시지<br/>" 처럼 "@:"를 기술하여 해당 라인의 그 이후를 VB.NET 코드가 아니라 HTML 코드로 취급하도록 지시할 수 있습니다. 단순텍스트를 "@<text>...</text>"라는 태그 블럭으로 묶어서 코드 블럭 내부에서 단순텍스트를 출력할 수도 있습니다. "<text>...</text>" 태그는 레이저 코드 블럭 내부에서만 의미가 있습니다. 코드 블럭 내부에 HTML 마크업을 자연스럽게 사용할 수 있다는 점은 PHP나 ASP에서는 HTML 마크업을 출력하기 위해서 코드 블럭을 닫고/열기를 반복하면서 소스코드가 지저분해지는 현실을 생각하면 좋은 아이디어라 여겨집니다.

HTML 마크업 사이에 @변수명은 VB.NET 변수나 오브젝트를 참조하는 것으로 취급하는데 "@변수명"이 참조가 아닌 단순 텍스트로 표시 하기 위해서는(Escape) "@@변수명" 처럼 @문자 앞에 @를 하나더 붙여주면 됩니다.


■ 또다른 VB.NET 레이저 코드 블럭

레이저 VB.NET 문법의 코드 블럭은 단순히  @Code ... End Code로만 표현하는 것을 넘어서서 "@If a > 100 Then ... End If"와 같이 VB.NET에서 코드 블럭을 표현하는 주요 표현식을 그대로 사용할 수 있습니다. if, for, for each, while, select 등을 들 수 있습니다. 

    <ul>
    @For i = 1 To 5
        @<li>@i item </li>
    Next i
    </ul>

    <ul>
    @For Each ri In Request.Cookies
        @<li>@ri</li>
    Next ri
    </ul>

    <ul>
    @Code
        Dim svcnt As Integer = Request.ServerVariables.Count
    End Code
    @do while svcnt > 0
        svcnt -= 1
        @<li>@Request.ServerVariables(svcnt)</li>
    Loop
    </ul>

    @If IsPost Then
        @<p>This is POST!</p>
    Else
        @<p>This is GET!</p>
    End If

    @Select Case DateTime.Now.DayOfWeek.ToString()
    Case "Sunday" 
        @<p>주말 입니다!</p>
    Case "Saturday"
        @<p>주말 입니다!</p>
    Case Else
        @<p>평일 입니다! @DateTime.Now.DayOfWeek</p>
    End Select

위의 예제에서도 살펴 볼 수 있듯이 VB.NET의 문법을 그대로 가져와서 레이저 VB.NET 코드 블럭을 간편하게 작성할 수 있습니다. 단순 코드 블럭을 나타내는 @Code 대신 if, for, for each, while, select등의 키워드를 사용하고 End Code대신 각 키워드의 블럭 종료 키워드인 End If, Next, Loop, End Select를 기술하여 간편하게 루프나 분기가 필요한 레이저 VB.NET 표현식을 사용할 수 있는 것입니다. 각 코드 블럭 내부 에서의 표현은 기본 코드 블럭 사용법과 동일합니다. 각 키워드의 사용법에 대해서는 VB.NET과 동일하므로 생략합니다. 서버에서 페이지를 작성하는 과정에 파일이 없거나 기타 예외 상황이 발생하면 페이지 오류 또는 서버 에러가 발생할 수 있는데 이런 경우도 VB.NET 처럼 try...catch...end try문을 적용해서 사용자 친화적인 예외 처리를 할 수 있습니다. 예를 들면 Response.Redirect 메소드를 통해서 오류 발생시 직전 화면이나 홈으로 이동시킬 수 있을 것입니다.


■ 페이지 오브젝트

ASP.NET에서는 개발자가 별도로 선언하거나 정의하지 않아도 기본적으로 제공하는 오브젝트들이 있습니다. 앞선 예제에서 사용한 Request, IsPost, Datetime 등이 시스템에서 제공하는 오브젝트의 예 입니다. 

ASP.NET 오브젝트 중의 핵심은 클라이언트에서 올라온 요청 정보를 담고 있는 Request와 내려갈 응답 정보를 담고 있는 Response로 이들을 페이지 오브젝트라(Page Objects) 합니다. 이들 오브젝트의 사용 가능한 속성이나 메소드는 웹매트릭스("무료 웹 개발도구 웹매트릭스 설치하기 - WebMatrix3" 참조)나 비주얼스튜디오의 편집기에서 제공하는 자동 완성 기능(IntelliSense)의 도움을 받아 편리하게 사용할 수도 있습니다.

Request와 Response외에도 Page, Server, Layout, IsPost 등의 속성을 사용할 수 있으며 href, RenderBody, RenderPage, RenderSection, Write, WriteLiteral 등의 메소드를 활용할 수 있습니다. 상세한 설명은 아래와 같은 MSDN 페이지를 참조하세요. 


■ 데이터 형 변환

웹 클라이언트와 서버간의 데이터 송수신은 대부분이 문자열입니다. 숫자를 입력 받는 항목에서 사용자가 숫자를 입력했더라도 바이너리(Binary) 값이 아니라 0~9로 구성된 숫자값이 전송되는 것입니다. 그러므로 서버에서의 데이터 조작은 대부분 문자열 처리 과정으로 이루어지지만 숫자 값에 대한 연산이 필용한 경우 적절한 형변환이 필요합니다. 

레이저에서는 문자열에 대해서 IsInt(), IsBool(), IsFloat(), IsDecimal(), IsDateTime()과 같은 메소드를 사용해서 문자열의 데이터형을 사전에 검증할 수 있고 AsInt(), AsBool(), AsFloat(), AsDecimal(), AsDateTime() 메소드로 문자열을 원하는 데이터 형으로 간편하게 변환할 수 있습니다. 물론 각 데이터 형을 ToString()을 사용하여 문자열로 변환할 수 있습니다.


댓글
댓글쓰기 폼