#01 편도 그렇지만 포스팅하고 보니 해석이 엉망이다.
짧은 어휘력과 의역 능력이지만 나날이 발전 하는 그날까지.

  • Creating a Tasklist Application with ASP.NET MVC
  • Understanding Models, Views, and Controllers
  • Understanding Controllers, Controller Actions, and Action Results
  • Understanding Views, View Data, and HTML Helpers
  • An Introduction to URL Routing
  • Preventing JavaScript Injection Attacks
  • Creating Unit Tests for ASP.NET MVC Applications
  • Using ASP.NET MVC with Different Versions of IIS
  • Creating Custom HTML Helpers
  • Creating Model Classes with LINQ to SQL
  • Displaying a Table of Database Data
  • Creating Page Layouts with View Master Pages
  • Passing Data to View Master Pages
  • Understanding Action Filters

  • Understanding Models, Views, and Controllers

     

    이 튜토리얼은 ASP.NET MVC Models, Views, 그리고 Controller 에 관해 자세히 알아볼 것이다. 다시 말해 ASP.NET MVC 에서 ‘M’, ‘V’ 그리고 ‘C’에 관해 설명할 것이다.

     

    이 튜토리얼을 읽은 후, ASP.NET MVC 어플리케이션의 각기 다른 영역이 어떻게 서로 돌아가는지 이해 할 것이다. ASP 어플리케이션이나 ASP.NET Web Forms 어플리케이션과 ASP.NET MVC 어플리케이션 구조가 어떻게 다른지 이해해야 한다.

     

    The Sample ASP.NET MVC Application

     

    ASP.NET MVC 웹 어플리케이션을 만듦으로써 생기는 기본 Visual Studio 템플릿은 ASP.NET MVC 어플리케이션의 각 부분을 이해하기 위한 기본적인 샘플 어플리케이션을 포함하고 있다. 우리는 이 튜토리얼에서 그 심플한 어플리케이션을 설명할 것이다.

     

    새로운 프로젝트를 만들자. (Unit Test Project No)

     

    새 프로젝트가 생성되면 솔루션 탐색기에 몇몇 폴더와 파일이 생긴 것을 볼 것이다. 중요한 것은 Models, Views, 그리고 Controllers 세 개의 폴더 이다. 폴더 이름에서 추측 할 수 있듯이, 세 폴더는 models, views, 그리고 controllers 을 설명하는 파일들을 포함한다.

     

    Controllers 폴더를 펼치면, HomeController.cs 파일을 볼 것이다. Views 폴더를 펼치면, Home Shared 이름의 서브 폴더를 볼 것이다. Home 폴더를 펼치면, About.aspx Home.aspx 파일을 볼 것이다. 이 파일들은 ASP.NET MVC 템플릿과 함께 포함된 같은 어플리케이션을 구성한다.

     


     

    현재의 프로젝트를 빌드 시켜보자. ASP.NET MVC 어플리케이션이 돌아가면, Visual Studio는 웹 브라우저에서 어플리케이션을 실행 시킨다. 샘플 어플리케이션은 Index 페이지와 About 페이지, 두 페이지로 구성된다. 어플리케이션이 처음으로 시작 될 때, Index 페이지가 나타난다.

     


    브라우저 주소 바의 URL을 자세히 보라. Home 메뉴 링크를 클릭했을 때, 브라우저 주소 바의 URL /Home으로 바뀐다. 마찬가지로 About 메뉴 링크를 클릭하면, 브라우저 주소 바의 URL /About 으로 바뀐다.

     

    브라우저를 닫고 Visual Studio로 돌아가서 Home이라는 파일과 About이라는 파일을 찾는다면 보이지 않을 것이다. 이 파일은 존재하지 않는다. 이것이 어떻게 가능한 것인가?

     

    A URL Does Not Equal a Page

     

    전통적인 ASP.NET 웹 폼 어플리케이션이나 ASP 어플리케이션을 빌드 하면, URL과 페이지가 1:1 대응된다. 서버로부터 SomePage.aspx 라는 이름의 페이지를 요청하면, SomePage.aspx 라는 이름의 페이지를 디스크에서 찾는다. SomePage.aspx 페이지가 존재하지 않는다면, 404 – Page Not Found 에러가 뜰 것이다.

     

    ASP.NET MVC 어플리케이션을 구성할 때, 대조적으로, 브라우저 주소 바에 타이핑한 URL과 어플리케이션에서 찾는 파일을 매칭시키지 않는다. ASP.NET MVC 어플리케이션에서 URL은 디스크에 존재하는 페이지가 아니라 controller action URL이 매칭된다.

     

    전통적인 ASP.NET 이나 ASP 어플리케이션에서, 브라우저 요청은 페이지에 매핑 되었다. ASP.NET MVC 어플리케이션에서는 브라우저 요청이 controller actions과 매핑 된다. ASP.NET 웹 폼 어플리케이션은 콘텐트 중심적이었다면, ASP.NET MVC 어플리케이션은 어플리케이션 논리 중심 적이다.

     

    Understanding URL Routing

     

    ASP.NET MVC 특징 중 controller action 에 매핑 된 브라우저 요청을 URL 라우팅 이라고 부른다. URL 라우팅은 controller action 에 들어오는 요청에 길을 정한다.

     

    URL 라우팅은 들어오는 요청을 다루기 위해 route table을 사용한다. route table은 웹 어플리케이션이 처음으로 시작할 때 만들어 진다. Route table Global.asax 파일에서 준비된다.

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

    using System.Web.Routing;

     

    namespace MvcApplication1

    {

         public class GlobalApplication : System.Web.HttpApplication

         {

              public static void RegisterRoutes(RouteCollection routes)

              {

                   routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

                   routes.MapRoute(

                   "Default",

                   "{controller}/{action}/{id}",

                   new { controller = "Home", action = "Index", id = ""}

                   );

              }

     

              protected void Application_Start()

              {

                   RegisterRoutes(RouteTable.Routes);

              }

         }

    }

     

    ASP.NET 어플리케이션이 처음 시작할 때, Application_Start() 메소드가 호출된다. 이 메소드는 RegisterRoutes() 메소드를 호출하고 RegisterRoutes() 메소드는 기본 route table을 만든다.

     

    기본 route table은 하나의 route로 구성된다. 이 기본 route은 모든 들어오는 요청을 세 조각으로 나눈다. 첫 조각은 controller 이름과 매핑되고, 두 번째 조각은 action 이름과 매핑된고, 마지막 조각은 Id 이름의 액션을 지나가는 파라미터와 매핑된다.

     

    예를 들어 다음 URL을 생각해보자.

     

    /Product/Details/3

     

    URL은 아래와 같이 3 부분으로 해석된다.

     

    Controller = ProductController

    Action = Details

    Id = 3

     

    접미사 Controller Controller 파라미터 끝에 붙는 것을 명심해라.

     

    기본 route는 기본적으로 3가지 조각들을 가지고 있다. 기본 Controller HomeController이고, 기본 Action Index, 그리고 기본 Id은 빈 문자열 값이다. 이와 같은 특징으로 다음 URL은 어떻게 해석되는지 생각해보자.

     

    /Employee

     

    URL은 아래와 같이 세 조각으로 해석된다.

     

    Controller = EmployeeController

    Action = Index

    Id = “”

     

    마지막으로 URL을 입력하지 말고 ASP.NET MVC 어플리케이션을 연다면 그때 URL은 아래와 같이 해석된다.

     

    Controller = HomeController

    Action = Index

    Id = “”

     

    이 요청은 HomeController 클래스 상에서 Index() action 이 라우트 된 것이다.

     

    Understanding Controllers

     

    Controller MVC 어플리케이션이 사용자와 상호 작용하는 방법을 통제하는 책임을 가지고 있다. Controller은 사용자가 브라우저에서 요청을 했을 때 사용자에게 무엇을 보내야 하는지 결정한다.

     

    Controller은 단지 클래스이다. 샘플 ASP.NET MVC 어플리케이션은 Controllers 폴더 안에 위치한 HomeController.cs 라는 이름의 하나의 controller을 가지고 있다.

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

       

    namespace MvcApplication1.Controllers

    {

         public class HomeController : Controller

         {

              public ActionResult Index()

              {

                   ViewData["Title"] = "Home Page";

                   ViewData["Message"] = "Welcome to ASP.NET MVC!";

                   return View();

              }

     

              public ActionResult About()

              {

                   ViewData["Title"] = "About Page";

                   return View();

              }

         }

    }

     

    HomeController Index() About() 두 메소드를 가지고 있는 것을 보자. 이 두 메소드는 Controller에 의해 드러나는 두 action과 일치한다. URL /Home/IndexHomeController.Index() 메소드를 불러내고, URL /Home/About HomeController.About() 메소드를 불러낸다.

     

    Controller에서 public 메소드는 controller action으로서 드러난다. 이 부분은 주의할 필요가 있다. 이것은 controller 안에 public 메소드는 브라우저에 URL을 입력하고 인터넷에 접속하는 누군가에게 불리어 질 수 있다는 것을 의미한다.

     

    Understanding View

     

    Controller HomeController 클래스에 의해 드러나고, Index() About() 메소드는 view을 리턴 한다. View은 브라우저에 보내는 HTML Markup과 콘텐트로 구성된다. View ASP.NET MVC 어플리케이션 동작에서 페이지와 동등하다.

     

    View은 올바른 위치에 만들어야 한다. HomeController.Index() action은 다음 경로에 있는 view을 리턴 한다.

    \Views\Home\Index.aspx

     

    HomeController.About() action은 다음 경로에 있는 view을 리턴 한다.

    \View\Home\About.aspx

     

    일반적으로 controller action을 위한 view가 리턴 되기를 원한다면, controller와 같은 이름의 View 폴더 안에서 서브 폴더를 만들어야 한다. 서브 폴더가 없다면, controller action을 위한 같은 이름의 aspx 파일을 만들 수 없다.

     

    <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"

    AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="MvcApplication1.Views.Home.About"%>

     

    <asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">

         <h2>About Us</h2>

         <p>

              TODO: Put <em>about</em> content here.

         </p>

    </asp:Content>

     

    View ASP 또는 ASP.NET 웹 폼의 페이지와 흡사하다. View HTML 콘텐트와 스크립트로 구성된다.

      

    Understanding Models

     

    우리는 controllers views에 관에 이야기를 했다. 마지막 주제는 models 이다. MVC model은 무엇일까?

     

    MVC model view controller에 포함되지 않는 모든 어플리케이션 로직으로 구성된다. Model은 또한 모든 비즈니스 로직과 데이터베이스 액세스 로직으로 구성되기도 한다. 예를 들어, 데이터베이스와 연결하기 위해 LINQ to SQL을 사용한다면, Models 폴더 안에 LINQ to SQL 클래스를 만들어야 한다.

     

    View은 사용자 인터페이스를 생성하는 것과 관련된 로직만으로 구성된다. Controller은 사용자에게 다른 action으로 리다이렉트 하거나 올바른 view을 리턴 하는 요청을 처리하는 최소한의 로직으로 구성된다. 이 외의 모든 것은 model 안에 포함된다.

     

    일반적으로 fat models skinny controller 만들기를 노력해야 한다. 다시 말해 controller 메소드는 적은 라인의 코드로 구성 되어야 한다. Controller action이 너무 방대해진다면, Models 폴더에 새로운 클래스를 만들어 로직을 이동시키는 것에 대해 생각해야 할 것이다.

     

    Summary

     

    이 튜토리얼은 ASP.NET MVC 웹 어플리케이션의 각기 다른 세 파트에 대해 자세히 알아 보았다. Controller actions에서 브라우저 입력 요청이 URL Routing과 어떻게 매핑 되는지 설명하였다. 또한, controllers가 어떻게 조정하고, views가 어떻게 브라우저에 리턴 하는지 설명하였다. 마지막으로, models가 어플리케이션 비즈니스와 데이터 로직을 구성하는 방법에 대해서도 설명 하였다.



    Posted by glycerine
    ,