푸터 콘텐츠로 바로가기
.NET 도움말

Razor C# (개발자를 위한 작동 방식)

Razor는 .NET Core와 .NET Framework를 사용하여 동적 웹 페이지를 생성하는 데 사용되는 서버 측 마크업 언어입니다. 이는 주로 ASP.NET Core와 함께 사용됩니다. Razor Pages는 응용 프로그램 내의 코드를 구조화하는 깨끗하고 간단한 방법을 제공하는 ASP.NET Core의 새로운 측면으로, 코드 중복 문제를 줄여줍니다. Razor는 C# 또는 VB(비주얼 베이직)를 HTML과 결합하여 웹 콘텐츠를 만듭니다.

이 튜토리얼은 Visual Studio에서 C#과 함께 Razor를 사용하여 기본 애플리케이션을 만드는 방법을 안내합니다. 시작해 볼까요!

필수 조건

Razor 세계로 들어가기 전에, 다음 항목이 설치되어 있는지 확인하십시오:

  1. .NET Core SDK
  2. Visual Studio

이들은 Razor View Engine과 이번 튜토리얼에서 사용할 프로젝트 템플릿을 제공합니다. 또한, 여러 운영 체제에서 작동할 수 있어 Windows, Linux, 또는 macOS의 어느 환경에서든 따라올 수 있습니다.

1단계: 새 Razor Pages 프로젝트 만들기

Microsoft Visual Studio를 열고 다음 단계를 따르세요:

  1. "파일" > "새로 만들기" > "프로젝트"를 클릭합니다.
  2. 프로젝트 템플릿 선택 화면에서 "Blazor 서버 앱"을 선택합니다.

Razor C# (개발자를 위한 작동 방식) 그림 1

  1. 프로젝트 이름을 "IronPDFExample"로 지정하고 "만들기"를 클릭합니다.

Razor C# (개발자를 위한 작동 방식) 그림 2

  1. 드롭다운에서 ".NET 7.0" 또는 그 이후 버전을 선택합니다.

Razor C# (개발자를 위한 작동 방식) 그림 3

이제 새로운 Razor Pages 프로젝트가 생겼습니다.

Razor 문법 및 파일 이해하기

Razor 파일은 .cshtml 파일 확장자를 사용하며, C#과 HTML이 결합됩니다. Visual Basic을 사용하고 있다면 파일 확장자가 .vbhtml로 변경될 것입니다.

솔루션 탐색기에서 'Index.cshtml'이라는 이름의 .cshtml 확장자 파일을 찾아 열어보세요. 여기에서 HTML 코드와 C# 코드의 결합을 볼 수 있습니다. 이 결합은 Razor 파서에 의해 가능합니다.

Razor 구문

ASP.NET Core에서 Razor 문법은 HTML과 서버 측 코드의 결합입니다. 서버 코드는 C# 또는 VB 코드입니다. Razor 코드는 @ 기호로 표시되며, HTML이 클라이언트에 보내지기 전에 서버에서 실행됩니다.

간단한 Razor 문법의 예:

<p>The current time is @DateTime.Now</p>
<p>The current time is @DateTime.Now</p>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<p> The current time is @DateTime.Now</p>
$vbLabelText   $csharpLabel

이 코드 예시에서, @DateTime.Now는 Razor 코드입니다. 이는 서버에서 실행되어, 현재 날짜와 시간으로 대체된 후에 클라이언트로 보내집니다.

Razor 뷰

Razor에서 "뷰"라는 용어는 사용자에게 정보를 제공하려는 웹 페이지를 의미합니다. Razor View Engine은 사용자에게 HTML 페이지를 렌더링하는 역할을 맡고 있습니다.

@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
page model ReadOnly Property () As IndexModel
	ViewData("Title") = "Home page"
End Property

'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<div class="text-center"> <h1 class="display-4"> Welcome</h1> <p> Learn about <a href="https://docs.microsoft.com/aspnet/core"> building Web apps @with ASP.NET Core</a>.</p> </div>
$vbLabelText   $csharpLabel

동적 콘텐츠를 위한 Razor 마크업 사용하기

Razor 마크업을 사용하여 HTML 마크업 내에 서버 측 코드를 삽입할 수 있습니다. 코드 블록, 인라인 표현식, HTML 인코딩된 표현식과 같은 다양한 코드 구조를 사용할 수 있습니다.

인라인 표현식

인라인 표현식은 다음 코드를 사용하여 그 결과를 HTML에 직접 출력합니다:

<p>Hello, my name is @Model.Name</p>
<p>Hello, my name is @Model.Name</p>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<p> Hello, my name is @Model.Name</p>
$vbLabelText   $csharpLabel

여기서 @Model.Name는 Razor 뷰에 전달된 모델에서 Name 속성의 값을 출력하는 인라인 표현식입니다.

코드 블록

코드 블록은 서버에서 실행되는 코드 세그먼트입니다:

@{
    var name = "IronPDF";
}
<p>Hello, my name is @name</p>
@{
    var name = "IronPDF";
}
<p>Hello, my name is @name</p>
@
If True Then
	Dim name = "IronPDF"
End If
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<p> Hello, my name is @name</p>
$vbLabelText   $csharpLabel

이 코드 예시에서, { } 사이의 Razor 코드는 코드 블록입니다.

제어 구조

Razor Pages에서 if 문과 루프와 같은 제어 구조를 사용할 수 있습니다:

@{
    var count = 5;
}

@if (count > 3)
{
    <p>The count is greater than 3.</p>
}
@{
    var count = 5;
}

@if (count > 3)
{
    <p>The count is greater than 3.</p>
}
@
If True Then
	Dim count = 5
End If

'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'@if(count > 3)
'{
'	<p> The count is greater than 3.</p>
'}
$vbLabelText   $csharpLabel

위의 코드 예시에서, if 문장은 서버 측 코드의 일부로, 서버에서 실행되며, 결과 HTML 페이지에 출력이 삽입됩니다.

Switch 문

Switch 문은 C# 프로그래밍 언어에서 사용되는 일종의 조건부 제어 구조입니다. 이는 코드 블록 내에서 사용할 수 있습니다.

@{
    var fileFormat = "PDF";
    var message = "";

    switch (fileFormat) 
    {
        case "PDF":
            message = "You selected PDF.";
            break;
        default:
            message = "Invalid selection.";
            break;
    }
}

<p>@message</p>
@{
    var fileFormat = "PDF";
    var message = "";

    switch (fileFormat) 
    {
        case "PDF":
            message = "You selected PDF.";
            break;
        default:
            message = "Invalid selection.";
            break;
    }
}

<p>@message</p>
@
If True Then
	Dim fileFormat = "PDF"
	Dim message = ""

	Select Case fileFormat
		Case "PDF"
			message = "You selected PDF."
		Case Else
			message = "Invalid selection."
	End Select
End If

'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<p> @message</p>
$vbLabelText   $csharpLabel

Razor에서의 헬로 월드

거의 모든 프로그래밍 언어에서 가장 간단한 프로그램 중 하나는 "Hello World"입니다. Razor에서는 아래 예제에 표시된 것처럼 간단한 인라인 표현식을 사용하여 "Hello World"를 표시할 수 있습니다.

<p>@("Hello World")</p>
<p>@("Hello World")</p>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<p> @("Hello World")</p>
$vbLabelText   $csharpLabel

Razor에서의 반복문

Razor 구문은 foreach 문장과 같은 루프를 작성할 수 있게 해줍니다. 예를 들어 웹 페이지에 표시하려는 이름 목록이 있다고 가정해 봅시다. Razor 구문에서 foreach 문장으로 이를 달성할 수 있습니다.

@{
    var names = new List<string> { "John", "Doe", "Smith" };
}

@foreach (var name in names)
{
    <p>@name</p>
}
@{
    var names = new List<string> { "John", "Doe", "Smith" };
}

@foreach (var name in names)
{
    <p>@name</p>
}
@
If True Then
	Dim names = New List(Of String) From {"John", "Doe", "Smith"}
End If

'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'@foreach(var name in names)
'{
'	<p> @name</p>
'}
$vbLabelText   $csharpLabel

foreach 문장은 리스트의 각 이름을 반복하며 웹 페이지에 출력합니다.

태그 도우미 이해하기

ASP.NET MVC에서 태그 도우미는 서버 측 코드가 Razor 파일에서 HTML 요소를 생성하고 렌더링할 수 있도록 합니다. 태그 도우미는 HTML 도우미와 비슷하지만 더 HTML 같은 구문을 가집니다. 태그 도우미는 Razor 뷰의 HTML 같은 요소를 클라이언트 브라우저에 보내는 HTML 마크업으로 변환합니다. 다음 앵커 태그 도우미의 코드 예제를 고려해 보세요:

<a asp-controller="Home" asp-action="Index">Home</a>
<a asp-controller="Home" asp-action="Index">Home</a>
HTML

사용자 상호작용 처리하기

Razor 페이지는 사용자 상호작용을 관리하기 위해 핸들러 메서드를 사용합니다. 예를 들어, 양식 제출을 처리하기 위해 Razor 페이지의 해당 페이지 모델 파일에 OnPostAsync이라는 메서드를 생성할 수 있습니다.

public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    // Perform some operation here

    return RedirectToPage("./Index");
}
public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    // Perform some operation here

    return RedirectToPage("./Index");
}
Public Async Function OnPostAsync() As Task(Of IActionResult)
	If Not ModelState.IsValid Then
		Return Page()
	End If

	' Perform some operation here

	Return RedirectToPage("./Index")
End Function
$vbLabelText   $csharpLabel

Razor의 주석

Razor는 또한 C# 스타일의 주석을 지원합니다. Razor 주석은 서버 측 주석이므로 브라우저에 보내지지 않음을 기억하세요. Razor 주석은 이렇게 생겼습니다:

@* This is a Razor comment *@
@* This is a Razor comment *@
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@* This is a Razor comment *@
$vbLabelText   $csharpLabel

그리고 이것은 여러 줄로 된 주석입니다:

@*
    This is a multi-line Razor comment.
    It's useful when you have a lot to say.
*@
@*
    This is a multi-line Razor comment.
    It's useful when you have a lot to say.
*@
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@* This is a multi-line Razor comment.It's useful @when you have a lot @to say. *@
$vbLabelText   $csharpLabel

Razor 뷰와 페이지는 HTML 주석을 포함할 수 있습니다. 이 주석들은 브라우저에 보내는 HTML 출력에서 볼 수 있습니다.

HTML

모델을 Razor 페이지로 전달하기

Razor는 서버에서 페이지로 모델을 전달할 수 있도록 합니다. @model 지시는 전달되는 객체의 유형을 지정하는 데 사용됩니다. 아래 예제에 표시된 것처럼 이 모델 속성은 Razor 페이지에서 접근할 수 있습니다.

@page
@model ExampleModel

<h2>@Model.Title</h2>
<p>@Model.Description</p>
@page
@model ExampleModel

<h2>@Model.Title</h2>
<p>@Model.Description</p>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@page @model ExampleModel <h2> @Model.Title</h2> <p> @Model.Description</p>
$vbLabelText   $csharpLabel

IronPDF를 사용하여 Razor에서 PDF 생성하기

IronPDF for .NET은 개발자가 HTML, 이미지, 심지어 기존 웹 페이지를 .NET에서 PDF로 생성할 수 있게 해주는 인기 있는 라이브러리입니다. 이것은 보고서, 인보이스 및 표준 출력 형식이 필요한 기타 모든 문서를 작성하는 데 훌륭한 도구입니다. IronPDF는 ASP.NET MVC 및 ASP.NET Razor Pages 프레임워크 내에서 완벽하게 작동합니다.

설치

먼저 IronPDF 패키지를 설치해야 합니다. Visual Studio의 NuGet 패키지 관리자 콘솔에서 수행할 수 있습니다. 다음 명령어를 실행하세요:

Install-Package IronPdf

간단한 PDF 생성

이제 Razor 페이지 내에서 HTML 코드로부터 간단한 PDF를 만들어 봅시다. 먼저 Razor 페이지 상단에 IronPDF 네임스페이스를 가져옵시다.

@using IronPdf;
@using IronPdf;
Dim IronPdf As [using]
$vbLabelText   $csharpLabel

그런 다음 IronPDF를 사용하여 PDF를 생성할 수 있습니다. Razor 페이지에 버튼이 있어 클릭 시 간단한 PDF를 생성한다고 가정합시다.

페이지 모델 파일의 해당 핸들러에 다음 코드를 추가할 수 있습니다:

@page "/pdf"
@using IronPdf;
@inject IJSRuntime JS

<PageTitle>Create PDF</PageTitle>

<h1>Create PDF</h1>

<div class="form-outline">
    <button class="btn btn-primary mt-3" @onclick="CreatePDF">Create PDF</button>
</div>

@code {
    private string htmlString { get; set; }

    private async Task CreatePDF()
    {
        var Renderer = new IronPdf.ChromePdfRenderer();
        Renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A2;

        var doc = Renderer.RenderUrlAsPdf("https://ironpdf.com/");

        using var Content = new DotNetStreamReference(stream: doc.Stream);

        await JS.InvokeVoidAsync("SubmitHTML", "ironpdf.pdf", Content);
    }
}

출력

Razor C# (개발자를 위한 작동 방식) 그림 4

Razor C# (개발자를 위한 작동 방식) 그림 5

결론

성공적으로 Razor C#의 기초를 배우고 IronPDF를 통합하여 애플리케이션 내에서 PDF 파일을 생성하는 방법을 발견했습니다. Visual Studio에서 새로운 프로젝트를 생성하는 것으로 시작하여 Razor 구문을 사용하여 동적 웹 페이지를 생성하는 방법을 배웠습니다. HTML 코드와 심지어 Razor 뷰 전체에서 PDF를 생성하는 데 IronPDF를 사용할 수 있는 방법도 탐색했습니다.

이제 더 고급 애플리케이션을 계속 개발하면서 IronPDF가 제공하는 강력한 기능을 활용할 수 있습니다. IronPDF를 무료로 체험해 볼 수 있으며 가치 있다고 판단되면 필요한 요구 사항에 적합한 라이센스를 구매할 수 있습니다.

자주 묻는 질문

Razor에서 C#을 사용하여 HTML로부터 PDF를 생성하려면 어떻게 하나요?

Razor에서 C#을 사용하여 IronPDF 라이브러리를 활용하여 HTML로부터 PDF를 생성할 수 있습니다. 먼저 IronPDF 패키지를 설치하고 IronPDF 네임스페이스를 가져온 다음, RenderHtmlAsPdf 같은 API 메서드를 사용하여 HTML 콘텐츠를 PDF 형식으로 변환하십시오.

웹 개발에서 Razor 구문의 역할은 무엇인가요?

Razor 구문은 웹 개발에서 C# 또는 VB와 HTML을 결합하여 동적 웹 페이지를 만드는 데 중요한 역할을 합니다. 이는 개발자가 HTML이 클라이언트의 브라우저로 전송되기 전 서버 측 코드를 작성할 수 있도록 하여 원활한 통합과 기능성을 제공합니다.

Razor 페이지는 웹 애플리케이션 개발을 어떻게 향상시키나요?

Razor 페이지는 코드를 구조적이고 체계적으로 관리하여 중복과 복잡성을 줄임으로써 웹 애플리케이션 개발을 향상시킵니다. 이는 개발자가 페이지 기반 형식 내에서 기능을 구축하는 데 집중할 수 있도록 개발 과정을 단순화합니다.

Razor 페이지에서 태그 도우미는 어떻게 작동하며 어떻게 도움이 되나요?

Razor 페이지에서 태그 도우미는 서버 측 코드가 HTML 유사 구문을 사용하여 HTML 요소를 생성하고 렌더링할 수 있도록 도움을 줍니다. 이는 서버에서 요소를 변환하여 클라이언트의 브라우저로 보내기 전에 깨끗하고 유지 보수 가능한 HTML 마크업을 생산하도록 돕습니다.

Razor Pages에서 사용자 상호작용은 어떻게 처리하나요?

사용자 상호작용은 OnPostAsync와 같은 처리기 메서드를 사용하여 Razor Pages에서 관리됩니다. 이러한 메서드는 양식 제출 및 기타 사용자 입력을 처리하여 클라이언트로부터 받은 데이터를 기반으로 작업을 수행할 수 있도록 해줍니다.

Razor의 '@model' 지시문은 어떤 중요성을 가지나요?

Razor의 '@model' 지시문은 Razor 페이지로 전달되는 객체의 데이터 유형을 지정하기 때문에 중요합니다. 이는 개발자가 페이지 내에서 모델의 속성에 직접 접근하고 조작할 수 있도록 하여 데이터 바인딩과 상호작용을 용이하게 합니다.

Visual Studio에서 C#과 함께 Razor를 사용하는 이점은 무엇인가요?

Visual Studio에서 C#과 함께 Razor를 사용하면 서버 사이드 로직과 HTML의 통합, Razor Pages를 통한 개발 간소화, 동적 웹 콘텐츠를 쉽게 생성할 수 있는 등의 이점이 있습니다. 또한, Visual Studio는 Razor 개발을 지원하는 강력한 도구와 템플릿을 제공합니다.

Razor 구문을 C#과 VB 모두에서 사용할 수 있나요?

네, Razor 구문은 C# 및 VB(Visual Basic)를 사용하여 서버 사이드 로직과 HTML을 결합할 수 있습니다. 이러한 유연성은 개발자가 웹 개발에서 Razor의 기능을 활용하면서 선호하는 언어를 선택할 수 있게 합니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

제이콥은 맨체스터 대학교에서 토목공학 학사 학위(BEng)를 최우등으로 취득했습니다(1998~2001). 1999년 런던에서 첫 소프트웨어 회사를 설립하고 2005년 첫 .NET 컴포넌트를 개발한 후, 마이크로소프트 생태계 전반에 걸쳐 복잡한 문제를 해결하는 데 전문성을 발휘해 왔습니다.

그의 대표 제품인 IronPDF 및 Iron Suite .NET 라이브러리는 전 세계적으로 3천만 건 이상의 NuGet 설치 수를 기록했으며, 그의 핵심 코드는 전 세계 개발자들이 사용하는 다양한 도구에 지속적으로 활용되고 있습니다. 25년의 실무 경험과 41년의 코딩 전문성을 바탕으로, 제이콥은 차세대 기술 리더들을 양성하는 동시에 기업 수준의 C#, Java, Python PDF 기술 혁신을 주도하는 데 주력하고 있습니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해