다음을 통해 공유


ASP.NET MVC 개요

작성자: Microsoft

ASP.NET MVC 애플리케이션과 ASP.NET Web Forms 애플리케이션 간의 차이점에 대해 알아봅니다. ASP.NET MVC 애플리케이션을 빌드할 시기를 결정하는 방법을 알아봅니다.

MVC(Model-View-Controller) 아키텍처 패턴에서는 응용 프로그램을 모델, 뷰 및 컨트롤러라는 세 가지 주 구성 요소로 분리합니다. ASP.NET MVC 프레임워크는 MVC 기반 웹 애플리케이션을 만들기 위한 ASP.NET Web Forms 패턴에 대한 대안을 제공합니다. ASP.NET MVC 프레임워크는 가볍고 테스트하기 편리한 프레젠테이션 프레임워크이며, Web Forms 기반 응용 프로그램에서와 마찬가지로 마스터 페이지 및 멤버 자격 기반 인증 같은 기존 ASP.NET 기능과 통합되어 있습니다. MVC 프레임워크는 System.Web.Mvc 네임스페이스에 정의되어 있으며 System.Web 네임스페이스에서 지원되는 기본 부분입니다.

MVC는 많은 개발자에게 친숙한 표준 디자인 패턴입니다. 일부 유형의 웹 응용 프로그램에서는 MVC 프레임워크의 이점을 활용하지만, 다른 유형의 웹 응용 프로그램은 Web Forms 및 포스트백에 기반을 둔 기존 ASP.NET 응용 프로그램 패턴을 계속 사용합니다. 이러한 두 가지 접근법을 결합하는 웹 응용 프로그램도 있는데, 두 접근법은 상호 배타적이지 않습니다.

MVC 프레임워크에 포함되어 있는 구성 요소는 다음과 같습니다.

매개 변수 값이 필요한 컨트롤러 작업 호출

그림 01: 매개 변수 값이 필요한 컨트롤러 작업 호출(전체 크기 이미지를 보려면 클릭)

  • 모델. 모델 개체는 애플리케이션의 데이터 도메인에 대한 논리를 구현하는 애플리케이션의 부분입니다. 모델 개체는 주로 데이터베이스에서 모델 상태를 검색하고 저장하는 역할을 수행합니다. 예를 들어 Product 개체는 데이터베이스에서 정보를 검색하고 작업한 다음 업데이트된 정보를 SQL Server Products 테이블에 다시 쓸 수 있습니다.

작은 응용 프로그램에서 모델은 일반적으로 실제적 분리가 아니라 개념적 분리인 경우가 많습니다. 예를 들어 애플리케이션이 데이터 집합만 읽고 뷰로 보내는 경우 애플리케이션에는 물리적 모델 계층 및 연결된 클래스가 없습니다. 이 경우 데이터 집합은 모델 개체의 역할을 맡습니다.

  • 보기. 뷰는 애플리케이션의 UI(사용자 인터페이스)를 표시하는 구성 요소입니다. 일반적으로 이 UI는 모델 데이터에서 만들어집니다. 예를 들어 Products 개체의 현재 상태에 따라 텍스트 상자, 드롭다운 목록 및 검사 상자를 표시하는 Products 테이블의 편집 보기가 있습니다.

  • 컨트롤러. 컨트롤러는 사용자 상호 작용을 처리하고 모델을 사용해 궁극적으로 UI를 표시하는 뷰 중 어느 뷰를 렌더링할지 선택하는 구성 요소입니다. MVC 애플리케이션에서 보기는 정보만 표시합니다. 컨트롤러가 사용자 입력 및 상호 작용을 처리하고 응답합니다. 예를 들어 컨트롤러는 쿼리 문자열 값을 처리하고 이러한 값을 모델에 전달하여 값을 사용하여 데이터베이스를 쿼리합니다.

MVC 패턴을 사용하면 응용 프로그램의 서로 다른 요소(입력 논리, 비즈니스 논리 및 UI 논리)를 분리하면서 이러한 요소 간의 느슨한 결합을 제공하는 응용 프로그램을 만들 수 있습니다. 이 패턴에서는 각 논리 유형이 응용 프로그램의 어느 위치에 있어야 하는지 지정합니다. UI 논리는 보기에 속합니다. 입력 논리는 컨트롤러에 속합니다. 비즈니스 논리는 모델에 속합니다. 이와 같이 분리하면 구현 시 한 번에 하나의 측면에만 집중할 수 있으므로 응용 프로그램을 빌드할 때 복잡해지지 않도록 관리하는 데 도움이 됩니다. 예를 들어, 뷰를 만들 경우 비즈니스 논리에 의존하지 않고 뷰에만 집중할 수 있습니다.

MVC 패턴을 사용하면 복잡성을 관리할 수 있을 뿐만 아니라 Web Forms 기반 ASP.NET 웹 응용 프로그램을 테스트하는 경우보다 쉽게 응용 프로그램을 테스트할 수 있습니다. 예를 들어, Web Forms 기반 ASP.NET 웹 응용 프로그램에서는 출력을 표시하고 사용자 입력에 응답하는 데 하나의 클래스만 사용됩니다. Web Forms 기반 ASP.NET 응용 프로그램의 경우 개별 페이지를 테스트하려면 페이지 클래스뿐만 아니라 모든 자식 컨트롤과 응용 프로그램의 다른 종속 클래스까지 인스턴스화해야 하기 때문에 자동화된 테스트를 작성하는 것이 복잡해질 수 있습니다. 페이지를 실행하기 위해 너무 많은 클래스가 인스턴스화되기 때문에 응용 프로그램의 개별 부분에만 집중하는 테스트를 작성하기가 힘들 수 있습니다. 이러한 이유로 Web Forms 기반 ASP.NET 응용 프로그램의 테스트는 MVC 응용 프로그램에서의 테스트보다 구현하기 어렵습니다. 또한 Web Forms 기반 ASP.NET 응용 프로그램에서의 테스트에는 웹 서버가 필요하다는 단점도 있습니다. MVC 프레임워크에서는 구성 요소를 분리하고 인터페이스를 많이 사용하므로 개별 구성 요소를 프레임워크의 나머지 부분과 분리하여 테스트할 수 있습니다.

MVC 응용 프로그램의 세 가지 주요 구성 요소 간의 느슨한 결합은 병렬 개발을 촉진하기도 합니다. instance 경우 한 명의 개발자가 보기에서 작업할 수 있고, 두 번째 개발자는 컨트롤러 논리에서 작업할 수 있으며, 세 번째 개발자는 모델의 비즈니스 논리에 집중할 수 있습니다.

MVC 애플리케이션을 만들 시기 결정

ASP.NET MVC 프레임워크 또는 ASP.NET Web Forms 모델 중 어느 것을 사용해 웹 응용 프로그램을 구현할지 신중하게 고려해야 합니다. MVC 프레임워크가 Web Forms 모델을 대체하지는 않지만, 두 가지 프레임워크 모두 웹 응용 프로그램에 사용할 수 있습니다. 또한 기존의 Web Forms 기반 응용 프로그램은 이전과 동일하게 계속 작동합니다.

특정 웹 사이트에 MVC 프레임워크와 Web Forms 모델 중 어느 것을 사용할지 결정하기 전에 각 접근법의 장점을 비교 평가하십시오.

MVC 기반 웹 응용 프로그램의 이점

ASP.NET MVC 프레임워크에서 제공하는 이점은 다음과 같습니다.

  • 응용 프로그램을 모델, 뷰 및 컨트롤러로 분할해 복잡성을 관리하기 쉽습니다.
  • 뷰 상태 또는 서버 기반 양식을 사용하지 않습니다. 따라서 MVC 프레임워크는 응용 프로그램의 동작을 완벽히 제어하려는 개발자에게 적합합니다.
  • 단일 컨트롤러를 통해 웹 응용 프로그램 요청을 처리하는 프런트 컨트롤러 패턴을 사용합니다. 따라서 풍부한 라우팅 인프라를 지원하는 응용 프로그램을 디자인할 수 있습니다. 자세한 내용은 프런트 컨트롤러를 참조하세요.
  • TDD(테스트 구동 방식 개발)에 대해 향상된 지원을 제공합니다.
  • 애플리케이션 동작에 대한 높은 수준의 제어가 필요한 대규모 개발자 및 웹 디자이너 팀에서 지원하는 웹 애플리케이션에 적합합니다.

Web Forms 기반 웹 응용 프로그램의 이점

Web Forms 기반 프레임워크에서 제공하는 이점은 다음과 같습니다.

  • HTTP상의 상태를 보존하는 이벤트 모델을 지원하므로 LOB(Line-Of-Business) 웹 응용 프로그램 개발에 도움이 됩니다. Web Forms 기반 응용 프로그램에서는 수백 개의 서버 컨트롤에서 지원하는 수십 가지 이벤트를 제공합니다.
  • 또한 개별 페이지에 기능을 추가하는 페이지 컨트롤러 패턴을 사용합니다. 자세한 내용은 페이지 컨트롤러를 참조하세요.
  • 상태 정보를 더 쉽게 관리할 수 있는 보기 상태 또는 서버 기반 양식을 사용합니다.
  • 적은 수의 웹 개발자로 구성된 팀과 신속한 응용 프로그램 개발에 사용 가능한 다수의 구성 요소를 활용하려는 디자이너에게 매우 적합합니다.
  • 일반적으로 구성 요소( Page 클래스, 컨트롤 등)는 긴밀하게 통합되어 있으며 일반적으로 MVC 모델보다 코드가 적기 때문에 애플리케이션 개발에 덜 복잡합니다.

ASP.NET MVC 프레임워크의 기능

ASP.NET MVC 프레임워크에서 제공하는 기능은 다음과 같습니다.

  • 기본적으로 애플리케이션 작업(입력 논리, 비즈니스 논리 및 UI 논리), 테스트 용이성 및 TDD(테스트 기반 개발)의 분리입니다. MVC 프레임워크의 모든 핵심 계약은 인터페이스를 기반으로 하며 모의 개체를 사용해 테스트할 수 있습니다. 모의 개체는 응용 프로그램에 있는 실제 개체의 동작을 모방하는 시뮬레이션 개체입니다. ASP.NET 프로세스에서 컨트롤러를 실행하지 않아도 응용 프로그램에 대해 단위 테스트를 수행할 수 있으므로 단위 테스트의 속도 및 유연성이 확보됩니다. .NET Framework와 호환되는 모든 단위 테스트 프레임워크를 사용할 수 있습니다.
  • 확장 가능한 플러그형 프레임워크. ASP.NET MVC 프레임워크의 구성 요소는 쉽게 교체하거나 사용자 지정할 수 있도록 설계되어 있습니다. 따라서 사용자 고유의 뷰 엔진, URL 라우팅 정책, 작업 메서드 매개 변수 serialization 및 기타 구성 요소를 플러그 인으로 추가할 수 있습니다. ASP.NET MVC 프레임워크에서는 DI(Dependency Injection) 및 IOC(Inversion of Control) 컨테이너 모델의 사용도 지원합니다. DI를 사용하면 클래스를 사용하여 개체 자체를 만드는 대신 클래스에 개체를 삽입할 수 있습니다. IOC는 특정 개체에서 다른 개체가 필요한지, 첫 번째 개체가 구성 파일 같은 외부 소스에서 두 번째 개체를 가져와야 하는지를 지정합니다. 이 모델을 사용하면 테스트를 쉽게 수행할 수 있습니다.
  • 이해할 수 있고 검색 가능한 URL이 있는 애플리케이션을 빌드할 수 있는 강력한 URL 매핑 구성 요소입니다. URL에 파일 이름 확장명을 포함할 필요가 없으며, URL은 SEO(Search Engine Optimization) 및 REST(Representational State Transfer) 주소 지정 방식에 적합한 URL 이름 지정 패턴을 지원하도록 설계되어 있습니다.
  • 기존 ASP.NET 페이지(.aspx 파일), 사용자 정의 컨트롤(.ascx 파일) 및 마스터 페이지(.master 파일) 태그 파일의 태그를 뷰 템플릿으로 사용하도록 지원. 중첩된 master 페이지, 인라인 식(<%= %>), 선언적 서버 컨트롤, 템플릿, 데이터 바인딩, 지역화 등과 같은 ASP.NET MVC 프레임워크에서 기존 ASP.NET 기능을 사용할 수 있습니다.
  • 기존 ASP.NET 기능에 대한 지원. 양식 인증, Windows 인증, URL 권한 부여, 멤버 자격 및 역할, 출력 및 데이터 캐싱, 세션 및 프로파일 상태 관리, 상태 모니터링, 구성 시스템, 공급자 아키텍처 등의 기능을 ASP.NET MVC에서 사용할 수 있습니다.