[2009. 8] ASP.NET 개발의 새로운 방법론, ASP.NET MVC 프레임워크
Project P 2009/08/02 20:40 |
안녕하세요~ ^^ MSP로 뽑히고 나서 오리엔테이션도 다녀오고 이제 본격적으로 MSP로서의 활동을 시작하게 되었네요.
앞으로 MSP 활동을 하게 되면서 느끼게 될 많은 경험들과 배움, 그리고 즐거움을 생각하면 진짜 지금도 괜히 들뜨게 되는것 같습니다.
그 첫번째 시작을 이번 Project P를 통해서 시작해 보고자 합니다. 처음이니깐 뭔가 거창한걸 해야 하는건가 생각도 했었는데요... 결국 결론은 역시 제가 그동안 관심있었던 분야에 대한 소개를 통해 가볍게(?) 출발하는 것이 좋을 것 같다는 생각이 들었습니다. ^^
그동안 저는 웹과 관련된 기술적인 이슈나 개발 방식등에 많은 관심을 가져왔었고 실제 프로젝트도 해보고 발표도 하면서 관련분야에 대한 경험을 해볼수 있었습니다. 그래서 이번에 MSP 활동을 시작하게 되면서 Microsoft 의 .NET 기반 웹 기술에 대한 관심을 가지게 되었습니다.
2000년대 초반 .NET이 Microsoft 의 새로운 기술 패러다임으로 등장한 이후로 부터 기존의 ASP(Active Server Page)로 대표되는 VBScript와 같은 서버스크립트 기반 환경에서 ASP.NET이라는 그 이상을 포괄하는 새로운 기술 환경이 등장하게 되었습니다.
닷넷 프레임워크 1.0에서 2.0이 등장하면서 큰 변화가 있었고 3.0부터 지금 3.5까지 (앞으로 Visual Studio 2010에 4.0이 기본 닷넷 프레임워크로 등장한다고 들었습니다.) 출시되는 동안 ASP.NET은 거의 10여년 동안 마이크로소프트의 웹 개발 관련 기술의 기본 축을 담당해왔다고 볼 수 있습니다. 또한 이후로 Ajax와 같은 동적인 웹환경에 대한 필요에 부응하기 위해 ASP.NET AJAX와 같은 프래임웍이 추가되었고 새로운 RIA(Rich Internet Application) 환경에 대한 기술적인 필요성이 증가함에 따라서 Microsoft에서는 Silverlight 같은 기술까지 출시하였습니다. 정말 어떻게 보면 짧은 시간동안 어마어마한 변화가 있었죠~
그런데, .... 솔직히 말씀드리겠습니다. 그동안 저는 ASP.NET 기반으로 재대로 된(?) 프로젝트를 해본적이 없었습니다. 하하... 이거 왠지 이렇게 말하고 나니깐 정말 쑥스럽네요 ^^; 그동안 저는 Java EE(Enterprise Edition) 기반의 웹 개발 방식과 관련 기술에 대해서 주로 공부를 해왔었습니다. 그렇다 보니 아무래도 .NET 기반의 개발에 대한 약간(?)의 걱정과... 그래도 드는 궁금증에 MSP가 되고 나서 조금씩 ASP.NET에 대한 공부를 해봤습니다.
그런데 확실히 .NET 기반 그리고 비주얼 스투디오를 이용해서 개발하는 ASP.NET 웹 프로젝트는 정말로 간편하더군요..;; 특히 웹페이지를 구성해나가는 측면에서 봤을때 이미 구현이 완료된 컨트롤들을 이용해서 쉽게 구현이 가능하다보니...(물론 새부적인 디자인 측면은 일단 제외하고 기능적인 요소만 고려했을때 입니다 ^^;;) 조금만 익숙해지면 개발의 편의성이 참 많이 올라가겠다는 생각이 들었습니다.
기본적으로 기존의 ASP.NET 프로그래밍은 웹폼 기반, 이벤트 기반 방식으로 웹페이지 로직을 구성해 왔습니다. 이부분에 대해서는 많은 분들이 아실것이라 생각합니다. 그래도 기본적인 부분만 간단하게 정리하고 넘어가도록 하겠습니다.
게다가 Event 기반의 처리를 통해서 해당하는 동작을 처리하는데 말 그대로 .NET 응용 프로그램에서 여러 상황에 맞게 미리 정의된 이벤트 집합에 대해서 해당 이벤트가 발생하면 그 이벤트를 핸들링 하는 방식으로 직관적인(!) 처리가 가능하도록 합니다. 예를 들자면 Button을 클릭하면 해당 Button 서버 컨트롤에 매핑되어 있는 Click 이벤트의 핸들러 매소드가 실행되는 식이죠~
아직도 잘 이해가 안되신다구요~!?? 그렇다면 여기에 대해 좀더 이해를 도울 수 있는 글을 소개해 보겠습니다.
웹폼(Web Form)으로 시작하는 ASP.NET
출처 : http://www.taeyo.net/Columns/View.aspx?SEQ=62&PSEQ=6&IDX=0
그럼 지금 부터 말씀드릴 ASP.NET MVC 프래임워크라는건 기존의 웹폼 방식과 과연 무엇이 어떻게 다른 걸까요??
다른분들은 어떻게 생각하셨을지 모르겠지만 저는 ASP.NET MVC 란 말을 보자마자... 오우 야~ ^^ 바로 이거다!! 하는 생각이 들더군요... 왠지 모를 반가움(?)과 함께...
그동안 제가 쭈~욱 공부해온 Java 기반의 웹 개발 방식과 어쩌면 비슷한 방향으로 흘러가겠다라는 생각이 들었습니다... Java 진영에서는 그동안 정말 옛날 옛적의 단순 JSP 페이지 만으로 개발해오던(어떻게 생각하면 ASP 방식과 유사하다고 생각합니다.) 방식(보통 모델 1 방식이라 지칭) 방식에서 일찌감치 벗어나서 Java EE Servlet 스팩을 활용한 MVC를 적용하였고 요세의 추새는 Apache에서 나온 Struts나 기존의 EJB(Enterprise Java Beans)에 대한 새로운 대안으로 등장한 경량화된 컨터이너(?)를 지향하는 Spring Framework와 같은 오픈소스 기반 프래임워크를 통해 MVC 패턴을 통한 개발 방식이 주류를 이루는 추세라고 할 수 있습니다.
그런데 이번에 소개할 ASP.NET MVC를 접해보고나서 ASP.NET에서도 이런 방식의 개발 방법에 대한 지원을 해주는 구나하고 정말 많은 기대를 가지게 되었습니다.
그렇다면 MVC는 도대체 뭐길래... 계속 그렇게 강조하고 있는지 궁금해 하실 분도 더러 있을 것이라 생각됩니다. 사실 MVC, MVC 패턴이라는 단어는 웹 어플리케이션을 개발하는 방식에만 한정된 것이 아니라 기존의 응용 어플리케이션을 개발할때부터 종종(!) 등장해오던 개념이라고 할 수 있습니다. 간단하게 MVC 패턴에 대해서 언급하자면 실재 프로세스의 처리 로직(보통 Business Logic으로 지칭)과 해당 어플리케이션을 사용하게될 유저에게 보여지는 UI부분(보통 Presentation Layer, View로 지칭)을 분리하여 각각의 컴포넌트간의 독립적인 관리가 가능하도록 해주고 두 영역간의 호출을 Controller(요청을 분기하고 관리하는 로직)를 통해서 이루어 지는형태를 가지게 됩니다.
우선 웹 애플리케이션의 구조를 Model(모델), View(뷰), Controller(컨트롤러)로 분리하는 MVC 패턴에서 각각의 그러한 컴포넌트들의 역할에 대해서 먼저 살펴보도록 하겠습니다. 각각의 분리는 물리적인 분리라기 보다는 논리적인 분리임을 기억하시고 다음 내용을 살펴보시기 바랍니다.
1. Model(모델)
모델은 실제 로직을 구현하는 애플리케이션의 중요한 부분입니다. 이는 일반적으로 데이터베이스로부터 데이터를 가져와서 담아두거나, 데이터베이스로 저장하는 역할을 수행합니다. 주로 모델링을 통해서 산출된 엔터티들이 이러한 모델에 속하게 되지만, 작은 규모에서는 DataSet도 모델로서 사용될 수 있습니다.
2. View(뷰)
뷰는 사용자 인터페이스 즉, UI을 출력하는 컴포넌트입니다. 일반적으로 UI는 모델의 데이터를 기반으로 만들어집니다. 화면 출력과 관계된 로직을 포함할 수는 있지만, 사용자 입력이나 인터렉션, 업무와 관계된 로직은 결코 View가 가져서는 안됩니다. 이는 오로지 화면을 출력하기 위한 역할만을 담당하기 때문입니다.
3. Controller(컨트롤러)
어찌 보면 MVC에서 가장 핵심이 되는 컴포넌트입니다. 사용자의 인터렉션을 처리하고, 모델을 조작하며, 최종 UI로 출력될 뷰를 결정하는 역할을 담당합니다. 전체적인 코디네이터 역할을 한다고 볼 수 있는데요. 이는 사용자의 입력 값을 수신하고 데이터 모델을 통해서 필요한 데이터를 가져와 응답(Response)을 구성하는 전반적인 책임을 담당합니다.
출처 : http://www.taeyo.net/Columns/View.aspx?SEQ=214&PSEQ=11&IDX=0
그러면 이제부터 ASP.NET MVC 프래임워크에 대한 소개와 더불어 Visual Studio 2008을 이용해서 간단한 데모 프로젝트를 만들어 보도록 하겠습니다.
ASP.NET MVC에 대한 소스코딩을 하기 위해서는 당연히(!) 비주얼 스투디오에서 실행해봐야 할 텐데요~ 하지만 Visual Studio 2008이 출시된 때에는 ASP.NET MVC가 포함되어 있지 않았기 때문에 ASP.NET MVC 관련 설치 파일을 다운로드 받아서 설치해야 합니다. 지금 현재는 여러차례의 preview 버전과 beta 버전, 그리고 최종 RC(Release Candidate - 최종 발표전에 마지막으로 발표하는 테스트 버전)을 거처 ASP.NET MVC 1.0 버전이 정식으로 발표되었습니다.
http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&displaylang=en
위의 링크에서 관련 파일들을 다운로드 받고 AspNetMVC1.msi을 실행시켜 ASP.NET MVC 1.0을 설치해 주면 되겠습니다.
MvcApplcation1 애플리케이션 만들기
자. 이제 VS 2008을 실행하시고요. 다음과 같이 C# 언어 텝에서 Web 프로젝트 중 ASP.NET MVC Web Application을 선택하세요.
확인 버튼을 누르고 나면 그 다음으로 Unit Test 전용 프로젝트를 만들지를 묻는 메뉴가 뜹니다. ASP.NET MVC 어플리케이션에서는 모듈별 유닛테스트를 좀 더 용이하게 해 줄 수 있는 환경을 제공해 줍니다. 기본으로 Visaul Studio Unit Test를 선택하고 다음으로 넘어가겠습니다.
[OK] 버튼을 누르면 드디어 첫번째 ASP.NET MVC 어플리케이션이 만들어 지게 됩니다.
기본적으로 Visual Studio를 사용하여 ASP.NET MVC 애플리케이션을 생성하면 자동적으로 프로젝트에 몇 개의 파일과 디렉터리가 추가되어 있는 것을 확인 할 수 있습니다.
프로젝트 구조를 보시면 MVC 패턴의 Model과 Controller, View가 각각의 폴더로 존재하는 것을 확인하실 수 있습니다. 각각의 폴더에 각각의 모듈을 작성하도록 되어있습니다.
이러한 ASP.NET MVC 프로젝트는 기본적으로 여섯 가지의 최상위 디렉터리를 정의하고 있습니다.
/Controllers 디렉터리를 확장해보면 Visual Studio가 HomeController와 AccountController라는 이름의 두 개의 컨트롤러 클래스를 기본적으로 프로젝트에 추가해 둔 것을 발견할 수 있습니다.
/Models 디렉터리는 기본적으로는 빈 폴더인데 이 곳은 데이터를 표현하고 조작하는 클래스들을 보관하는 디렉터리로 ASP.NET MVC 프레임워크에서 모델(Model)은 핵심 로직을 수행하고 데이터베이스에 접근하고 업데이트 하는 등의 작업을 처리합니다.
또한 /Views 디렉터리를 확장해 보면 프로젝트에 기본적으로 추가된 몇 개의 템플릿 파일들과 /Home, /Account, /Shared 등 세 개의 하위 디렉터리를 볼 수 있습니다.
/Content 디렉터리와 /Scripts 디렉터리를 확장해 보면 사이트의 모든 HTML에 적용될 스타일이 정의된 Site.css 파일과 애플리케이션에 ASP.NET AJAX 및 jQuery 지원을 가능하게 해주는 자바스크립트 라이브러리들이 포함되어 있음을 볼 수 있습니다.
그 밖에 /App_Data 디렉터리는 읽거나 쓸 데이터 파일을 보관하는 곳으로 주로 데이터베이스와 관련된 파일들이 이곳이 위치하게 됩니다.
마지막으로 MvcApplcation1.Tests 프로젝트에는 컨트롤러 클래스들에 대한 단위 테스트가 구현된 두 개의 클래스가 포함되어 있습니다.
지금까지 설명한 파일들은 실제로 동작하는 애플리케이션의 기본 구조를 제공하기 위해 Visual Studio에 의해 기본적으로 포함된다. 기본적으로 홈페이지와 소개 페이지, 계정 로그인/로그아웃 및 등록 페이지 그리고 처리되지 않은 예외를 위한 에러 페이지들이 포함되며 이들은 모두 완벽하게 동작한다.
MvcApplcation1 애플리케이션 실행하기
애플리케이션 프로젝트를 실행하려면 [디버그 > 디버깅 시작] 메뉴나 [디버그 > 디버깅 없이 시작] 메뉴를 선택합니다.
그러면 아래 그림과 같이 Visual Studio에 내장된 ASP.NET 웹 서버가 실행되며 애플리케이션이 동작하는 것이 보이게 됩니다.
아래의 그림은 애플리케이션 프로젝트의 홈 페이지가 실행된 모습을 보여주고 있습니다. 기본 메인 화면입니다.^^
[About] 메뉴를 클릭하면 소개 페이지(URL은 “/Home/About”)로 이동하게 됩니다.
우측 상단의 [Log On] 링크를 클릭하면 로그인 페이지(URL은 “/Account/Logon”)로 이동합니다. 로그인을 할수 있는 기본 폼을 보여주고 있습니다.
여기서 잠시 짚고 넘어갈 부분은 MVC 애플리케이션은 웹으로 통한 요청이 물리적인 aspx 파일에 바로 도달하지 않는다는 것입니다. 웹페이지 주소창에 보여지는 URL 주소를 잘 보면 어디서도 .aspx 파일에 대한 정보를 알수가 없습니다.
MVC에서 Aspx는 일종의 뷰 템플릿으로서 사용되며 요청의 흐름은 매번 해당 URL에 지정되 있는 컨트롤러를 거처서 컨트롤러에 의해 최종적인 뷰 화면이 랜더링 되게 되는 것이죠~ 따라서 MVC에서의 요청에 대한 제어의 핵심은 컨트롤러가 담당하는 것이라 생각하시면 되겠습니다.
이상으로 초간단(!) ASP.NET MVC에 대한 소개를 마칠까 합니다. 어떻게 보셨는지 궁금하네요~ ㅎ 별다른(?) 소스코딩 없이도 이 정도까지 기본 틀을 제공해 주는게 참 신기하기까지 했습니다. 물론 이것만으로 완전한 ASP.NET MVC 웹 어플리케이션을 만들었다고 할 수는 없을 것입니다. 다만 지금까지 소개해 드린 MVC 방식의 웹프로젝트의 특징에 대해서 어느정도의 요점만 파악이 되셨다면 이번 포스팅의 역할은 어느정도 이루어진 것이라 생각합니다.
그래도 부족한 부분이 없지 않을까 싶어 다음의 자료를 추가해 봅니다.
웹폼을 사용하지 않고 웹 응용프로그램 개발
출처 : http://msdn.microsoft.com/ko-kr/magazine/cc337884.aspx
그렇다면 이쯤에서 기존 웹 폼 기반과 MVC 기반의 개발 방식간의 차이점에 대해서 한번 비교하고 넘어가봐야겠죠~ !? 저도 사실 MVC에 대해서 알아보면서 이게 제일 궁금했습니다.
웹 폼 기반의 웹 애플리케이션의 장점
: 개별 화면 단위 중심적인 업무를 개발하기에 매우 적합하다.
: 다양한 이벤트를 제공하는 수 많은 서버 컨트롤이 제공되기에, 이벤트 중심적인 개발을 통해 업무 화면을 직관적으로 작성할 수 있다.
MVC 기반의 웹 애플리케이션의 장점
: 모든 요청을 단일 컨트롤러를 통해 처리하므로, 라우팅(routing) 하부구조를 지원하는 애플리케이션을 개발할 수 있다.
: 개발자가 애플리케이션의 동작방식을 전체적으로 제어할 수 있으므로 세밀하게 애플리케이션을 조작하고 싶은 이들에게 적합하다. 단, 이러한 기능(상태정보 관리)이 필요할 경우 추가적인 작업이 요구된다.
출처 : http://www.taeyo.net/Columns/View.aspx?SEQ=214&PSEQ=11&IDX=0
최종정리 하겠습니다 ^^ 지금까지 ASP.NET MVC 프레임워크에 대한 소개를 해봤는데요~ 확실히 감이 확~ 오시는 분도 있고 아직까지는 좀 모르겠는데 하는 분도 계실 거라 생각합니다. 기존에 ASP.NET 기반의 웹 어플리케이션 개발(특히 .NET Framework 2.0 이후)에 대한 풍부한(?) 경험이 많으신 분들한테는 기존의 웹폼을 이용해서 이벤트 기반 방식의 직관적(?)인 개발 방식에 비하면 어떻게 생각하면 다소 복잡해 보이기까지 한 MVC를 적용한 이번 ASP.NET MVC가 다소 복잡해 보일수도 있다고 생각합니다.
하지만 웹어플리케이션의 개발이 한번의 개발로 종료되는 것이 아니라 새로운 기능이 추가되고 그에 해당하는 유지보수의 필요성이 증가하는 방향으로 진행되고 있으며 이러한 필요성에 발맞추어 많은 벤더들이 MVC 관련 프레임워크들을 제시하는 추세에 마이크로소프트 역시 이러한 필요성을 인식하고 이에대한 대안으로 ASP.NET MVC에 대한 도입을 시도하게 된 것이라고 볼수 있겠습니다.
물론 그렇다고 기존 윈폼방식이 전혀 쓸모 없다라는 말은 아니겠죠~ 분명한 것은 패턴은 패턴일뿐!! 시기적절하게 적용 할 때 그 가치(?)가 빛나겠죠?? ^^ 일반적으로는 아무래도 단순히 기능적인 구현만으로만 따지면 윈폼 기반이 좀 더 편하지 않을까 하는 생각을 해봅니다. 물론 이부분은 지극히 저의 개인적인 생각입니다.
앞으로 마이크로소프트에서는 기존 윈폼 방식의 개발과 MVC 방식의 개발 방법을 동시에 지원하는 형태로 진행될 것이라고 합니다. 개발자의 입장에서 보면 프로젝트의 규모와 형태에 맞춰서 유연하게 그에 더 알맞은 방식으로 개발을 진행할수 있을 것이라 생각합니다. 이를 통해 ASP.NET의 자체적인 경쟁력 또한 올라갈 것이라 기대될 수 있으리라 생각합니다.
이것으로 Project P, 그 첫번째 블로그 포스팅을 마칠까 합니다. 이번 포스팅으로 ASP.NET MVC에 대한 이해 및 관심에 조금이나마 도움이 될 수 있었으면 좋겠습니다. 그리고 새삼스럽게 느끼는 거지만 참 공부할 게 많다는 것도 느끼게 되네요~ 끝까지 읽어주셔서 감사합니다 ^^
'Project P' 카테고리의 다른 글
| [2010. 1] 내 손안에 새로운 스마트(SMART)한 도우미, 스마트폰 (0) | 2010/01/20 |
|---|---|
| [2009. 12] SNS(Social Network Service, SNS) (0) | 2009/12/26 |
| [2009. 11] 사용자의 의도까지 파악한다!! 시멘틱 웹 검색! (1) | 2009/11/13 |
| [2009. 10] 구름 속 세로운 세상이 펼처집니다!! 클라우드 컴퓨팅 편 (1) | 2009/10/07 |
| [2009. 9]위젯 전격 해부!! 위젯이 뭐라고 생각하세요? (2) | 2009/09/06 |
| [2009. 8] ASP.NET 개발의 새로운 방법론, ASP.NET MVC 프레임워크 (0) | 2009/08/02 |


댓글을 달아 주세요