ASP.NET 컨트롤 디자이너 개요
업데이트: 2007년 11월
ASP.NET에는 웹 서버 컨트롤에 대해 디자이너를 만들 수 있는 향상된 지원이 포함됩니다. 디자이너를 사용하면 컨트롤에 대한 디자인 타임 UI(사용자 인터페이스)를 빌드하여 개발자가 Visual Studio와 같은 비주얼 디자인 도구에서 컨트롤의 속성 및 내용을 구성할 수 있도록 할 수 있습니다. .NET Framework가 제공하는 디자인 타임 아키텍처 및 기능에 대한 자세한 내용은 디자인 타임 지원 확장을 참조하십시오.
이 소개 항목에서는 ASP.NET 컨트롤 디자이너의 기능, 기본 디자이너 클래스 및 그 기능, 디자이너 사용 시나리오에 대해 설명합니다.
디자이너 기능
ASP.NET에서는 이전 버전의 컨트롤 디자이너 아키텍처를 계속 지원하면서 기능도 상당히 개선되었습니다.
영역 기반 편집. 영역은 컨트롤의 디자인 타임 뷰에서 편집 가능한 구역입니다. 이 기능은 디자인 타임에 컨트롤의 내용에 대한 WYSIWYG 편집을 제공합니다.
작업 목록. 작업 목록은 컨트롤의 페이지 개발자가 디자인 타임 UI에서 사용할 수 있는 작업 메뉴입니다. 예를 들어, 컨트롤의 디자인 타임 뷰에는 수행 가능한 작업(예: 컨트롤 서식의 자동 지정 작업)에 대한 메뉴가 제공될 수 있습니다.
데이터 소스 디자이너 및 데이터 바인딩 디자이너. 데이터 소스 컨트롤 디자이너를 사용하면 페이지 개발자가 데이터 소스 컨트롤을 구성할 수 있습니다. 데이터 바인딩된 컨트롤 디자이너를 사용하면 페이지 개발자가 데이터 바인딩된 컨트롤을 구성할 수 있습니다. 데이터 소스 디자이너와 데이터 바인딩 디자이너 사이의 상호 통신을 구현하는 데 사용할 수 있는 몇 가지 기능이 있습니다. 데이터 소스 컨트롤 디자이너의 예제를 보려면 DataSourceDesigner를 참조하십시오. 데이터 바인딩된 컨트롤 디자이너의 예제를 보려면 HierarchicalDataBoundControlDesigner를 참조하십시오.
간소화된 템플릿 편집. 템플릿 기반 컨트롤(예: GridView)의 디자인 타임 편집을 위한 UI를 만드는 모델이 크게 간소화되고 수정되어 컨트롤 개발자가 영역을 사용하여 원하는 대로 템플릿 편집을 수행할 수 있습니다. 예제를 보려면 템플릿 기반 서버 컨트롤 예제를 참조하십시오.
간소화된 개체 모델. 디자인 타임 렌더링 작업을 위한 개체 모델이 간소화되어 이제는 개발자가 디자인 타임 HTML을 만드는 일에 집중할 수 있습니다. 간소화된 개체 모델에 액세스할 수 있도록 ControlDesigner, ContainerControlDesigner 및 CompositeControlDesigner의 새 기본 클래스가 제공됩니다.
호스트 서비스에 등록. 컨트롤 디자이너를 호스트 환경에서 제공하는 다양한 서비스에 등록하면 해당 서비스를 사용할 수 있습니다. 예를 들어 컨트롤 디자이너는 Visual Studio 2005 서비스를 사용하여 데이터 및 구성에 대한 액세스를 제공하고, 디자인 타임에 프로그래밍 방식으로 컨트롤을 페이지에 추가하고, 디자이너에서 클릭 이벤트를 처리하고, 디자인 화면에 그리기를 수행할 수 있으며 디자이너 상태 같은 기타 서비스에 액세스할 수 있습니다.
디자이너 클래스
컨트롤 디자이너는 런타임 컨트롤과 호스트 환경 사이의 중개자 역할을 하여 웹 서버 컨트롤을 디자인 타임에 렌더링할 수 있게 합니다. 호스트 환경 안에서 디자이너는 컨트롤 사용자를 위한 디자인 타임 UI를 만들 수 있도록 다음과 같은 기능을 제공합니다.
디자인 타임 렌더링 및 내용. 컨트롤 디자이너를 사용하면 간단한 렌더링과 복잡한 렌더링을 비롯하여 다양한 렌더링이 가능합니다. 컨트롤에 대해 영역 기반 편집 및 템플릿 편집 같은 디자인 타임 UI를 제공할 수 있습니다. 또는 디자인 타임에 컨트롤로 작업하는 개발자가 컨트롤의 런타임 렌더링 방식과 관련하여 여러 옵션 중에서 선택할 수 있도록 컨트롤에 대해 열 편집 또는 여러 런타임 뷰를 제공할 수도 있습니다.
기타 디자인 타임 클래스. 디자이너 클래스 외에, 형식이나 속성에 연결되어 형식 변환(예: 문자열을 값으로 변환)을 수행하는 형식 변환기 클래스도 있습니다. 또한 속성 편집을 위한 특수 UI를 제공하는 UI 형식 편집기 클래스도 있습니다. 예를 들어, 속성 표에 있는 색 선택 드롭다운 목록을 사용하면 웹 컨트롤의 색 속성에 사용할 색을 선택할 수 있습니다. 또한 컨트롤의 속성을 전체적으로 편집할 수 있는 클래스인 특수 구성 요소 편집기를 만들 수도 있습니다.
연결된 컨트롤 데이터의 지속성. 컨트롤의 내부 속성 및 내용을 지속시켜 디자인 타임 환경에서 컨트롤과 해당 자식 컨트롤의 상태를 유지할 수 있습니다. 이 기능은 구성된 컨트롤이 태그에 어떻게 정의되었는지에 따라 달라집니다.
웹 서버 컨트롤의 컨트롤 디자이너를 만들 때는 일반적으로 다음과 같은 기본 클래스를 사용할 수 있습니다.
-
웹 서버 컨트롤을 디자인 타임에 지원하는 기본 클래스입니다.
-
컨트롤의 하위 컨트롤 컬렉션을 편집할 수 있는 간단한 포함 컨트롤의 기본 클래스입니다. 이 디자이너는 편집 가능한 영역을 하나 무료로 제공하며 호스트(예: Visual Studio 2005)는 모든 렌더링을 자동으로 제공합니다.
-
합성 웹 서버 컨트롤의 렌더링을 디자인 타임에 지원하는 기본 클래스입니다. 하위 컨트롤의 렌더링을 프로그래밍 방식으로 제어하기도 합니다.
DataSourceDesigner, BaseDataBoundControlDesigner 및 HierarchicalDataSourceDesigner
이 기본 클래스는 데이터 소스 및 데이터 바인딩된 컨트롤을 디자인 타임에 지원합니다. 서로 간에 통신하도록 디자인되었습니다.
디자이너를 사용하는 시나리오
컨트롤 디자이너를 사용하는 시나리오는 크게 두 가지, 즉 사용자 지정 컨트롤을 개발하는 경우와 비주얼 디자인 도구를 개발하는 경우로 나뉩니다.
사용자 지정 웹 서버 컨트롤을 개발하는 경우에는 연결된 디자이너를 만들어 페이지 개발자가 디자인 타임에 컨트롤을 쉽게 구성할 수 있도록 할 수 있습니다. 이 시나리오는 컨트롤을 여러 명의 페이지 개발자가 다시 사용하는 경우에 특히 유용합니다. 예를 들어, 사용자 지정 차트 컨트롤을 만드는 경우 연결된 컨트롤 디자이너를 제공하면 여러 명의 인트라넷 페이지 개발자가 각각 서로 다른 스타일을 사용하여 페이지에 컨트롤을 구성할 수 있습니다.
Visual Studio 2005 또는 Microsoft FrontPage와 유사한 비주얼 웹 디자인 도구를 개발하는 경우에는 컨트롤 디자이너 호스팅 구성 요소를 활용할 수 있습니다. 이렇게 하면 서비스 제공 및 컨트롤 디자이너와의 상호 작용을 위한 도구를 제공하여 사용자 지정 컨트롤에 대한 디자인 타임 렌더링을 제공할 수 있습니다.
.NET Framework 디자이너 아키텍처에 대한 자세한 내용은 디자인 타임 아키텍처를 참조하십시오. 사용자 지정 웹 서버 컨트롤의 디자이너를 직접 만드는 데 대한 자세한 내용은 연습: 웹 서버 컨트롤의 기본 컨트롤 디자이너 만들기를 참조하십시오. 서비스 및 작업 목록과 함께 사용자 지정 컨트롤 디자이너를 만들어서 디자인 타임 UI(사용자 인터페이스)를 제공하는 방법에 대한 자세한 내용은 작업 목록과 서비스가 있는 샘플 컨트롤 디자이너를 참조하십시오.
사용자 지정 컨트롤 디자이너 보안 설정
컨트롤이 디자인 뷰에 있는 경우 디자이너 구성 요소는 속성 변경 내용을 처리하고 Visual Studio와 같은 디자인 호스트에서 태그를 렌더링합니다. 디자인 타임에 컨트롤의 디자이너 구성 요소는 디자인 호스트와 동일한 신뢰 수준으로 실행됩니다. 디자이너 구성 요소는 데이터베이스에 액세스할 수 있고, 원격 서버에서 웹 사이트를 호출할 수 있고, 개발자의 컴퓨터에 파일을 쓰거나 만들 수 있고, 전자 메일 메시지를 보낼 수 있으며 다른 어셈블리의 코드를 실행할 수 있습니다.
이 단원에서는 컨트롤 디자이너 기능의 보안을 향상시킬 수 있는 유용한 정보를 설명합니다.
다음과 같은 코딩 및 구성에 대한 유용한 정보를 사용하여 응용 프로그램의 보안을 향상시키는 것 외에도 Microsoft Windows 및 IIS(인터넷 정보 서비스)에 대한 최신 보안 업데이트를 사용하여 응용 프로그램 서버를 최신 상태로 계속 유지해야 합니다. 또한 컴퓨터에 설치한 고급 사용자 지정 컨트롤 패키지의 최신 릴리스를 사용해야 합니다.
Michael Howard와 David LeBlanc이 공동 저술한 "Writing Secure Code"에서 안전한 코드 작성과 응용 프로그램 보안을 위한 유용한 정보를 찾아볼 수 있습니다. 자세한 내용은 Microsoft Patterns and Practices 웹 사이트 및 지침 및 최선의 구현 방법를 참조하십시오.
사용자 지정 컨트롤 사용자의 보안 문제
출처를 알 수 없는 사용자 지정 컨트롤은 컴퓨터에서 중요한 데이터를 웹에 노출하거나 디자인 타임에 악의적인 코드를 실행하는 디자이너를 포함할 수 있다는 사실에 유의해야 합니다. 컨트롤 디자이너는 항상 디자인 호스트에서 완전 신뢰 수준으로 실행되어야 하기 때문에 코드 액세스 구성을 사용하여 컨트롤 디자이너에 대한 액세스를 제한할 수 없습니다. 신뢰 수준에 대한 자세한 내용은 ASP.NET 신뢰 수준 및 정책 파일을 참조하십시오. 코드 액세스 보안에 대한 자세한 내용은 코드 액세스 보안 소개를 참조하십시오.
사용자 지정 컨트롤 개발자의 보안 문제
디자이너 구성 요소는 디자인 호스트에서 완전 신뢰 수준으로 실행되어야 하기 때문에 클래스 및 멤버에 대한 구성 특성을 사용하여 권한을 컨트롤 기능에 필요한 최소 수준으로 제한하는 것은 디자이너 구성 요소의 보안 조치로는 충분하지 않습니다.
가능하면 데이터베이스의 라이브 데이터를 사용하여 GridView 컨트롤과 같은 데이터 컨트롤의 미리 보기에 대한 예제 구조를 표시하지 마십시오. 데이터베이스에 있는 중요한 데이터가 노출될 위험이 있습니다. 대신 예제 데이터 구조를 사용하여 미리 보기용으로 데이터를 빌드하십시오.
디자인 호스트 개발자의 보안 문제
Visual Studio와 같은 디자인 호스트를 개발하는 경우 디자이너에서 반환되는 HTML 태그, 텍스트 및 기타 데이터를 표시하기 전에 보안상 위험을 확인해야 합니다. 또한 HTML 태그 문자열과 디자이너 영역의 크기를 관리할 수 있는 크기로 제한해야 합니다. HTML 유효성 검사에 대한 자세한 내용은 ASP.NET 웹 페이지에서 사용자 입력 유효성 검사를 참조하십시오.
여러 개발 도구 지원
이 항목에 설명된 모든 기능은 Microsoft Visual Web Developer에서 지원되지만 일부 개발 도구에서는 지원되지 않을 수도 있습니다. 지원되지 않을 수도 있는 기능의 예는 다음과 같습니다.
영역. 컨트롤 개발자는 SupportsRegions 속성을 검사하여 컨트롤 디자이너의 동작을 적절하게 수정할 수 있습니다.
호스트 서비스. 컨트롤 개발자는 서비스를 사용하기 전에 GetService 메서드의 반환 값을 검사할 수 있습니다. 예제를 보려면 방법: 컨트롤 디자이너에서 서비스 및 작업 목록 사용을 참조하십시오.
영역 컬렉션. 일부 개발 도구에서는 영역 컬렉션이 지원되지 않으므로 GetDesignTimeHtml 메서드의 두 버전을 모두 재정의하는 것이 좋습니다.