안녕하세요 김시원입니다.

차일피일 미뤄왔던 본격 MVC 연재글!

이제 시작합니다. 흐흐흐

MVC를 설명하는데 있어서 가장 먼저 알아야 할 것은 아마도 MVC라는 것이 도대체 무엇인가 하는 것 아닐까 싶습니다. 저 또한 개념적으로는 어느정도 파악하고 있지만 , 이 글을 보실 여러 내공 충만하신 분 앞에서 행여나 졸렬한 글이 될까봐 두려운 마음이 앞서서 , 글을 쓰는 것을 차일 피일 미루게 되었네요 ^^; 최대한 명쾌하고 간단하게 작성해보도록 노력해 보겠습니다.

 

MVC는 소프트웨어 공학에서 사용되는 아키텍처 패턴중에 하나로써 , 이 패턴을 사용함으로써 사용자는 지금까지 주구장창 이슈화 되었던 '분리' 라는 소망을 이룰수 있게 해줍니다. 지금까지 loosely coupled 라는 용어나 , IoC , 좀더 과거로 가면 기초적인 분산처리 시스템 , BLL , DAL 등등 모든 것들이 분리라는것에 초점이 맞춰져 있었었죠.


그렇다면 이것은 대체 뭐를 분리시키는 것일까요? 단순히 말하면 코드를 분리 시키는것인데 , 이렇게만 말씀드리면 모두들 그런말은 나도 하겠다 라고 하면서 브라우저 뒤로 가기 버튼을 누를것입니다(.....) 조금만 참아주세요! 흠흠.. 여튼 여기서 코드를 분리시키는 이유에 대해서 다시 생각을 해보도록 하겠습니다.


개발을 하시다 보면 여러가지 경우(라고 쓰고 마감의 압박 , 사장의 갈굼 이라고 읽는다) 에 의해서 코드를 급하게 작성해본 경험이 있으실겁니다. 이럴 때 만약 해킹의 위험이 있어 DB직접 접근 방식에서 웹서비스 분산처리 방식으로 변경이라는 변경사항을 전달받는다면? 사표를 표창처럼 팀장님께, 또는 사장님께 던지고 싶을 겁니다.


이러한 많은 요구사항을 처리하는 것을 유지보수라고 부르는데요 , 사실 개발 자체보다도 이러한 요구사항을 처리하는데 소요되는 시간이 더 크고 지루할 것이라고 저는 생각합니다.(저는 총 600여개의 메서드를 포팅했는데 , 소요시간만 3일이 걸렸습니다. 스킬이라곤 CV 밖에 쓴 것이 없습니다. 레거시 코드의 유지보수는 이래서 힘듭니다.)


 이러한 문제들을 해결하기 위해 고안된 패턴중에 하나가 MVC입니다.


MVC는 제록스 팰러앨토 연구소에서 스몰토크 관련일을 하던 Trygve Reenskaug 에 의해 1979년에 처음으로 고안되었다고 하네요. 상당히 고전적인 패턴인걸 알수 있죠? 그렇지 이러한 MVC라는 개념은 수 많은 형태의 패턴을 재 창조해 낼 만큼 뛰어난 패턴으로 평가 받고 있습니다. 이 패턴에 영향 받은 대표적인 패턴은 Microsoft 1990년에 사용한 MVP 패턴이 있습니다. 이것은 ASP.NET 에도 사용되어서 많은 사용자에게 인기를 얻었죠. 최근에 WPF에서 많이 사용되고 있는 MVVM 패턴도 MVC에서 파생된 패턴중에 하나라고 할수 있습니다.


그렇다면 이러한 MVC의 목표는 무엇일까요? MVC에서는 사용자 인터페이스로부터 비즈니스 로직을 분리하여 서로에게 영향을 주지 않고 수정할수 있게 하는 것을 목표로 합니다. 각각은 분리된 모듈로써 서로가 해야할 역할이 확실하게 정의되어 있습니다. 이 모델에 대한 설명을 먼저 보도록 하겠습니다.


16044F394DF6D1930DEDAD


[그림 : MVC의 도식도 From MSDN]


Model : MVC의 모델은 실질적인 데이터 풀링 소스의 데이터 타입에 근거합니다. 종종 이것들은 Database Table row 로써 많이 사용되게 되죠. 최대한 원형을 보존한 상태지만 실제 어플리케이션에서 사용할수 있는 형태의 최소한의 가공이 이루어지게 됩니다. 예를들면 바이너리 객체를 ImageType 으로 만들어 주거나 , xml stream XDocument 객체로 만들어주는 것 등이 있겠네요. DAL(Data-Access-Layer) , BLL(Business Logic Layer) 에서 DAL에 해당하는 부분이 되겠습니다.

 

View : MVC에서의 View는 사용자에게 렌더링 되어서 보여질 UI단의 작업을 담당하고 있습니다. 이곳에서 데이터의 재 가공이 이루어지면 , 이미 MVC로써의 분리에는 실패한 것 이라고 볼 수 있겠습니다.(물론 DateTime 을 년//일 식으로 표현하거나 , DateTimePicker 등에 호환시키기 위한 형 변환 등은 가능합니다.) 간단하게 View는 데이터를 보여주는 것 에만 집중 하는 것 이라고 이해하시면 되겠습니다.


Controller : MVC에서의 Controller BLL(Business Logic Layer) 에 가장 가까운 것으로써 , 실제 View 에서 데이터를 보여주거나 , Model 을 검사하고 , 그에 따른 렌더링 방식을 결정하는 것을 목표로 합니다. 즉 실질적인 꼼수는 여기서 다 쓰시면 된다고 보시면 되겠습니다. 사람에 비유하면 Controller 가 사람 Model 은 재료 , 그리고 View는 재료를 버무린 결과물이라고 보시면 이해가 될 것입니다.

 


MVC가 처음 세상에 나왔을 때 , 사용자들은 기존 ASP.NET ASP.NET MVC중 어떤 것을 선택해야 하는지 많이 혼동 하였습니다. 저 또한 그랬었구요, 심지어 저는 MVC는 저에게 필요하지 않은않은 것이라고 까지 치부하기도 하였습니다. 그러나 실제로 사용해 보고 난 후 저는 이 프레임워크가 사용하기에 따라서 ASP.NET 보다 더 많은 생산성을 창출해 낼 수 있다는 것을 깨달았습니다. 물론 ASP.NET Classic 을 전부 커버할 수는 없지만 , MVC가 기존 ASP.NET을 앞지를수 있는 몇가지 근거가 있습니다.

1.     Url Routing 이 자동적으로 지원되어 사용자 친화 URL을 만들기 용이하다.

2.     JQuery프레임워크와 그 개발 시기가 일맥상통하여 , 상대적으로 컨트롤을 만들기가 용이 하였다.

3.     10년 이상된 기존 ASP.NET 보다 최신 기술을 삽입하기가 용이하다.

4.     ViewState 가 없기 때문에 웹페이지가 가볍다.

5.     페이지별로 Controller 가 존재하던 기존 ASP.NET 과 달리 모든 코드가  Method 형태로 되어 있어 단위테스트에 강하다.

6.     카테고리 별로 Controller 을 묶을수 있다.

 


그렇지만 ASP.NET Classic MVC보다 강한점도 있습니다.

1.     컨트롤의 삽입이 빠르다.

2.     이벤트 중심이어서 해당 이벤트를 작성하는것만으로도 빠르게 사용자 요청을 처리할수 있다.

3.     한 페이지에 많은 기능을 빠른 시간내에 삽입할수 있다.



Summary

필자는 웹 어플리케이션의 성격에 따라서 MVC로 개발해야 할 웹 어플리케이션 과 ASP.NET Classic 으로 개발해야하는 웹 어플리케이션이 구분되야 한다고 생각합니다. 분명 한 페이지에 많은 기능이 삽입되면서 ,결과를 빠르게 도출해 내야 하는 페이지에서는 ASP.NET Classic 을 사용하여야 합니다.그렇지만 , 많은 사용자가 몰리고 , 접근성이 중요하며 , 사용자의 사용 경험이 중요한 사이트 (특히 요즈음의 SNS가 그렇죠)에서는 MVC가 강점을 가진다고 볼 수 있습니다. 이러한 장점과 단점을 잘 구분한다면 , ASP.NET 안에서는 또 하나의 강력한 무기를 가지는것이라고 볼 수 있을겁니다.

다음 장 부터는 이러한 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