3_1.png

2장에서 WPI를 이용해서 MVC설치를 정상적으로 진행하셨다면 위와 같이 MVC3을 개발할수 있는 환경이 되셨을겁니다. 이번장에서는 기본적인 어플리케이션을 통해 MVC의 대략적인 구조를 살펴보도록 하겠습니다.





먼저 Project > WebApplication > MVC3 을 설치하시고 , Empty Project를 선택합니다.

MVC프로젝트는 데이터를 가져와서 재가공하는 Model 과 그것을 핸들링하는 Controller 그리고 핸들링된 결과값을 보여주는 View 로 이루어져 있습니다. 그러나 기본적은 MVC어플리케이션 템플릿에는 Model 이 따로 존재하지 않습니다. 이는 추후에 다루어질 것이며 , 일단 이번 시간에는 현재 있는 MVC의 구조를 살펴보는 시간을 가지도록 하겠습니다.


3_2.png


 

1. 1.     Routing


MVC는 기초적으로 SEO 친화적인 URL Routing 을 기본골격으로 하고 있습니다. 따라서 Routing 에 대한 이해 없이 MVC에 접근하는 것은 C#을 모르고 ASP.NET 을 하는것과 같다고 할수 있겠습니다 .비약이 조금 심한가요^^;

아무튼 이 Routing Global.asax 에 정의가 되어 있습니다.

 

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

 

routes.MapRoute(

       "Default", // Route name

       "{controller}/{action}/{id}", // URL with parameters

       new { controller = "Home", action = "Index", id = UrlParameter.Optional }

);


 

Routing 은 위와 같은 형식으로 이루어져 있으며 , 이곳에서 실제 이동해야할 페이지를 정의 합니다. 자신이 원하는 Routing 형식이 있을때는 routes.MapRoute() 메서드를 이용해서 자신이 원하는 라우팅 방식을 삽입하면 됩니다.


routes.MapRoute(“라우팅 이름” , “라우팅 규칙” , “기본값”)



현재 Routing 에서 정의된 것은 웹 페이지명을 controller /action /변수 id 로 정의한 라우팅이라고 풀이할수 있습니다. 그 뒤에 기본값이 정의됨으로써 , 사용자가 정의한 라우팅이 아닌경우 기본값에 따른 페이지를 읽어올수 있습니다. 지금 정의된 라우팅에서는 controller 값이 home 으로 action 값이 index 로 정의 됨으로써 , http://기본호스트/ 를 입력하였을 때 http://기본호스트/home/index 로 이동한다는 것을 보여줍니다. 이 라우팅은 절차적인 방식으로 정의 되며 , 위에서 정의된 라우팅과 밑에서 재정의된 라우팅이 겹칠경우 위에서 정의된 라우팅으로 동작하니 주의하시기 바랍니다.


그 외에 global.asax 에서는 글로벌 필터 같은 MVC3에서 추가된 기능이 사용되고 있으나 , 지금은 기본 기능을 살펴보는게 우선이므로 , 이것에 대한 설명은 다음에 다시 설명드리도록 하겠습니다.(무책임 -_-;)



2. Controller


Routing에 따르면 현재 http://localhost 를 호출하게 되면 Home 컨트롤러에 index Action 을 호출하도록 설정되어 있는 것을 알 수 있습니다. 그렇지만 현재 MVC 프로젝트에 있는 컨트롤러에는 아무것도 정의되어 있지 않음을 알 수 있습니다. 먼저 올바르게 페이지를 표시하기 위해 HomeController를 생성해 보도록 하겠습니다.



컨트롤러폴더에서 오른쪽 클릭해서 add를 선택하면 기존 asp.net 과 달리 controller 를 선택하는 매뉴가 새롭게 있는 것을 알수 있습니다. 이것은 asp.net MVC에서 선보이는 스캐폴딩이라고 하는 기능으로써 , 원하는 코드를 자동으로 생성해주는 개념입니다. Controller를 선택하고 homeController를 생성하도록 합시다.

3_3.png

[그림 : 컨트롤러 생성]



namespace HelloworldApp3.Controllers

{

    public class HomeController : Controller

    {

        //

        // GET: /Home/

 

        public ActionResult Index()

        {

            return View();

        }

 

    }

}

[코드 : 생성된 컨트롤러와 액션]

 

위와 같이 생성된 컨트롤러에 자동으로 Index Action 이 추가됨을 알수 있습니다.

이로써 사용자는 Index 에 사용자가 원하는 행동을 삽입해 View 에 보여질 Model을 가공해서 보여줄수 있게 됩니다.



3. View


Controller 는 생성되었지만 , 여전히 이 Controller 의 결과값을 보여줄 View는 생성되지 않았습니다. View또한 간단하게 생성이 가능합니다.


3_4.png

위와 같이 Action 에서 오른쪽 클릭을 하게되면 AddView라는 컨텍스트메뉴가 보이는 것을 알수 있습니다. 이를 이용해서 개발자는 간단하게 View까지도 생성할수 있습니다. 너무 간단하죠?

 

이제 localhost를 실행하면 정상적으로 화면이 출력됨을 알수 있습니다.




4. HelloWorld


이제 Controller 에서 View를 조작하는법을 간단하게 소개해드리도록 하겠습니다.

먼저 Index Action 에 다음과 같은 코드를 삽입합니다.



public ActionResult Index()

{

    ViewBag.HelloWorld = "HelloWorld";

    return View();

}


 

이후에 Home/Index.cshtml Index라는 글자 대신 다음의 코드를 삽입합니다.


<h2>@ViewBag.HelloWorld</h2>


 

이제 결과값을 보면 Index Action 에서 정의한 ViewBag.HelloWorld 의 값이 정상적으로 반영되어 있는 모습을 확인할수 있습니다.


 3_6.png

 

Summary

이번장에서는 MVC프레임웍의 기본적인 구조를 살펴보았습니다. 아직 실제 실무에서 사용하기에는 많은 내용이 소개가 되지 않았지만 , 어떻게 페이지가 구성되는지에 설명은 충분히 되었다고 생각합니다. 다음장에서는 MVC프레임웍을 실무에서 사용하기 위한 여러 기능에 대한 간단한 소개를 드리도록 하겠습니다.




ASP.NET MVC3 시리즈 강좌 리스트
[ASP.NET MVC3강좌] 1. MVC(Model- View – Controller) 란 무엇인가.
[ASP.NET MVC3강좌] 2. MVC 환경 세팅
[ASP.NET MVC3강좌] 3. HelloWorld MVC
[ASP.NET MVC3강좌] 4. Layout , Partial Page
[ASP.NET MVC3강좌] 5. Model 을 View에서 표현하기
[ASP.NET MVC3강좌] 6. MVC의 매력적인 기능 스캐폴딩!(With EF)
[ASP.NET MVC3강좌] 7. 유효성 검사
[ASP.NET MVC3강좌] 8. ModelBinder
[ASP.NET MVC3강좌] 9. MVC ActionResult 종류 살펴보기
[ASP.NET MVC3강좌] 10. MVC 처리 프로세스 & ActionFilter
[ASP.NET MVC3강좌] 11. Global.asax
[ASP.NET MVC3강좌] 12. (번외편) Repository Pattern
[ASP.NET MVC3강좌] 13. MEF(Managed Extensibility Framework) in MVC
[ASP.NET MVC3강좌] 14. Javascript in MVC
[ASP.NET MVC3강좌] 15. Javascript Intellicense in Visual Studio
[ASP.NET MVC3강좌] 16. JSON in MVC - 1
[ASP.NET MVC3강좌] 17. JSON in MVC - 2
[ASP.NET MVC3강좌] 18. HTML5 in MVC
[ASP.NET MVC3강좌] 19. MVC Tips 1 - HandleUnknownAction
[ASP.NET MVC3강좌] 20. MVC Tips 2 - Cache ActionFilter





profile

ASP.NET MVP 2009~2011