모델, 보기 및 컨트롤러 이해(VB)Understanding Models, Views, and Controllers (VB)

Stephen Waltherby Stephen Walther

모델, 뷰 및 컨트롤러에 대해 혼란 스 러 울 까 요?Confused about Models, Views, and Controllers? 이 자습서에서 Stephen Walther는 ASP.NET MVC 응용 프로그램의 다양 한 부분을 소개 합니다.In this tutorial, Stephen Walther introduces you to the different parts of an ASP.NET MVC application.

이 자습서에서는 ASP.NET MVC 모델, 뷰 및 컨트롤러에 대 한 개략적인 개요를 제공 합니다.This tutorial provides you with a high-level overview of ASP.NET MVC models, views, and controllers. 즉, ASP.NET MVC의 M ', V ' 및 C '에 대해 설명 합니다.In other words, it explains the M', V', and C' in ASP.NET MVC.

이 자습서를 읽은 후에는 ASP.NET MVC 응용 프로그램의 다양 한 부분이 어떻게 함께 작동 하는지 이해 해야 합니다.After reading this tutorial, you should understand how the different parts of an ASP.NET MVC application work together. ASP.NET MVC 응용 프로그램의 아키텍처가 ASP.NET Web Forms 응용 프로그램 또는 Active Server Pages 응용 프로그램과 어떻게 다른 지도 이해 해야 합니다.You should also understand how the architecture of an ASP.NET MVC application differs from an ASP.NET Web Forms application or Active Server Pages application.

샘플 ASP.NET MVC 응용 프로그램The Sample ASP.NET MVC Application

ASP.NET MVC 웹 응용 프로그램을 만들기 위한 기본 Visual Studio 템플릿에는 ASP.NET MVC 응용 프로그램의 다양 한 부분을 이해 하는 데 사용할 수 있는 매우 간단한 샘플 응용 프로그램이 포함 되어 있습니다.The default Visual Studio template for creating ASP.NET MVC Web Applications includes an extremely simple sample application that can be used to understand the different parts of an ASP.NET MVC application. 이 자습서에서는이 간단한 응용 프로그램을 활용 합니다.We take advantage of this simple application in this tutorial.

Visual Studio 2008을 시작 하 고 메뉴 옵션 파일, 새 프로젝트를 차례로 선택 하 여 MVC 템플릿을 사용 하 여 새 ASP.NET MVC 응용 프로그램을 만듭니다 (그림 1 참조).You create a new ASP.NET MVC application with the MVC template by launching Visual Studio 2008 and selecting the menu option File, New Project (see Figure 1). 새 프로젝트 대화 상자의 프로젝트 형식 (Visual Basic 또는 c #)에서 선호 하는 프로그래밍 언어를 선택 하 고 템플릿에서 ASP.NET MVC 웹 응용 프로그램 을 선택 합니다.In the New Project dialog, select your favorite programming language under Project Types (Visual Basic or C#) and select ASP.NET MVC Web Application under Templates. 확인 단추를 클릭합니다.Click the OK button.

새 프로젝트 대화 상자New Project Dialog

그림 01: 새 프로젝트 대화 상자 (전체 크기 이미지를 보려면 클릭)Figure 01: New Project Dialog (Click to view full-size image)

새 ASP.NET MVC 응용 프로그램을 만들 때 단위 테스트 프로젝트 만들기 대화 상자가 나타납니다 (그림 2 참조).When you create a new ASP.NET MVC application, the Create Unit Test Project dialog appears (see Figure 2). 이 대화 상자를 사용 하 여 ASP.NET MVC 응용 프로그램 테스트를 위한 솔루션에 별도의 프로젝트를 만들 수 있습니다.This dialog enables you to create a separate project in your solution for testing your ASP.NET MVC application. 옵션 아니요, 단위 테스트 프로젝트를 만들지 않음 을 선택 하 고 확인 단추를 클릭 합니다.Select the option No, do not create a unit test project and click the OK button.

단위 테스트 만들기 대화 상자Create Unit Test Dialog

그림 02: 단위 테스트 만들기 대화 상자 (전체 크기 이미지를 보려면 클릭)Figure 02: Create Unit Test Dialog (Click to view full-size image)

새 ASP.NET MVC 응용 프로그램을 만든 후After the new ASP.NET MVC application is created. 솔루션 탐색기 창에는 여러 폴더와 파일이 표시 됩니다.You will see several folders and files in the Solution Explorer window. 특히 모델, 뷰 및 컨트롤러 라는 세 개의 폴더가 표시 됩니다.In particular, you'll see three folders named Models, Views, and Controllers. 폴더 이름에서 짐작할 수 있듯이 이러한 폴더에는 모델, 뷰 및 컨트롤러를 구현 하기 위한 파일이 포함 되어 있습니다.As you might guess from the folder names, these folders contain the files for implementing models, views, and controllers.

Controllers 폴더를 확장 하면 이름이 AccountController .vb이 고 이름이 HomeController 인 파일이 표시 됩니다.If you expand the Controllers folder, you should see a file named AccountController.vb and a file named HomeController.vb. Views 폴더를 확장 하면 계정, 홈 및 공유 라는 세 개의 하위 폴더가 표시 됩니다.If you expand the Views folder, you should see three subfolders named Account, Home and Shared. 홈 폴더를 확장 하면 이름이 .aspx 및 node.js 인 두 개의 추가 파일이 표시 됩니다 (그림 3 참조).If you expand the Home folder, you'll see two additional files named About.aspx and Index.aspx (see Figure 3). 이러한 파일은 기본 ASP.NET MVC 템플릿에 포함 된 샘플 응용 프로그램을 구성 합니다.These files make up the sample application included with the default ASP.NET MVC template.

솔루션 탐색기 창The Solution Explorer Window

그림 03: 솔루션 탐색기 창 (전체 크기 이미지를 보려면 클릭)Figure 03: The Solution Explorer Window (Click to view full-size image)

디버그, 디버깅 시작메뉴 옵션을 선택 하 여 샘플 응용 프로그램을 실행할 수 있습니다.You can run the sample application by selecting the menu option Debug, Start Debugging. 또는 F5 키를 누를 수 있습니다.Alternatively, you can press the F5 key.

ASP.NET 응용 프로그램을 처음 실행 하면 디버그 모드를 사용 하도록 설정 하는 것을 권장 하는 그림 4의 대화 상자가 나타납니다.When you first run an ASP.NET application, the dialog in Figure 4 appears that recommends that you enable debug mode. 확인 단추를 클릭 하면 응용 프로그램이 실행 됩니다.Click the OK button and the application will run.

디버깅 사용 안 함 대화 상자Debugging Not Enabled dialog

그림 04: 디버깅 사용 안 함 대화 상자 (전체 크기 이미지를 보려면 클릭)Figure 04: Debugging Not Enabled dialog (Click to view full-size image)

ASP.NET MVC 응용 프로그램을 실행 하면 Visual Studio가 웹 브라우저에서 응용 프로그램을 시작 합니다.When you run an ASP.NET MVC application, Visual Studio launches the application in your web browser. 샘플 응용 프로그램은 인덱스 페이지와 정보 페이지로 구성 됩니다.The sample application consists of only two pages: the Index page and the About page. 응용 프로그램이 처음 시작 될 때 인덱스 페이지가 나타납니다 (그림 5 참조).When the application first starts, the Index page appears (see Figure 5). 응용 프로그램의 오른쪽 위에 있는 메뉴 링크를 클릭 하 여 정보 페이지로 이동할 수 있습니다.You can navigate to the About page by clicking the menu link at the top right of the application.

인덱스 페이지The Index Page

그림 05: 인덱스 페이지 (전체 크기 이미지를 보려면 클릭)Figure 05: The Index Page (Click to view full-size image)

브라우저의 주소 표시줄에서 Url을 확인 합니다.Notice the URLs in the address bar of your browser. 예를 들어 정보 메뉴 링크를 클릭 하면 브라우저 주소 표시줄의 URL이 /Home/About로 변경 됩니다.For example, when you click the About menu link, the URL in the browser address bar changes to /Home/About.

브라우저 창을 닫고 Visual Studio로 돌아가면 Home/About 경로를 사용 하 여 파일을 찾을 수 없습니다.If you close the browser window and return to Visual Studio, you won't be able to find a file with the path Home/About. 파일이 존재 하지 않습니다.The files don't exist. 가능한 방법은 무엇 인가요?How is this possible?

URL이 페이지와 같지 않음A URL Does Not Equal a Page

기존 ASP.NET Web Forms 응용 프로그램 또는 Active Server Pages 응용 프로그램을 빌드하는 경우 URL과 페이지 사이에 일 대 일 대응 관계가 있습니다.When you build a traditional ASP.NET Web Forms application or an Active Server Pages application, there is a one-to-one correspondence between a URL and a page. 서버에서 SomePage 라는 페이지를 요청 하면 SomePage 라는 디스크에 페이지가 더 잘 표시 됩니다.If you request a page named SomePage.aspx from the server, then there had better be a page on disk named SomePage.aspx. SomePage 파일이 없는 경우 404-페이지를 찾을 수 없음 오류가 표시 됩니다.If the SomePage.aspx file does not exist, you get an ugly 404 - Page Not Found error.

ASP.NET MVC 응용 프로그램을 빌드할 때 브라우저의 주소 표시줄에 입력 하는 URL과 응용 프로그램에서 찾을 수 있는 파일 간에는 아무런 관계가 없습니다.When building an ASP.NET MVC application, in contrast, there is no correspondence between the URL that you type into your browser's address bar and the files that you find in your application. ASP.NET MVC 응용 프로그램에서 URL은 디스크에 있는 페이지 대신 컨트롤러 작업에 해당 합니다.In an ASP.NET MVC application, a URL corresponds to a controller action instead of a page on disk.

기존 ASP.NET 또는 ASP 응용 프로그램에서 브라우저 요청은 페이지에 매핑됩니다.In a traditional ASP.NET or ASP application, browser requests are mapped to pages. 반면 ASP.NET MVC 응용 프로그램에서 브라우저 요청은 컨트롤러 작업에 매핑됩니다.In an ASP.NET MVC application, in contrast, browser requests are mapped to controller actions. ASP.NET Web Forms 응용 프로그램은 콘텐츠 중심입니다.An ASP.NET Web Forms application is content-centric. 이와 대조적으로 ASP.NET MVC 응용 프로그램은 응용 프로그램 논리 중심입니다.An ASP.NET MVC application, in contrast, is application logic centric.

ASP.NET 라우팅 이해Understanding ASP.NET Routing

브라우저 요청은 ASP.NET Routing이라는 ASP.NET framework의 기능을 통해 컨트롤러 작업에 매핑됩니다.A browser request gets mapped to a controller action through a feature of the ASP.NET framework called ASP.NET Routing. ASP.NET 라우팅은 ASP.NET MVC 프레임 워크에서 들어오는 요청을 컨트롤러 작업으로 라우팅하 는 데 사용 됩니다.ASP.NET Routing is used by the ASP.NET MVC framework to route incoming requests to controller actions.

ASP.NET 라우팅은 경로 테이블을 사용 하 여 들어오는 요청을 처리 합니다.ASP.NET Routing uses a route table to handle incoming requests. 이 경로 테이블은 웹 응용 프로그램이 처음 시작 될 때 생성 됩니다.This route table is created when your web application first starts. 경로 테이블은 Global.asax 파일에 설치 됩니다.The route table is setup in the Global.asax file. 기본 MVC global.asax 파일은 목록 1에 포함 되어 있습니다.The default MVC Global.asax file is contained in Listing 1.

목록 1-global.asaxListing 1 - Global.asax

' Note: For instructions on enabling IIS6 or IIS7 classic mode, 
' visit https://go.microsoft.com/?LinkId=9394802

Public Class MvcApplication
    Inherits System.Web.HttpApplication

    Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

        ' MapRoute takes the following parameters, in order:
        ' (1) Route name
        ' (2) URL with parameters
        ' (3) Parameter defaults
        routes.MapRoute( _
            "Default", _
            "{controller}/{action}/{id}", _
            New With {.controller = "Home", .action = "Index", .id = ""} _
        )

    End Sub

    Sub Application_Start()
        RegisterRoutes(RouteTable.Routes)
    End Sub
End Class

ASP.NET 응용 프로그램이 처음 시작 될 때 응용 프로그램 _ Start () 메서드가 호출 됩니다.When an ASP.NET application first starts, the Application_Start() method is called. 목록 1에서이 메서드는 RegisterRoutes () 메서드를 호출 하 고 RegisterRoutes () 메서드는 기본 경로 테이블을 만듭니다.In Listing 1, this method calls the RegisterRoutes() method and the RegisterRoutes() method creates the default route table.

기본 경로 테이블은 하나의 경로로 구성 됩니다.The default route table consists of one route. 이 기본 경로는 들어오는 모든 요청을 세 개의 세그먼트로 나눕니다. URL 세그먼트는 슬래시 사이의 모든 항목입니다.This default route breaks all incoming requests into three segments (a URL segment is anything between forward slashes). 첫 번째 세그먼트는 컨트롤러 이름에 매핑되고 두 번째 세그먼트는 동작 이름에 매핑되고 최종 세그먼트는 action 이라는 액션에 전달 된 매개 변수에 매핑됩니다.The first segment is mapped to a controller name, the second segment is mapped to an action name, and the final segment is mapped to a parameter passed to the action named Id.

예를 들어 다음 URL을 가정해 봅니다.For example, consider the following URL:

/Product/Details/3/Product/Details/3

이 URL은 다음과 같은 세 개의 매개 변수로 구문 분석 됩니다.This URL is parsed into three parameters like this:

Controller = ProductController = Product

작업 = 세부 정보Action = Details

Id = 3Id = 3

Global.asax 파일에 정의 된 기본 경로에는 세 매개 변수 모두에 대 한 기본값이 포함 됩니다.The Default route defined in the Global.asax file includes default values for all three parameters. 기본 컨트롤러는 Home이 고 기본 동작은 Index 이며 기본 Id는 빈 문자열입니다.The default Controller is Home, the default Action is Index, and the default Id is an empty string. 이러한 기본값을 염두에 두면 다음 URL을 구문 분석 하는 방법을 고려해 야 합니다.With these defaults in mind, consider how the following URL is parsed:

/Employee/Employee

이 URL은 다음과 같은 세 개의 매개 변수로 구문 분석 됩니다.This URL is parsed into three parameters like this:

Controller = 직원Controller = Employee

작업 = 인덱스Action = Index

Id =Id =

마지막으로, URL (예:)을 제공 하지 않고 ASP.NET MVC 응용 프로그램을 여는 경우 http://localhost url은 다음과 같이 구문 분석 됩니다.Finally, if you open an ASP.NET MVC Application without supplying any URL (for example, http://localhost) then the URL is parsed like this:

컨트롤러 = 홈Controller = Home

작업 = 인덱스Action = Index

Id =Id =

요청은 HomeController 클래스에서 Index () 동작으로 라우팅됩니다.The request is routed to the Index() action on the HomeController class.

컨트롤러 이해Understanding Controllers

컨트롤러는 사용자가 MVC 응용 프로그램과 상호 작용 하는 방식을 제어 하는 일을 담당 합니다.A controller is responsible for controlling the way that a user interacts with an MVC application. 컨트롤러는 ASP.NET MVC 응용 프로그램에 대 한 흐름 제어 논리를 포함 합니다.A controller contains the flow control logic for an ASP.NET MVC application. 컨트롤러는 사용자가 브라우저 요청을 만들 때 사용자에 게 다시 보낼 응답을 결정 합니다.A controller determines what response to send back to a user when a user makes a browser request.

컨트롤러는 단지 클래스 (예: Visual Basic 또는 c # 클래스)입니다.A controller is just a class (for example, a Visual Basic or C# class). 샘플 ASP.NET MVC 응용 프로그램에는 Controllers 폴더에 있는 HomeController 라는 컨트롤러가 포함 되어 있습니다.The sample ASP.NET MVC application includes a controller named HomeController.vb located in the Controllers folder. HomeController 파일의 내용은 목록 2에서 재현 됩니다.The content of the HomeController.vb file is reproduced in Listing 2.

목록 2-HomeController.csListing 2 - HomeController.cs

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index()
        ViewData("Title") = "Home Page"
        ViewData("Message") = "Welcome to ASP.NET MVC!"

        Return View()
    End Function

    Function About()
        ViewData("Title") = "About Page"

        Return View()
    End Function
End Class

HomeController에는 Index ()와 About () 라는 두 개의 메서드가 있습니다.Notice that the HomeController has two methods named Index() and About(). 이러한 두 메서드는 컨트롤러에서 노출 하는 두 작업에 해당 합니다.These two methods correspond to the two actions exposed by the controller. URL/Home/Index는 HomeController () 메서드를 호출 하 고, URL/Home/About는 HomeController () 메서드를 호출 합니다.The URL /Home/Index invokes the HomeController.Index() method and the URL /Home/About invokes the HomeController.About() method.

컨트롤러의 모든 공용 메서드는 컨트롤러 작업으로 노출 됩니다.Any public method in a controller is exposed as a controller action. 이에 대해 주의 해야 합니다.You need to be careful about this. 즉, 브라우저에 올바른 URL을 입력 하 여 인터넷에 액세스할 수 있는 모든 사용자가 컨트롤러에 포함 된 공용 메서드를 호출할 수 있습니다.This means that any public method contained in a controller can be invoked by anyone with access to the Internet by entering the right URL into a browser.

뷰 이해Understanding Views

HomeController 클래스, Index () 및 About ()에서 노출 하는 두 개의 컨트롤러 작업은 모두 뷰를 반환 합니다.The two controller actions exposed by the HomeController class, Index() and About(), both return a view. 보기에는 브라우저에 전송 된 HTML 태그 및 콘텐츠가 포함 됩니다.A view contains the HTML markup and content that is sent to the browser. 뷰는 ASP.NET MVC 응용 프로그램으로 작업할 때 페이지에 해당 합니다.A view is the equivalent of a page when working with an ASP.NET MVC application.

올바른 위치에 보기를 만들어야 합니다.You must create your views in the right location. HomeController () 작업은 다음 경로에 있는 뷰를 반환 합니다.The HomeController.Index() action returns a view located at the following path:

\Views\Home\Index.aspx\Views\Home\Index.aspx

HomeController () 작업은 다음 경로에 있는 뷰를 반환 합니다.The HomeController.About() action returns a view located at the following path:

\Views\Home\About.aspx\Views\Home\About.aspx

일반적으로 컨트롤러 작업에 대 한 보기를 반환 하려는 경우에는 컨트롤러와 동일한 이름을 사용 하 여 Views 폴더에 하위 폴더를 만들어야 합니다.In general, if you want to return a view for a controller action, then you need to create a subfolder in the Views folder with the same name as your controller. 하위 폴더 내에서 컨트롤러 작업과 동일한 이름을 사용 하 여 .aspx 파일을 만들어야 합니다.Within the subfolder, you must create an .aspx file with the same name as the controller action.

목록 3의 파일에는 .aspx 뷰가 포함 되어 있습니다.The file in Listing 3 contains the About.aspx view.

목록 3-.aspx 정보Listing 3 - About.aspx

<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
    <h2>About</h2>
    <p>
        Put content here.
    </p>
</asp:Content>

목록 3의 첫 번째 줄을 무시 하면 대부분의 나머지 뷰가 표준 HTML로 구성 됩니다.If you ignore the first line in Listing 3, most of the rest of the view consists of standard HTML. 여기에서 원하는 HTML을 입력 하 여 보기의 내용을 수정할 수 있습니다.You can modify the contents of the view by entering any HTML that you want here.

보기는 Active Server Pages 또는 ASP.NET Web Forms의 페이지와 매우 비슷합니다.A view is very similar to a page in Active Server Pages or ASP.NET Web Forms. 뷰에는 HTML 내용과 스크립트가 포함 될 수 있습니다.A view can contain HTML content and scripts. 스크립트를 선호 하는 .NET 프로그래밍 언어 (예: c # 또는 Visual Basic .NET)로 작성할 수 있습니다.You can write the scripts in your favorite .NET programming language (for example, C# or Visual Basic .NET). 스크립트를 사용 하 여 데이터베이스 데이터와 같은 동적 콘텐츠를 표시 합니다.You use scripts to display dynamic content such as database data.

모델 이해Understanding Models

여기서는 컨트롤러에 대해 설명 하 고 보기에 대해 설명 했습니다.We have discussed controllers and we have discussed views. 설명 해야 하는 마지막 항목은 모델입니다.The last topic that we need to discuss is models. MVC 모델 이란?What is an MVC model?

MVC 모델에는 뷰나 컨트롤러에 포함 되지 않은 모든 응용 프로그램 논리가 포함 됩니다.An MVC model contains all of your application logic that is not contained in a view or a controller. 모델에는 모든 응용 프로그램 비즈니스 논리, 유효성 검사 논리 및 데이터베이스 액세스 논리가 포함 되어야 합니다.The model should contain all of your application business logic, validation logic, and database access logic. 예를 들어 Microsoft Entity Framework를 사용 하 여 데이터베이스에 액세스 하는 경우 모델 폴더에 Entity Framework 클래스 (.edmx 파일)를 만듭니다.For example, if you are using the Microsoft Entity Framework to access your database, then you would create your Entity Framework classes (your .edmx file) in the Models folder.

뷰에는 사용자 인터페이스 생성과 관련 된 논리도 포함 되어야 합니다.A view should contain only logic related to generating the user interface. 컨트롤러는 올바른 뷰를 반환 하거나 사용자를 다른 작업 (흐름 제어)으로 리디렉션하는 데 필요한 최소한의 논리를 포함 해야 합니다.A controller should only contain the bare minimum of logic required to return the right view or redirect the user to another action (flow control). 다른 모든 항목은 모델에 포함 되어야 합니다.Everything else should be contained in the model.

일반적으로는 fat 모델과 skinny 컨트롤러에 대해 노력 해야 합니다.In general, you should strive for fat models and skinny controllers. 컨트롤러 메서드는 코드를 몇 줄만 포함 해야 합니다.Your controller methods should contain only a few lines of code. 컨트롤러 작업에서 너무 많은 작업을 수행 하는 경우에는 모델 폴더에서 논리를 새 클래스로 이동 하는 것을 고려해 야 합니다.If a controller action gets too fat, then you should consider moving the logic out to a new class in the Models folder.

요약Summary

이 자습서에서는 ASP.NET MVC 웹 응용 프로그램의 다양 한 부분에 대 한 개략적인 개요를 제공 했습니다.This tutorial provided you with a high level overview of the different parts of an ASP.NET MVC web application. ASP.NET 라우팅이 들어오는 브라우저 요청을 특정 컨트롤러 작업에 매핑하는 방법을 배웠습니다.You learned how ASP.NET Routing maps incoming browser requests to particular controller actions. 컨트롤러에서 뷰가 브라우저에 반환 되는 방식을 조정 하는 방법을 배웠습니다.You learned how controllers orchestrate how views are returned to the browser. 마지막으로 모델에서 응용 프로그램 비즈니스, 유효성 검사 및 데이터베이스 액세스 논리를 포함 하는 방법을 배웠습니다.Finally, you learned how models contain application business, validation, and database access logic.