ASP.NET 기술 문서

ASP.NET 2.0에서 달라진 기능

 

Jayesh Patel, Bryan Acker, Robert McGovern
Infusion Development

2006년 7월

요약: 이 백서에서는 "WPF/E"에 대한 간략한 개요와 이 기술을 차세대 웹 응용 프로그램 개발 스택에 적용하는 방법에 대해 살펴봅니다.

목차


소개

컴퓨터 언어와 프레임워크는 개발 커뮤니티의 요구가 발전함에 따라 함께 발전합니다. ASP.NET 역시 예외는 아닙니다. ASP.NET 2.0은 ASP.NET 프레임워크에 대한 첫 번째 주요 업데이트이며 ASP.NET 1.x에서 발견되는 일반적인 문제에 대한 해결책과 함께 .NET 플랫폼에서 웹 개발의 유연성과 기능을 대폭 향상시킬 수 있는 새 기능을 포함하고 있습니다. 아직도 ASP 응용 프로그램을 사용하고 있다면 ASP.NET 2.0을 통해 더 많은 이점을 얻을 수 있습니다.

이 백서에서는 ASP.NET 응용 프로그램 개발 방법 측면에서 아키텍처 변경과 수정 사항에 대해 설명하고, ASP.NET 2.0에서 제공되는 몇 가지 중요한 새 기능에 대해 살펴보겠습니다. 이 백서의 내용 대부분은 독자가 ASP.NET 1.x에 대한 배경 지식이 있다는 가정 아래 작성되었습니다. ASP.NET 응용 프로그램을 개발한 경험이 없다면 http://msdn2.microsoft.com/ko-kr/asp.net/aa336623(en-us).aspx (영문)에 있는 MSDN 마이그레이션 가이드부터 읽어 보는 것이 좋습니다.

ASP.NET 1.x에서 마이그레이션하는 경우 일반적인 ASP.NET 2.0 변환 문제 및 해결 방법 (영문)도 읽어 보십시오. 이 문서에서는 마이그레이션을 수행하기 위한 실용적인 구현 세부 정보를 제공합니다. 또한 Visual Studio 변환 마법사를 사용하여 ASP.NET 1.x 응용 프로그램을 ASP.NET 2.0으로 업그레이드하는 방법에 대해서도 자세하게 설명합니다.


ASP.NET 2.0의 목표

ASP.NET 2.0 개발 팀은 ASP.NET 1.1을 기반으로 작업하면서 다음과 같은 4가지 목표를 정했습니다.

  1. 웹 응용 프로그램의 신뢰성 및 편리성 향상

    현재 Microsoft IIS 5.0. ASP.NET 2.0에서 실행되는 많은 ASP.NET 1.x 응용 프로그램들은 성능과 확장성 개선을 위해 새로운 IIS 6.0 기능을 활용하고 있습니다. 특히 IIS 6.0은 여러 응용 프로그램을 완전히 독립적으로 호스팅하도록 서버의 성능을 크게 향상시키는 새로운 프로세스 모델을 제공합니다. 각 ASP.NET 응용 프로그램은 격리된 자체 프로세스 내에 위치하므로 우발적으로 다른 응용 프로그램과 상호 작용할 일이 없습니다. 간단히 말하자면 응용 프로그램이 서로를 방해하는 일이 더 이상 발생하지 않습니다. 각 응용 프로그램은 다른 응용 프로그램과 완전히 분리되어 실행됩니다. 한 응용 프로그램에서 오류가 발생하더라도 다른 응용 프로그램에는 영향을 주지 않습니다.

    마스터 페이지, 테마와 같은 새로운 기능을 이용하면 관리 및 구성이 가능한 일관성 있는 구조를 사용하여 대규모 웹 응용 프로그램을 개발할 수 있다는 점에서 편리성이 향상되었습니다.

  2. 일반적인 시나리오에서 작성해야 하는 코드의 양 감소

    ASP.NET 2.0에는 코드를 전혀 작성하지 않고도 데이터 액세스와 같은 빈번한 작업을 수행할 수 있게 해 주는 마법사와 컨트롤이 포함되어 있습니다. Visual Studio 2005에는 데이터 바인딩 테이블이 있는 복잡한 페이지의 레이아웃과 구성을 설정할 수 있는 디자이너가 포함되어 있습니다. 개발자는 마법사를 사용하여 더 빠르고 효과적으로 작업할 수 있습니다.

    ASP.NET 2.0은 .NET Framework의 변경 사항도 활용합니다. 특히 부분 클래스 개념은 ASP.NET 개발자에게 매우 유용합니다. 부분 클래스를 사용하면 코드의 일부만 작성하고 나머지 부분은 ASP.NET 컴파일러가 필요에 따라 작성하도록 할 수 있습니다. 진부한 반복 코드를 더 이상 볼 필요도, 작성할 필요도 없습니다.

  3. 웹 응용 프로그램을 개인 설정할 수 있는 기능 제공

    ASP.NET 2.0에는 응용 프로그램에서 사용자 계정을 관리하고 페이지 콘텐츠 및 레이아웃을 개인 설정할 수 있도록 지원하는 여러 가지 기본 제공 컨트롤이 포함되어 있습니다. 우선, 멤버 자격 서비스를 사용하여 사용자를 추적할 수 있습니다. 새 로그인 컨트롤이 멤버 자격 서비스와 통합되어 있으므로 코드를 전혀 작성할 필요 없이 계정 생성과 사용자 로그인을 자동화할 수 있습니다. 또한 새로운 웹 파트 기능을 이용하여 사용자가 편집 및 개인 설정할 수 있는 컨트롤을 포함하는 웹 응용 프로그램을 만들 수도 있습니다. 사용자는 웹 페이지에 표시되는 파트 중에서 원하는 파트를 선택하여 사용자 지정할 수 있습니다. 마지막으로, 프로필 서비스를 사용하면 선언적인 XML 구성을 통해 사용자 기본 설정 및 데이터를 장기적으로 보존할 수 있습니다.

  4. 일관성 있는 레이아웃과 디자인을 생성하기 위한 향상된 디자인 기능 제공

    ASP.NET 2.0은 일관성 있는 페이지 레이아웃과 디자인을 갖춘 응용 프로그램을 구축하기 위해 마스터 페이지, 테마 및 스킨을 지원합니다. 이러한 새 기능은 손쉽게 구현하고 수정할 수 있으며 대규모 응용 프로그램의 관리 및 유지 용이성을 크게 향상시킵니다.

    ASP.NET 2.0의 많은 새로운 기능들은 이 4가지 목표를 달성하기 위한 것입니다. 이 문서의 나머지 부분에서는 개별적인 기술을 살펴보고, ASP.NET 2.0이 ASP.NET 1.x에서 어떻게 발전하여 강력한 웹 응용 프로그램 개발 플랫폼을 제공하는지 알아보겠습니다.


ASP 개발자에게 ASP.NET 2.0이 갖는 의미

ASP.NET 2.0의 여러 새로운 기능이 ASP 개발자에게 미치는 영향은 개발자의 개발 이력에 따라 크게 달라집니다. 일반적인 ASP의 경우 표나 양식 생성과 같은 비교적 간단한 작업에서도 상당한 HTML 지식과 수작업 코딩이 필요합니다. ASP.NET은 이러한 작업을 대부분 추상화하고, 이를 자동 생성 코드 또는 핵심 클래스 라이브러리로 캡슐화합니다. 이제는 HTML 태그, POST, GET 및 쿼리 문자열에 대해 걱정할 필요가 없어졌으며 비즈니스 논리를 구현하는 코드 개발에만 집중할 수 있게 되었습니다.

기존 ASP 개발에서는 HTML 코드와 스크립트 코드가 혼합되었습니다. 이러한 복합 코드는 가독성을 크게 떨어뜨립니다. 스크립트 코드는 어디에나 삽입할 수 있지만 바로 이러한 특징으로 인해 올바르고 확장 가능한 방식으로 코드를 공유하는 잘 설계된 응용 프로그램을 구축하기는 어렵게 됩니다. ASP.NET 응용 프로그램은 개체 지향 패러다임을 구현하므로 개발 속도를 높이고 기존 코드를 활용하는 데 따르는 복잡성을 줄여 줍니다.

또한 ASP.NET 2.0은 ASP에서 직접 구현해야 했던 많은 중복되는 세부 사항을 대신 처리해 줍니다. 예를 들어 객체 지향 기능을 사용하면 여러 페이지에서 손쉽게 코드를 재사용할 수 있습니다. 또한 마스터 페이지를 활용하여 응용 프로그램을 위한 일관성 있는 디자인을 신속하게 만들거나, 스킨 및 테마를 적용하여 웹 페이지의 모양과 느낌을 프로그래밍 방식으로 설정할 수 있습니다. ASP.NET 2.0에서는 직관적인 디자인 환경, 풍부한 디버깅 도구 집합, 그리고 엄격한 형식의 컴파일 언어를 통해 보다 나은 응용 프로그램을 더 빠르게 개발할 수 있습니다.


ASP.NET 1.x에서의 마이그레이션

프로덕션 환경에 ASP.NET 1.x 응용 프로그램을 사용 중이라면 ASP.NET이 이전 버전과 호환되도록 개발되었다는 사실이 다행스럽게 느껴질 것입니다. 대부분의 경우 ASP.NET 1.x 응용 프로그램은 전혀 수정하지 않아도 ASP.NET 2.0에서 정상적으로 실행됩니다. 자세한 내용은 Visual Studio .NET 2002/2003에서 Visual Studio 2005로 웹 프로젝트를 변환하기 위한 단계별 지침 (영문) 기사를 참조하십시오.

Visual Studio 2005로 업그레이드하면 많은 변화가 이루어졌음을 알 수 있는데, 특히 ASP.NET 페이지를 위한 기본 개발 모델이 변경되었습니다. 또한 ASP.NET 2.0에서는 여러 가지 새로운 컴파일 및 배포 옵션을 사용할 수 있습니다. 이러한 모든 변화는 아래 이어지는 섹션에서 자세히 살펴보겠습니다.

마이그레이션 프로세스에 대한 자세한 내용은 일반적인 ASP.NET 2.0 변환 문제 및 해결 방법 (영문)에서도 볼 수 있습니다.


아키텍처에서의 변화

ASP.NET의 근본적인 아키텍처는 항상 유연성과 확장성을 고려하여 설계되었습니다. ASP.NET 2.0은 다양한 새로운 기능을 지원하기 위한 새 공급자 모델을 통합함으로써 이러한 전통을 이어가고 있습니다. 사이트 유지 관리와 구성을 개선하기 위해 새로운 유틸리티와 API가 추가되었습니다. 이러한 모든 변화는 개발자에게 ASP.NET 1.x와 동등한 유연성 및 확장성을 제공하는 동시에 ASP.NET 2.0 응용 프로그램을 보다 신속하게 개발하고 프로세스를 능률화할 수 있도록 설계되었습니다.


공급자 모델

ASP.NET 2.0의 여러 가지 새로운 기능은 웹 응용 프로그램과 데이터 저장소 간 통신에 의존하는데, 이러한 액세스를 일관성 있게 제공하기 위해 ASP.NET 2.0은 공급자 팩터리 모델을 사용합니다. 공급자는 특정한 데이터 저장소 요구를 충족하기 위해 개발자가 ASP.NET 2.0 프레임워크를 확장할 수 있는 패턴이자 지점입니다. 예를 들어 개발자는 새 공급자를 만들어 사용자 확인 시스템을 지원하거나 대체 데이터 저장소에 개인 설정 데이터를 저장할 수 있습니다.

대부분의 사용자 지정 공급자는 데이터베이스 백 엔드 시스템과 상호 작용하게 됩니다. 그러나 프로그래머는 인터페이스 사양에서 요구되는 모델을 충족하는 모든 매체 또는 알고리즘을 사용하여 필요한 공급자 메서드 및 클래스를 자유롭게 구현할 수 있습니다.


ASP.NET 2.0 공급자

공급자 모델은 인터페이스의 집합을 정의하며, 지정한 요청에 대한 저장 및 검색을 제공하는 데이터 지속성 계층으로 연결합니다. 이러한 방법을 통해 공급자 모델은 ASP.NET 2.0이 고유한 클라이언트 문제를 처리할 수 있도록 하는 프로그래밍 요소로 기능합니다.

ASP.NET 2.0에서는 다음을 비롯하여 다양한 공급자를 사용합니다.

  • 멤버 자격 - 멤버 자격 공급자는 사용자 인증 및 사용자 관리를 지원합니다.
  • 프로필 - 프로필 공급자는 프로필과 연결된 사용자별 데이터에 대한 저장 및 검색을 지원합니다.
  • 개인 설정 - 개인 설정 공급자는 각 사용자에 대한 웹 파트 구성 및 레이아웃의 지속성을 지원합니다.
  • 사이트 탐색 - 사이트 탐색 공급자는 사이트 내 탐색에 사용되고 다양한 새 탐색 컨트롤에 연결되는 논리 모델에 ASP.NET 페이지의 실제 저장 위치를 매핑합니다.
  • 데이터 공급자 - ADO.NET에서는 데이터베이스와 ADO.NET API 간의 연결을 용이하게 하기 위해 항상 공급자 모델을 사용했습니다. ASP.NET 2.0은 데이터 소스라고 하는 새로운 개체로 여러 ADO.NET 데이터 호출을 캡슐화하여 데이터 공급자를 구축합니다.

각 공급자 유형은 다른 공급자와 독립적으로 작동합니다. 따라서 멤버 자격 공급자에 문제를 일으키지 않고 프로필 공급자를 교체할 수 있습니다.

이 문서의 두 번째 섹션에는 몇 가지 새로운 ASP.NET 2.0 기능과 함께 공급자를 사용하는 방법을 보여 주는 구체적인 예가 있습니다.


ASP.NET 2.0 코딩 모델

ASP.NET 1.x에서는 두 가지 방법 중 하나로 ASP.NET 페이지를 개발할 수 있습니다. 첫째, ASP.NET 태그와 함께 인라인으로 코드를 배치할 수 있습니다. 코드 인라인 모델은 기존 ASP 및 기타 스크립트 언어에서 많이 사용되던 코딩 모델과 매우 비슷합니다. 그러나 코드 인라인 모델에는 코드와 HTML의 혼합과 같은 몇 가지 문제가 있습니다. ASP.NET 1.0에서는 이를 대체하는 코드 숨김 모델이 도입되었습니다. 코드 숨김 모델에서 코드는 외부 클래스에 포함되고 HTML 및 ASP.NET 태그는 ASPX 페이지에 포함됩니다. 이를 통해 코드 숨김 모델은 콘텐츠에서 코드를 분리하는 데는 성공했습니다. 그러나 이 방법에서는 몇 가지 흥미로운 상속 문제가 발생하며 개발자는 각 페이지에 대해 두 개의 파일을 관리해야 합니다.

ASP.NET 2.0은 여전히 두 가지 모델을 지원하지만 두 모델 모두 많은 부분이 바뀌었습니다. 이러한 개념에 대한 자세한 내용은 ASP.NET 2.0의 내부 (영문)를 참조하십시오.


코드 숨김

ASP.NET 1.x에서와 마찬가지로 기본 코드 모델은 코드 숨김 모델입니다. 별도의 코드 파일로 작업하려면 ASPX 페이지를 만들 때 파일을 만들어야 합니다. 다행히 코드 숨김 파일은 새 페이지를 만들 때 확인란 하나만 선택하면 간단히 만들 수 있습니다.

그림 1. 코드 숨김 파일 만들기

ASP.NET 2.0의 코드 숨김 파일이 ASP.NET 1.x의 코드 숨김 파일과 가장 다른 점은 이 파일이 ASPX 페이지에서 상속되는 전체 클래스가 아니라 부분 클래스라는 것입니다. 부분 클래스는 새로운 .NET 구조체로, 이를 사용하면 여러 소스 파일에서 단일 클래스를 정의할 수 있습니다. ASP.NET 2.0의 부분 클래스에는 기존 코드 숨김 모델에 존재했던 상속 관계가 없으므로 코드 숨김 파일에 특히 유용합니다.

그림 2. ASP.NET 2.0의 코드 숨김 모델

두 가지 부분 클래스(ASPX와 코드 숨김)는 컴파일 시에 단일 클래스로 병합됩니다. 따라서 코드 숨김 파일은 기존 코드 숨김 모델에 있었던 모든 컨트롤 선언 및 상속 문제로부터 자유롭습니다. 가장 눈길을 끄는 차이점은 실제 코드 숨김 파일에서 볼 수 있습니다. 즉, 상속 관계를 유지하는 데 필요한 자동 생성 코드가 더 이상 코드 숨김 파일에 포함되지 않습니다.

기존 코드 숨김 파일에는 페이지에 배치된 모든 컨트롤에 대한 초기화 코드뿐만 아니라 초기화 영역도 포함되어 있었습니다.

public class WebForm1 : System.Web.UI.Page
  {
    protected System.Web.UI.WebControls.Label Label1;
    private void Page_Load(object sender, System.EventArgs e) {    }
    #region Web Form Designer generated code
      override protected void OnInit(EventArgs e)
      {
        InitializeComponent();
        base.OnInit(e);
      }
      private void InitializeComponent()
      {    
        this.Load += new System.EventHandler(this.Page_Load);
      }
    #endregion
    void Page_Load(object sender, EventArgs e)
    {
      Label1.Text = "Hello ASP.NET 2.0";
    }
  }
}

코드 1. 기존 코드 숨김 파일(C#)

컨트롤은 ASPX 페이지(부분 클래스의 나머지 절반)에서 선언되므로 새 파일에서는 이러한 코드가 모두 제거되었습니다.


namespace ASP {
  public partial class Webform1_aspx : System.Web.UI.Page
  {
    void Page_Load(object sender, EventArgs e)
    {
      Label1.Text = "Hello ASP.NET 2.0";
    }
  }
}

코드 2. 새 코드 숨김 파일

여기에서 볼 수 있듯이 새 코드 숨김 파일이 훨씬 깔끔하고 읽기 쉽습니다. 코드 숨김 파일에는 ASP.NET 페이지에 추가된 모든 컨트롤에 대해 자동으로 액세스 권한이 부여되며 Visual Studio 2005는 자동 IntelliSense 지원 및 동기화를 제공합니다. 또한 Visual Studio는 코드 숨김 파일이 사용 중일 경우 이를 인식하므로 사용자가 이벤트에 액세스하기 위해 컨트롤을 두 번 클릭하면 소스 보기 대신 해당 파일을 엽니다.


코드 인라인

Visual Studio 2005에서 코드 숨김 모델을 사용하는 경우 페이지에 추가한 모든 코드는 코드 숨김 클래스가 아닌 ASPX 파일 내의 <script> 블록에 자동으로 추가됩니다. 그러나 Visual Studio 2005는 여전히 코드 보기에 코드를 표시합니다. 즉, 코드가 별도의 클래스가 아니라 ASPX 파일에 직접 배치된다는 점을 제외하고는 전과 똑같은 방식으로 Visual Studio를 계속 사용할 수 있습니다.

그림 3. 보기 전환

코드는 <script> 블록 및 파일 내의 배치를 통해 여전히 콘텐츠와는 분리됩니다. 그러나 이제 개발자는 두 개의 별도 파일을 동기화하는 대신 한 파일에만 주의를 집중하면 됩니다.


/app_Code 디렉터리

코딩 모델에 대한 마지막 중요한 변경은 ASP.NET의 일반적인 문제에 대한 직접적인 대응입니다. 대부분의 웹 응용 프로그램에는 한 개 이상의 지원 클래스가 필요합니다. ASP.NET에서 흔히 사용된 방법은 지원 클래스를 위한 별도의 프로젝트를 만든 후 지원 웹 응용 프로그램 내에 프로젝트에 대한 참조를 추가하는 것입니다. 별도의 프로젝트를 만들지 않았더라도 응용 프로그램 내에서 사용된 네임스페이스에 대한 참조를 만들어야 했습니다. 규모가 크고 복잡한 응용 프로그램의 경우 별도의 프로젝트를 만드는 것이 별 문제가 되지 않지만 한두 개의 간단한 클래스만 필요한 개발자에게는 매우 귀찮은 일입니다.

ASP.NET 2.0에는 지원 코드를 추가하는 새로운 방법이 도입되었습니다. /app_code 디렉터리는 자동으로 컴파일되어 ASP.NET 응용 프로그램에서 참조되는 특수한 디렉터리입니다. 즉, /app_code 디렉터리에 배치하는 모든 클래스는 응용 프로그램의 모든 ASPX 페이지에서 자동으로 액세스할 수 있게 됩니다. Visual Studio 2005 및 ASP.NET 컴파일러는 이러한 클래스로부터 자동으로 어셈블리를 만들고 웹 응용 프로그램에 이 어셈블리에 대한 참조를 추가합니다.

종합하면 ASP.NET은 각 응용 프로그램에 대한 콘텐츠와 데이터를 구성 및 유지하기 위해 다음과 같은 7가지의 보호되는 응용 프로그램 디렉터리를 구현합니다.

새 디렉터리 콘텐츠
/Bin 참조되는 어셈블리
/app_code 공유되는 응용 프로그램 코드
/app_globalresources 공용 리소스 파일
/app_localresources 지역화된 리소스 파일
/app_webreferences 웹 서비스에 대한 링크
/app_data 멤버 자격, 웹 파트 등을 위한 로컬 데이터베이스
/app_browsers 브라우저별 설정
/app_themes 테마 설정

표 1. 응용 프로그램 디렉터리

이러한 디렉터리 대부분은 ASP.NET을 IIS에 연결하는 ISAPI 계층에서 웹 액세스로부터 보호됩니다. 즉, 사용자는 분명한 이유가 있을 때만 특수 디렉터리를 탐색할 수 있습니다. 예를 들어 html 레이아웃 파일을 사용해야 할 경우 이러한 파일이 들어 있는 app_themes를 열 수 있습니다.


구성 및 사이트 유지 관리

ASP.NET에서 가장 어려운 과제 중 하나는 Web.config 파일을 올바르게 구성하는 것이었습니다. ASP.NET 2.0과 Visual Studio 2005에는 이러한 작업을 돕는 몇 가지 새로운 기능이 있습니다.

Web.config의 IntelliSense

유효한 스키마가 있는 모든 XML 파일에서 Visual Studio의 IntelliSense 기능을 사용할 수 있게 되었습니다. Web.config 파일의 경우 이는 Visual Studio에서 Web.config 파일을 편집할 때 IntelliSense가 완전히 지원됨을 의미합니다.

그림 4. Web.config의 IntelliSense

IntelliSense는 파일을 잘못 구성할 가능성을 줄여 줍니다. 또한 ASP.NET 2.0에는 더욱 손쉬운 작업을 위해 새로운 관리 웹 사이트와 Microsoft Management Console도 포함되어 있습니다.


관리 웹 사이트

사용자 관리 절차를 간소화하기 위해 ASP.NET 2.0에는 웹 사이트 구성 도구가 기본 제공됩니다. 웹 사이트 관리 도구는 Visual Studio 2005를 통해 localhost에서만 액세스할 수 있는 간단한 웹 사이트입니다. 관리자는 이 도구를 통해 사용자 관리, 개인 설정 공급자, 보안, 프로필과 같은 서비스를 구성하여 응용 프로그램을 관리할 수 있습니다. 또한 이 도구를 사용하면 응용 프로그램을 디버깅하고 정보를 추적할 수 있습니다.

그림 5. 웹 사이트 관리 도구

이 도구는 로컬 응용 프로그램에 대해서만 사용할 수 있다는 단점이 있지만 향상된 구성 및 관리 API를 통해 모든 동일한 구성 기능에 손쉽게 액세스할 수 있는 장점이 있습니다.


Microsoft Management Console 스냅인

ASP.NET 2.0은 응용 프로그램에 따라 사용할 .NET Framework를 결정할 수 있는 특별한 IIS용 MMC(Microsoft Management Console) 스냅인을 배포합니다.

그림 6. ASP.NET 응용 프로그램에 대한 MMC 표시

MMC IIS 탭에서는 응용 프로그램에서 사용할 ASP.NET 버전을 선택할 수 있으며 Web.config 위치를 볼 수 있습니다.

프레임워크 버전을 관리하는 기능 이외에도 콘솔에는 Web.config XML 파일을 직접 조작하지 않고도 대부분의 Web.config 설정을 시각적으로 편집할 수 있는 “구성 편집” 단추가 있습니다. 관리자에게 이 MMC 스냅인은 단일 서버에서 여러 ASP.NET 응용 프로그램을 구성 및 관리할 수 있는 매우 유용한 도구입니다.


향상된 구성 API

System.Configuration.Configuration 클래스를 사용하여 구성 정보를 검색 및 편집할 수도 있습니다. 이와 같은 API를 사용하면 프로그래밍 방식으로 XML 구성 파일에 액세스할 수 있으며 사용자 지정 관리 도구를 개발할 수 있습니다. 다음 코드는 로컬 시스템의 응용 프로그램에 대해 활성화된 인증 유형을 표시합니다.

Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
AuthenticationSection authSection = config.GetSection("system.web/authentication") as
                                    AuthenticationSection;
Response.Write("Authentication mode is: " + authSection.Mode); 

코드 3. 응용 프로그램의 인증 유형 표시

다음 코드는 로컬 웹 응용 프로그램에 대해 폼 기반 인증을 활성화합니다.

Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
AuthenticationSection authSection = config.GetSection("system.web/authentication") as
                                    AuthenticationSection;
authSection.Mode = AuthenticationMode.Forms;
config.Save();

코드 4. 응용 프로그램에 대해 폼 인증 활성화

이러한 네 가지 기능(IntelliSense, 관리 웹 사이트, MMC 스냅인, 구성 API)은 모두 ASP.NET 응용 프로그램을 구성하는 데 드는 시간과 노력을 줄이는 데 도움을 줍니다.


컴파일 옵션

ASP.NET 2.0에서는 웹 응용 프로그램에 대해 네 가지 컴파일 모델을 제공합니다.

  1. 일반(ASP.NET 1.x) - 일반 ASP.NET 웹 응용 프로그램에서 코드 숨김 파일은 어셈블리로 컴파일되고 /bin 디렉터리에 저장됩니다. 웹 페이지(ASPX)는 필요에 따라 컴파일됩니다. 이 모델은 대부분의 웹 사이트에서 잘 작동합니다. 그러나 컴파일 프로세스로 인해 첫 번째 ASP.NET 페이지 요청은 후속 요청에 비해 속도가 느립니다. ASP.NET 2.0은 이 컴파일 모델을 계속 지원합니다.
  2. 일괄 컴파일 - ASP.NET 2.0에서는 단일 URL 요청으로 응용 프로그램을 일괄 컴파일할 수 있습니다. ASP.NET 1.x에서와 마찬가지로 일괄 컴파일을 사용하면 첫 번째 페이지 요청의 지연 시간은 없어지지만 시작 시 주기가 길어집니다. 또한 일괄 컴파일에서도 코드 숨김 파일은 배포 전에 컴파일해야 합니다.
  3. 배포 전 컴파일 - ASP.NET 2.0의 새로운 기능으로, 배포하기 전에 프로젝트를 완전히 컴파일할 수 있습니다. 전체 컴파일에서 모든 코드 숨김 파일, ASPX 페이지, HTML, 그래픽 리소스 및 기타 백 엔드 코드는 응용 프로그램의 크기와 컴파일 설정에 따라 한 개 이상의 실행 가능 어셈블리로 컴파일됩니다. 어셈블리에는 웹 사이트에 대한 모든 컴파일된 코드가 포함되고 리소스 파일과 구성 파일은 수정 없이 복사됩니다. 이 컴파일 방식은 가장 뛰어난 성능과 강화된 보안을 제공합니다. 가시성 또는 보안 수준이 높은 웹 사이트를 개발하고 있다면 이 옵션은 최종 배포를 위한 최적의 선택입니다. 그러나 로컬 인트라넷에서 실행되는 소규모 사이트를 구축하고 있고, 이 사이트가 자주 변경된다면 전체 미리 컴파일은 과도한 방법일 수 있습니다.
  4. 전체 런타임 컴파일 - ASP.NET 2.0은 배포 전 컴파일과 완전히 상반되는, 전체 응용 프로그램을 런타임에 컴파일하는 새로운 메커니즘을 제공합니다. 즉, 컴파일되지 않은 코드 숨김 파일 및 기타 관련 코드를 새로운 \code 디렉터리에 넣으면 ASP.NET은 런타임에 이러한 파일로부터 생성되는 어셈블리에 대한 참조를 만들고 유지 관리합니다. 이 옵션에서는 컴파일되지 않은 코드를 서버에 저장해야 하지만 그 대신 웹 사이트 콘텐츠 변경 측면에서 가장 높은 유연성을 제공합니다.

최적의 옵션은 각자의 환경과 필요에 따라 달라지지만 컴파일 모델의 유연성은 그대로 유지됩니다. \code 디렉터리를 사용하여 코드 숨김 파일을 저장하기로 선택하더라도 전체 컴파일 방법을 사용하여 응용 프로그램을 배포할 수 있습니다.

개발자는 ASP.NET 2.0 컴파일 모델을 사용하여 코드를 미리 컴파일할 수 있습니다. 앞에서 설명했듯이 미리 컴파일을 사용하면 성능 측면에서 큰 이점을 얻으면서도 바이너리와 태그 콘텐츠를 분리할 수 있습니다. 개발자는 미리 컴파일 중에 태그와 코드 모두 완전히 바이너리로 컴파일하는 옵션을 선택할 수 있습니다. 클래스 파생 모델을 사용하면 태그와 코드 숨김 파일의 동기화를 유지해야 하는 문제가 없습니다. 따라서 개발자는 태그 파일과 코드 숨김 파일을 분리할 수 있습니다. 다음 코드는 C#과 Visual Basic .NET을 사용한 ASP.NET 2.0 페이지용 페이지 지시문을 보여 줍니다.

// C# 
webform1.aspx: <%@ page codefile=webform1.aspx.cs inherits=WebForm1 %>
' Visual Basic .NET 
webform1.aspx.cs: public partial class WebForm1 : System.Web.UI.Page {}

코드 5. ASP.NET 2.0의 페이지 지시문

코드 컴파일 및 구성에 대한 자세한 내용은 ASP.NET 2.0의 내부 (영문)를 참조하십시오.


개발에서의 변화

ASP.NET 2.0과 Visual Studio 200에서는 웹 응용 프로그래밍 개발의 일상적인 측면에도 많은 변화가 이루어집니다. 이 섹션에서는 ASP.NET 1.x의 기능 중에서 크게 변화된 부분을 중점적으로 살펴보겠습니다.


개발 도구

Visual Studio 최신 릴리스(Visual Studio 2005)에는 웹 응용 프로그램 개발을 돕는 몇 가지 새로운 개발 도구가 포함되어 있습니다.

  • IntelliSense 지원 범위 확장

    IntelliSense는 "팝업" 방식으로 프로그래밍 힌트를 제공하여 코드 개발 속도를 높여 줍니다. 코드에서 개체를 참조할 때마다 IntelliSense는 사용할 수 있는 메서드, 속성 및 이벤트의 목록을 보여 줍니다. 더 이상 전체 메서드를 일일이 입력하거나 매개 변수 사양을 보기 위해 문서를 찾을 필요가 없습니다. 이전 Visual Studio.NET 릴리스에서도 유용한 IntelliSense 기능이 지원되었지만 Visual Studio 2005에서는 스크립트 블록, 인라인 CSS 스타일 특성, 구성 파일을 비롯해 DTD 또는 XML 스키마 참조를 포함하는 모든 XML 파일에서 IntelliSense를 활용할 수 있습니다.

  • 마법사로 다양한 작업 코드를 자동 생성

    ASP.NET 2.0의 중요한 목표 중 하나는 개발에 필요한 시간과 작성해야 하는 코드의 양을 줄이는 것입니다. Visual Studio 2005에는 데이터 소스 연결을 만들고 기타 여러 일반적인 작업을 수행하는 데 사용할 수 있는 마법사가 포함되어 있습니다.

  • 마스터 페이지, 테마 및 스킨을 위한 디자이너 지원

    기존 ASP 페이지의 경우 각 페이지를 처음부터 새로 만들어야 했으며 응용 프로그램 내에서 페이지 레이아웃을 복제하려면 많은 시간이 소모되었습니다. Visual Studio 2005에서는 ASP.NET 마스터 페이지에 대한 완전한 WYSIWYG(위지윅) 지원을 제공합니다. 마스터 페이지는 응용 프로그램의 각 페이지에 일관성 있는 스타일과 레이아웃을 적용하는 데 사용되는 페이지 템플릿입니다. 마스터 페이지를 만든 다음에는 손쉽게 마스터 페이지를 활용하는 새 페이지를 만들어 ASP.NET이 자동으로 마스터 페이지의 스타일과 레이아웃을 적용하도록 할 수 있습니다.

    Visual Studio 2005에서는 페이지에 추가한 콘텐츠가 마스터 페이지와 결합되면 어떻게 보일지 확인할 수 있습니다. 이때 마스터 페이지의 코드가 개발 페이지에서 보이지는 않습니다.

  • 향상된 코드 편집 기능

    기존 ASP 응용 프로그램에서 코드 편집은 쉽지 않은 작업입니다. Visual Studio 2005에서는 공백, 대/소문자, 삽입, 캐리지 리턴 및 단어 잘림을 포함한 모든 HTML 코드가 보존되므로 코드 편집이 훨씬 쉬워졌습니다. Visual Studio 2005에서는 응용 프로그램의 HTML 코드에 대한 스타일 서식을 설정하여 이를 가져오거나 내보내 전체 팀의 개발을 표준화할 수 있습니다. 스타일시트를 사용하면 콘텐츠가 사용자에게 표시되는 서식을 지정할 수 있습니다. Visual Studio.NET 2005에서는 HTML 코드 작성을 위한 서식을 사용자 지정할 수 있습니다. 예를 들어 모든 HTML 태그를 대문자로 작성하거나 모든 중첩된 HTML 요소를 두 칸 들여 쓰도록 스타일 지침을 적용할 수 있습니다. 이러한 지침을 통해 팀 전체에서 동일한 서식 규칙으로 페이지를 개발할 수 있습니다.

    Visual Studio 2005에서는 또한 큰 문서를 편집할 때 도움이 되는 태그 개요 및 태그 탐색 모드를 지원합니다. 이러한 모드를 통해 HTML 및 ASP.NET 태그 사이를 이동, 확장 및 축소하고 열린 태그와 닫힌 태그의 관계를 명확하게 볼 수 있습니다.

    “표 삽입” 대화 상자를 사용하면 손쉽게 HTML 페이지에 표를 추가하고 편집할 수 있습니다. 마법사를 사용하면 코드를 작성하지 않고도 표의 스타일, 크기(표 너비 및 행과 열의 수) 및 서식을 지정할 수 있습니다.

    Visual Studio 2005를 사용하면 특정 웹 브라우저나 HTML 표준을 위한 HTML 코드도 개발할 수 있습니다. 예를 들어 모든 HTML 코드를 Netscape 표준에 맞추려면 Netscape HTML을 대상으로 선택하면 되며, 이렇게 하면 Netscape 표준에 맞지 않는 태그에는 실시간으로 플래그가 지정됩니다.

  • Visual Studio 2005에 포함된 간단한 웹 서버

    Visual Studio 2005에는 ASP.NET 응용 프로그램 개발을 위한 간단한 웹 서버가 포함되어 있습니다. 웹 서버는 로컬 요청에 대해서만 서비스를 제공하며 개발 작업에 적합합니다. 이 웹 서버를 추가하면 개발용 시스템에서 IIS를 사용할 필요가 없습니다. 기본 제공 서버를 사용하면서 완전한 디버깅 지원을 받을 수 있습니다. 다른 중요한 장점은 모든 사용자가 응용 프로그램을 만들고 테스트할 수 있다는 것입니다. 컴퓨터에서 관리자가 아니어도 됩니다. 단, 최종 응용 프로그램은 IIS에 배포해야 합니다.

  • 향상된 디버깅 환경

    ASP 응용 프로그램의 코드는 즉석에서 해석되므로 이를 디버깅하는 것은 힘든 작업입니다. 응용 프로그램을 실행하기 전까지는 구문 오류가 드러나지 않습니다. Visual Studio 2005에서는 디버깅 지원이 개선되었습니다. Visual Studio .NET 2003은 제한적인 '편집하며 계속하기' 디버깅을 제공했습니다. Visual Studio 2005는 '편집하며 계속하기' 디버깅을 개선하고 디버깅 프로세스 동안 더 많은 정보를 제공합니다. 예를 들어 향상된 DataTips 구현은 디버깅 프로세스 중에 마우스 팝업 창을 통해 변수 및 식에 대한 정보를 제공합니다. Visual Studio 2005에서는 또한 디스어셈블리, 레지스터, 주소(해당하는 경우)의 중단점과 같은 고급 디버깅을 비롯하여 “내 코드만 단계별 실행”과 같은 추가 기능을 제공합니다.

Visual Studio 2005에서 제공하는 개발 도구에 대한 자세한 설명은 http:www.microsoft/korea/msdn/vstudio/를 참조하십시오.


서버에 연결

ASP.NET 1.x 및 Visual Studio .NET 이전 버전에서는 Front Page Server Extensions를 통해 IIS 인스턴스에 연결해야 했습니다. 또한 개발자는 새로운 웹 사이트를 만들려면 IIS 인스턴스에 대한 관리자 액세스 권한이 필요했습니다. 많은 기업들은 기업 네트워크 내에서 실행되는 부가적인 웹 서버를 생성, 모니터링, 업데이트 및 관리하는 데 따르는 운영상의 부담을 달갑게 여기지 않았습니다. ASP.NET 2.0에서는 서버 연결이 달라졌습니다.


개발 서버

우선 Visual Studio 2005에는 개발 전용 웹 서버가 기본 제공됩니다. 이 간단한 웹 서버는 로컬 요청에만 응답하므로 보안상 위협이 되지 않습니다. 이 서버는 완전한 디버깅 기능을 지원하므로 새 웹 응용 프로그램을 위한 개발 도구로 사용할 수 있습니다. 확장성 및 성능을 테스트할 준비가 완료되거나 프로덕션 배포를 수행하려는 경우에는 응용 프로그램을 IIS로 옮기기만 하면 됩니다.


프로덕션 서버

IIS 인스턴스에 연결할 경우 여러 가지 선택할 수 있는 옵션이 있습니다. Visual Studio .NET에서 웹 응용 프로그램 프로젝트를 열면 연결 방법을 묻는 대화 상자가 표시됩니다.

그림 7. FTP를 통해 웹 응용 프로그램에 연결

Front Page Server Extensions, FTP, Share Point 또는 여러 가지 다른 방법을 사용하여 서버로 파일을 전송하고 코드를 동기화할 수 있습니다.


ASP.NET 2.0 응용 프로그램 컴파일

기존 ASP.NET 1.x에서 달라진 또 다른 중요한 차이점은 웹 응용 프로그램을 컴파일하는 방법에 있습니다. ASP.NET 1.x에서 응용 프로그램은 첫 번째 요청 시에 컴파일되거나 시작 시에 일괄 모드로 컴파일되었습니다. 두 가지 방법에는 각각 장단점이 있습니다. 가장 뚜렷한 공통적인 단점은 일반적으로 프로덕션 서버에 컴파일되지 않은 코드를 배포해야 한다는 것입니다. 이 코드는 프로덕션 서버에서 직접 조작할 수 있는데, 이는 보안 요구에 따라 장점이 될 수도 있고 단점이 될 수도 있습니다.

ASP.NET 2.0은 배포를 위해 고유한 소스 코드를 바이너리 어셈블리로 미리 컴파일하는 새로운 컴파일 방법을 제공합니다. 미리 컴파일된 응용 프로그램은 강력한 이름 지정 및 서명이 가능한 어셈블리, 그리고 공격자에게 별 가치가 없는 이미지와 같은 여러 가지 리소스 파일로 구성됩니다. 따라서 미리 컴파일된 응용 프로그램은 일반 ASP.NET 응용 프로그램에 비해 훨씬 안전합니다.

컴파일 옵션에 대한 자세한 내용은 ASP.NET 2.0 내부 (영문)를 참조하십시오.


사이트 탐색

편리한 사용자 환경을 제공하려면 웹 사이트 탐색에 일관성이 있어야 합니다. 기존 ASP 응용 프로그램은 하이퍼링크를 추가하거나 하이퍼링크를 캡슐화하는 사용자 컨트롤을 추가하는 방법을 사용했습니다. 이러한 하이퍼링크를 만드는 것은 시간이 많은 시간이 소비되는 작업이며 응용 프로그램 내에서 페이지를 옮기는 경우 문제의 원인이 되기도 합니다. ASP.NET 1.x에는 이러한 문제에 대한 실질적인 해결책이 없었습니다. 즉, 여전히 링크를 HTML 태그 또는 ASP.NET 컨트롤 속성 내에 인코딩해야 했습니다. ASP.NET 2.0은 사이트 탐색을 개선하고 웹 페이지의 실제 위치를 변경하는 유지 관리 작업을 줄여 주는 여러 가지 새로운 기능을 제공합니다.

ASP.NET 2.0에서는 논리 구조를 바탕으로 응용 프로그램의 탐색을 정의할 수 있습니다. 탐색에 논리 구조를 사용하면 서버에서 각 페이지의 실제 위치에 의존하지 않고 각 웹 페이지를 논리적으로 서로 연결하는 방법으로 응용 프로그램의 탐색 경로를 만들 수 있습니다. 탐색을 논리적으로 구성하면 응용 프로그램의 탐색을 다시 구성할 때 코드를 수정할 필요가 없습니다. 또한 논리 구조를 사용하여 트리 뷰, 메뉴 및 “이동 경로” 추적과 같은 탐색 보조 기능을 만들 수 있습니다.


web.sitemap 파일

ASP.NET 2.0 SiteMap 클래스는 웹 사이트의 논리 구조를 제공합니다. ASP.NET 2.0에 포함된 사이트 탐색 공급자와 함께 XML을 사용하여 기본 구조를 정의하거나, 사용자 지정 공급자와 함께 원하는 다른 데이터 형식을 사용할 수 있습니다. 레이아웃을 정의하면 다양한 방법으로 탐색 구조를 사용할 수 있습니다.

논리 구조는 다음과 같은 간단한 두 가지 단계로 만들 수 있습니다.

  1. 사이트의 페이지를 계층적으로 배치하는 web.sitemap이라는 XML 파일을 만듭니다. Visual Studio 2005에서는 "새 항목 추가" 및 사이트 맵 템플릿 선택을 통해 새로운 .sitemap 파일을 만들 수 있으며 사이트 맵 파일 편집에 IntelliSense가 지원됩니다.
    <?xml version="1.0" encoding="utf-8" ?> 
    <siteMap>
       <siteMapNode title="Home" url="default.aspx">
              <siteMapNode title="Article 1"  url="~/articles/demoarticle1.aspx" />
              <siteMapNode title="Article 2"  url="~/articles/demoarticle2.aspx" />
              <siteMapNode title="Article 3"  url="~/articles/demoarticle3.aspx" />
       </siteMapNode>
       <siteMapNode title="Picture Gallery" url="~/PhotoAlbum/PhotoAlbums.aspx">
              <siteMapNode title="Meetings" url="~/PhotoAlbum/PictureAlbum.aspx?albumid=1"/>
              <siteMapNode title="Activities"
                url="~/PhotoAlbum/PictureAlbum.aspx?albumid=2"/>
              <siteMapNode title="Training" url="~/PhotoAlbum/PictureAlbum.aspx?albumid=3"/>
       </siteMapNode>
    </siteMap>
    

    코드 6. 샘플 XML web.sitemap

  2. 도구 상자에서 SiteMapDataSource 컨트롤을 페이지로 끌어서 놓습니다. SiteMapDataSource 컨트롤은 web.sitemap 파일에 포함된 논리 사이트 구조에 자동으로 바인딩됩니다.

페이지에 배치된 SiteMapDataSource 컨트롤은 treeview 컨트롤이나 menu 컨트롤과 같은 다른 컨트롤에 손쉽게 바인딩할 수 있습니다.

<%@ page language="VB" masterpagefile="~/Mysite.master" %>
  <asp:content id="Content1" contentplaceholderid="LeftSideContent">
    <H2>Navigation </H2>
    <asp:treeview id="Navigation tree" runat="server" datasourceid="NavSource"/>
 </asp:content> 

코드 7. Treeview 컨트롤 구현

트리 뷰는 web.sitemap 파일에 있는 정의를 바탕으로 계층 뷰를 사용하여 사이트 탐색을 표시합니다.


탐색 컨트롤

ASP.NET 2.0에는 사이트 탐색 서비스와 함께 사용할 수 있는 탐색 컨트롤 집합도 추가되었습니다. <asp:TreeView> 또는 <asp:Menu> 컨트롤을 사용하면 응용 프로그램을 위한 시각적인 탐색 구조를 만들 수 있습니다. 새로운 <asp:SiteMapPath> 컨트롤은 "이동 경로 추적" 탐색 구조를 만드는 데도 사용할 수 있습니다.

그림 8. Home / Articles / Article 2 페이지의 이동 경로 추적

사이트 탐색 및 탐색 컨트롤에 대한 자세한 내용은 다음 PowerPoint 프레젠테이션을 참조하십시오. http://www.asp.net/whidbey/downloads/WSV315_Sanabria_slide.zip.


URL 매핑

ASP.NET 2.0의 또 다른 새로운 탐색 관련 기능은 URL 매핑입니다. 웹 사이트에는 길고 복잡하게 뒤얽힌 URL이 자주 사용됩니다. MSDN 참조 URL이 그 예입니다. 기존 ASP 응용 프로그램에서는 URL을 감추려면 요청을 전처리하는 사용자 지정 ISAPI 처리기를 작성해야 했습니다. ASP.NET 2.0은 Web.config 파일에 URLMapping 구성 섹션을 추가합니다. 개발자는 실제 URL을 사용자가 알아보기 쉬운 URL로 매핑하여 실제 URL을 숨기는 매핑을 정의할 수 있습니다.

<urlMappings enabled="true">
    <add url="~/Home.aspx" mappedUrl="~/Default.aspx?tabid=0" />
</urlMappings>

코드 8. URLMapping 구성 섹션

위의 구성은 Home.aspx에 대한 모든 요청을 Default.aspx?tabid=0으로 매핑 및 리디렉션합니다. 사용자는 단축 링크에 책갈피를 지정할 수 있으며 사용자 브라우저에는 단축 링크가 표시됩니다.


데이터 액세스와 데이터 소스

ASP.NET 1.x 데이터 액세스는 ADO.NET 연결 및 명령을 이용하여 다양한 ASP.NET 컨트롤에 바인딩할 수 있는 데이터를 제공했습니다. ASP.NET 2.0은 코드를 캡슐화하여 Web.config 파일 내의 단일 XML 태그에 연결과 명령을 모두 만드는 데이터 소스를 제공하는 방법으로 ADO.NET과의 관계를 개선합니다. ASP.NET 1.x에서와 마찬가지로 Visual Studio 2005에 있는 마법사를 사용하여 이러한 데이터 소스를 만들 수 있습니다. ASP.NET 2.0은 다음 항목을 위한 데이터 소스를 제공합니다.

  • Microsoft Access - Access 데이터 소스는 자동으로 Access 데이터베이스에 연결되어 쿼리할 수 있습니다.
  • 개체 - OjbectDataSource 컨트롤은 중간 계층 또는 다른 개체 집합의 위에 위치하는 데이터 계층 추상화입니다. 하나 이상의 개체 집합을 데이터 바인딩 컨트롤에 연결할 수 있는 데이터로 처리하려는 경우 개체 데이터 소스를 사용할 수 있습니다.
  • XML - XmlDataSource는 XML 파일의 계층 데이터로 연결됩니다.
  • 사이트 맵 - SiteMapDataSource는 이동 경로를 포함한 사이트 탐색을 위한 데이터 소스를 제공합니다.

새 데이터 바인딩 컨트롤

ASP.NET 2.0에는 새로운 두 가지 데이터 바인딩 컨트롤도 포함되어 있습니다. 첫 번째 컨트롤인 GridView는 셀 편집, 여러 페이지의 행 표시, 정렬, 삭제, 선택 및 기타 일반적인 동작을 위한 구성 가능한 코드를 제공하여 DataGrid를 확장합니다.

그림 9. GridView 컨트롤

두 번째 컨트롤인 DetailsViewGridView¿Í DataGrid를 보완하는 세부적인 뷰를 제공합니다.

그림 10. DetailsView 컨트롤

DetailsView 컨트롤은 레코드를 한 번에 한 개씩 표시하며 레코드의 표시, 편집, 삭제 또는 작성 방법에 대해 훨씬 더 폭넓은 제어 기능을 제공합니다.


ASP.NET 2.0의 새 기능

API 또는 프레임워크에 대한 거의 모든 주요 업데이트에는 기존 기능에 대한 변경, 그리고 새로운 기능과 향상 기능이 모두 포함됩니다. 이 섹션에서는 ASP.NET 2.0에서 제공되는 몇 가지 새로운 기능에 대해 살펴보겠습니다.


마스터 페이지

마스터 페이지는 ASP.NET 2.0에 새로 추가된 기능으로, 일관성 있는 사이트 모양과 느낌을 유지하는 단일 위치를 정의하여 웹 응용 프로그램 개발 시간을 줄여 줍니다. 마스터 페이지를 사용하면 응용 프로그램의 여러 페이지를 위한 공통적인 레이아웃을 만드는 데 사용되는 템플릿을 디자인할 수 있습니다. 마스터 페이지의 기본적인 목표는 각 페이지를 처음부터 만들 필요가 없도록 하고 레이아웃 코드를 반복하지 않도록 것입니다. 마스터 페이지의 다른 장점은 응용 프로그램의 페이지 레이아웃을 변경하려는 경우 각 개별 페이지를 모두 변경할 필요 없이 마스터 페이지만 업데이트하면 된다는 것입니다. 이 기능은 .NET Framework의 최초 버전에 제공되어 데스크톱 응용 프로그램 개발에 사용되었던 시각적 상속이라는 Windows Form 기술과 어느 정도 비슷합니다.

확장명(.aspx가 아니라 .master)과 몇 가지 특수 컨트롤 및 헤더 필드를 제외하면 마스터 페이지는 일반 ASP.NET 웹 페이지와 비슷해 보입니다. 마스터 페이지는 하나 이상의 <asp:ContentPlaceHolder> 컨트롤을 포함해야 합니다. 이러한 컨트롤은 대체할 수 있는 콘텐츠 영역을 나타냅니다. 기본적으로 ContentPlaceHolder에 있지 않은 항목은 마스터 페이지를 사용하는 모든 페이지에 나타납니다.

Visual Studio 2005는 이러한 코드 대부분을 자동으로 작성하므로 페이지 레이아웃을 위한 복잡한 HTML 코드를 직접 작성할 필요가 없습니다. 또한 마스터 페이지에는 다음과 같은 기본 소스 코드를 포함해야 합니다.

<%@ master language="C#" CodeFile="site.master.cs" Inherits ="ASP.site_master" %>
<html>
<head runat="server"><title>Untitled Page</title></head>
<body>
  <form runat="server">
    <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
    </asp:contentplaceholder>
  </form>
</body>
</html>

코드 9. 각 마스터 페이지에 추가되는 소스 코드

이러한 주요 차이점을 제외하면 마스터 페이지는 일반적인 ASP.NET 페이지에 사용되는 모든 HTML 또는 컨트롤을 포함할 수 있습니다.

마스터 페이지와 프레임은 비슷한 용도로 사용되지만 마스터 페이지가 훨씬 많은 기능을 제공합니다. 프레임과 달리 마스터 페이지를 사용하면 다음과 같은 작업을 수행할 수 있습니다.

  • 페이지에 책갈피를 지정하면 기본 프레임 페이지뿐만 아니라 특정 페이지에 대한 모든 정보를 불러올 수 있습니다. 마스터 페이지는 프레임이 아닙니다. 마스터 페이지 및 마스터를 기반으로 구축된 콘텐츠 페이지의 관련 콘텐츠를 포함하는 단일 페이지입니다. 따라서 마스터 페이지의 모양과 작동 방식은 프레임보다는 단일 웹 페이지와 비슷합니다.
  • HTML이 아닌 컨트롤과 태그로 작동합니다. Visual Studio 덕분에 프레임 태그를 열고 닫는 데 신경 쓰거나 각 프레임을 올바르게 표시하기 위해 무수히 많은 HTML 특성을 일일이 수정할 필요가 없어졌습니다. 자리 표시자를 만들고 Visual Studio를 통해 속성을 수정하기만 하면 됩니다.
  • Visual Studio 2005의 코드 생성 기능을 활용하여 시각적으로 레이아웃을 디자인하고 프레임을 관리하고 콘텐츠 페이지를 마스터 페이지에 연결하기 위한 모든 연결 구조를 제공할 수 있습니다. 페이지의 전체 HTML 레이아웃에 대한 영향을 걱정하지 않고 새 콘텐츠를 추가할 수 있습니다.

요약하자면, 마스터 페이지를 사용하면 페이지 수의 많고 적음에 관계없이 웹 응용 프로그램의 모양을 일관적으로 유지하는 작업을 크게 간소화할 수 있습니다.


콘텐츠 페이지

콘텐츠 페이지는 마스터 페이지에 연결되며 마스터 페이지에 있는 ContentPlaceHolder 컨트롤에 대한 콘텐츠를 정의합니다. 콘텐츠 페이지에는 ContentPlaceHolder ID를 통해 마스터 페이지의 <asp:contentPlaceHolder> 컨트롤을 참조하는 <asp:content> 컨트롤이 포함됩니다. 콘텐츠 페이지와 마스터 페이지는 결합되어 하나의 응답을 구성합니다.

<%@ page language="VB" MasterPageFile="~/Mysite.master" %>
<asp:content id="Content1"  contentplaceholderid="LeftSideContent">
    <H2>Navigation </H2>
    <asp:treeview id="Navigation tree" runat="server" datasourceid="NavSource"/>
</asp:content>
<asp:content id="Content1"  contentplaceholderid="RightSideContent">
    <asp:label runat="server">Support section</asp:label>
</asp:content>

코드 10. 마스터 페이지의 콘텐츠 페이지 자리 표시자

여기에서도 역시 사용자는 실제로 콘텐츠 페이지에 대한 요청을 전달합니다. ASP.NET은 마스터 페이지에 대한 참조를 인식하고 콘텐츠 페이지와 조합하여 마스터 페이지 콘텐츠를 렌더링합니다.


중첩 마스터 페이지

사이트 레이아웃 및 스타일에 대한 제어를 강화하기 위해 마스터 페이지를 중첩시켜야 하는 경우가 있습니다. 예를 들어 회사에서 모든 페이지에 일관적인 머리글과 바닥글이 있는 웹 사이트를 사용하고 있지만 회계 부서의 템플릿이 IT 부서와 약간 다를 수 있습니다.

그림 11. 중첩 마스터 페이지

최상위 수준 회사 마스터 페이지 내에 개별 부서의 마스터 페이지를 중첩시키면 각 부서에 대해 높은 수준의 일관성을 구현하면서 콘텐츠와 마스터 페이지로 다시 정의할 수 있는 부분을 제어할 수 있습니다.

중요한 점은 응용 프로그램이 여러 마스터 페이지와 콘텐츠 페이지로부터 콘텐츠를 컴파일하는 경우에도 최종 사용자는 한 페이지를 요청하고 한 페이지를 받는다는 것입니다.


마스터 페이지 다시 정의

최적의 계획과 요구 사항 검토했다 해도 하나의 특정 웹 페이지에 새로운 기능을 추가해야 하는 경우가 있습니다. 특정 콘텐츠 페이지에 기능을 추가 또는 제거하기 위해 마스터 페이지를 버리지 않아도 됩니다. 다시 정의하기만 하면 됩니다.

마스터 페이지에 만들어 넣은 표준 탐색 막대가 특정 콘텐츠 페이지에는 표시되지 않도록 하려는 경우를 예로 들어 보겠습니다. 마스터 페이지에 구성 가능한 속성을 추가하면 각 콘텐츠 페이지에 대해 탐색 막대를 설정하거나 해제할 수 있습니다.


테마와 스킨

현재 ASP 개발자는 웹 사이트에 모양과 느낌을 적용하려면 CSS(CSS 스타일시트) 및 인라인 스타일을 사용해야 합니다. 이러한 기술이 도움은 되지만 일관성은 여전히 개발자가 얼마나 규칙적으로 올바른 스타일을 사용하는지에 따라 주로 좌우됩니다. ASP.NET 2.0은 웹 사이트의 모든 페이지와 컨트롤에 동일하게 적용되는 테마와 스킨을 사용함으로써 이러한 문제를 해결합니다.

테마는 컨트롤 집합을 특정 모양으로 만들기 위해 그룹화한 스킨 파일 집합입니다.


테마

테마나 스타일시트가 사용되는 모든 페이지에 적용할 공통 특성 집합을 정의한다는 측면에서 테마는 CSS 스타일시트와 비슷합니다. 그러나 테마는 다음과 같은 면에서 스타일시트와 다릅니다.

테마는 특정 스타일 속성 집합뿐만 아니라 여러 컨트롤 또는 페이지 속성을 정의할 수 있습니다.

테마는 CSS 스타일시트는 포함할 수 없는 그래픽과 같은 보조 파일을 포함할 수 있습니다.

테마는 스타일시트처럼 캐스케이딩하지 않습니다. 예를 들어 테마 속성 값은 항상 로컬 속성 값을 다시 정의합니다.

테마는 스타일시트 참조를 포함할 수 있습니다.

각 응용 프로그램에는 테마 디렉터리가 있습니다. 각 특정 테마에는 스킨 파일을 비롯해 기타 스타일에 적용되는 파일을 포함하는 자체 하위 디렉터리가 있습니다.


테마 정의

스킨을 정의하고 App_Themes 디렉터리에 포함된 하위 디렉터리에 배포할 수 있습니다. 각 하위 디렉터리는 여러 스킨 파일을 포함할 수 있는 테마를 구성합니다. App_themes 하위 디렉터리에는 .skin 파일 및 테마에서 사용되는 다른 리소스(예: 이미지 파일과 스타일시트)가 포함됩니다.

그림 12. App_themes 하위 디렉터리

실제 스킨 정의는 .skin 파일에 포함되며 ASPX 파일에서 컨트롤 인스턴스를 선언하는 데 사용되는 태그와 매우 비슷합니다.

예를 들어 app_themes 디렉터리에서 Pink라는 하위 디렉터리를 만듭니다. 테마를 위한 .skin 파일을 만들려면 다음 코드를 추가하고 Pink 디렉터리에 저장하면 됩니다.

<asp:DropDownList runat="server" BackColor="hotpink" ForeColor="white" />
<asp:GridView runat="server" BackColor="#CCCCCC" BorderWidth="2pt"
    BorderStyle="Solid" BorderColor="#CCCCCC" GridLines="Vertical"
    HorizontalAlign="Left">
      <HeaderStyle ForeColor="white" BackColor="hotpink" />
      <ItemStyle ForeColor="black" BackColor="white" />
      <AlternatingItemStyle BackColor="pink" ForeColor="black" />
</asp:GridView>

코드 11. 사용자 지정 테마를 위한 전형적인 .skin 파일

그러면 이 테마를 응용 프로그램 내의 페이지에 적용할 수 있습니다. 물론 이 테마는 데이터 표의 배경을 밝은 분홍색으로 설정하는데, 여러분 마음에 들지 않을 수도 있습니다.


테마 사용

테마는 다음과 같이 적용할 수 있습니다.

페이지 수준에서 단일 태그 사용: <%@ page language="VB" theme="pink" %>

Web.config 파일 내에서 구성 요소를 사용하여 사이트 전체에 적용: <pages theme="Pink" />. Web.config 파일은 각 ASP.NET 응용 프로그램을 위한 마스터 구성 파일입니다.

테마의 효과는 그림 13의 일반적인 달력 컨트롤을 보면 확인할 수 있습니다.

그림 13. 파란색 테마의 달력

이 달력 버전에서는 간단한 파란색 테마를 사용합니다. 테마 특성만 변경하면 그림 14에서 볼 수 있듯이 달력의 모양을 완전히 바꿀 수 있습니다.

그림 14. 회색 테마의 달력


스킨

스킨은 페이지 컨트롤의 크기, 글꼴 및 기타 특성을 표준화하는 데 사용할 수 있는 속성 및 템플릿 집합입니다. 스킨을 사용하여 컨트롤에 대한 미리 정의된 표시 설정을 만들고 런타임에 적절한 스킨을 적용할 수 있습니다. 예를 들어 사용자 기본 설정에 따라 스킨을 선택하거나 페이지를 액세스하는 데 사용되는 브라우저에 따라 적절한 스킨을 결정할 수 있습니다. SkinId 속성을 설정하면 미리 정의된 컨트롤에 옵션 스킨을 적용할 수 있습니다.

<!- 기본 스킨 -->!>
<asp: label runat="server" Font-names="verdana, arial" font-size="10pt"
      ForeColor= "#000066" BackColor="transparent"
/>
<!- 제목 스킨 -->!>
<asp: label runat="server" id="foo" skinid="Title" Font-names="verdana, arial"
      font size="18pt" ForeColor= "#000066" BackColor="transparent" font-bold="true"
      font-underline="true"
/>

코드 12. 스킨 만들기

스킨을 정의한 다음에는 테마 및 SkinID 속성을 사용하여 페이지의 모든 컨트롤에 적용하거나 특정 컨트롤에 적용할 수 있습니다.


컨트롤에 스킨 적용

기본 스킨이 있고 테마에 의해 페이지가 정의된 경우에는 기본 스킨이 자동으로 컨트롤에 적용됩니다. 컨트롤에 대해 SkinID 속성을 정의하면 기본 스킨은 SkinID 속성에서 참조된 스킨으로 대체됩니다.


멤버 자격

ASP 개발에서 가장 중요한 단점 중 하나는 사용자 관리 체계를 처음부터 만들어야 한다는 것입니다. 이 과정은 복잡할 뿐만 아니라 시간이 많이 소비됩니다. ASP.NET 2.0의 멤버 자격 공급자 및 로그인 컨트롤은 통합된 사용자 정보 관리 방법을 제공합니다.

사용자가 응용 프로그램에 로그인하면 자동으로 사용자의 ID를 비롯하여 기본적인 사용자 정보를 참조할 수 있습니다. 사용자의 자격 증명은 Web.config 파일에서 구성할 수 있는 백 엔드 사용자 데이터베이스에 안전하게 저장됩니다. ASP.NET 2.0은 SQL Server 2005 Express Edition 및 SQL Server 공급자를 모두 제공하지만 원하는 유형의 백 엔드 데이터 저장소를 위한 사용자 지정 공급자를 만들 수 있습니다. 이러한 확장성은 ASP.NET의 멤버 자격 기능에 사용하려는 계정 데이터베이스가 이미 있는 경우에 매우 유용합니다. 응용 프로그램을 위한 멤버 자격을 구성한 다음에는 ASP.NET 2.0의 로그인 컨트롤을 사용하여 사용자 등록 및 암호 검색을 자동화할 수 있습니다.


로그인 컨트롤

ASP.NET 2.0은 코드를 작성하지 않고도 사용자 계정을 만들고 관리할 수 있는 새로운 로그인 컨트롤을 제공합니다. <asp:CreateUserWizard> 컨트롤을 페이지에 끌어서 놓기만 하면 사용자에게 등록 과정을 안내하는 단계별 마법사를 제공하는 사용자 등록 양식을 만들 수 있습니다.

새로운 로그인 컨트롤은 응용 프로그램의 디자인에 맞도록 컨트롤 서식을 지정할 수 있는 직관적인 인터페이스를 제공합니다. 속성 창을 사용하면 각 속성에 대한 레이블, 값 및 오류 메시지 유효성 검사 요소에 액세스할 수 있습니다. LoginNameLoginStatus 컨트롤을 사용하면 코드를 작성하지 않고도 각 사용자별로 개인 설정된 환영 인사를 제공하고 로그인/로그아웃 기능을 만들 수 있습니다.

LoginView 컨트롤을 사용하면 코드를 작성할 필요 없이 사용자에게 어떤 콘텐츠를 표시할지 결정할 수 있습니다. 각 사용자의 상태 및 역할을 확인하여 적절한 뷰가 결정되면 콘텐츠가 표시됩니다. 기존 ASP 응용 프로그램에서는 현재 사용자를 식별하는 코드, 사용자 상태 유효성을 검사하는 부가적인 코드를 작성한 후 사용자에 따라 콘텐츠를 표시하는 코드까지 작성해야 했습니다.

사용자들은 종종 암호를 잊어버립니다. ASP.NET 2.0은 잊어버린 암호를 검색하는 과정을 간소화하는 안전한 PasswordRecovery 컨트롤을 구현합니다. 이 컨트롤은 사용자에게 사용자 이름을 묻고 전자 메일을 통해 암호를 전송합니다. 전자 메일을 전송하려면 전자 메일을 전송하는 SMTP 서버를 가리키도록 Web.config 파일을 편집해야 합니다.

<smtpMail
   serverName="localhost">
</smtpMail>

코드 13. Web.config에서 SMTP 서버 구성

인증 컨트롤에 대한 자세한 설명은 ASP.NET 2.0에서의 개인 설정 (영문)을 참조하십시오.


프로필

ASP.NET 2.0 프로필 기능을 사용하면 웹 사이트에 방문한 사용자와 관련된 정보를 정의, 저장 및 검색할 수 있습니다. 기존 ASP 응용 프로그램에서는 사용자에 대한 데이터를 수집하고 사용자의 세션 동안 이 데이터를 세션에 저장하고 사용자가 웹 사이트를 떠나면 영구 데이터 저장소에 저장하는 코드를 직접 작성해야 했습니다. ASP.NET 2.0은 프로필을 사용해 이러한 모든 기능을 자동화합니다. 기본적으로 프로필은 사용자와 연결된 정보를 담는 버킷이며, 모든 ASPX 페이지에서 액세스 가능한 Profile 개체를 통해 직접 액세스할 수 있습니다.


프로필 정의

machine.config 또는 Web.config에서 각 사용자의 이름, 청구 주소, 전자 메일 주소와 같은 정보를 나타내는 <property> 값을 사용하여 프로필을 정의할 수 있으며 논리 속성의 그룹도 만들 수 있습니다.

<profile>
<properties>  
  <group name="BillingAddress">
      <add name="Street" type="System.String" />
      <add name="City" defaultValue="Toronto" type="System.String" />
      <add name="StateProv" type="System.String" />
      <add name="ZipPostal" type="System.String" />
  </group>
</properties>
</profile>

코드 14. 프로필 정의

프로필을 정의하면 요청 시에 이를 로딩하거나 사용자가 사이트를 떠날 때 저장하는 등의 정보 관리 작업이 ASP.NET 및 프로필 공급자에 의해 자동으로 처리됩니다.


프로필 사용

프로필을 정의하면 Visual Studio 2005는 Profile 개체를 통해 자동으로 프로필 속성을 제공합니다.

그림 15. 프로필 사용

또한 Visual Studio 2005는 프로필에 대한 완전한 IntelliSense 지원을 제공합니다. 프로필 정의를 변경하고 Web.config 파일을 저장하면 즉시 자동으로 올바른 IntelliSense가 제공됩니다.


웹 파트

웹 응용 프로그램과 데스크톱 응용 프로그램의 중요한 차이점 중 하나는 데스크톱 응용 프로그램의 경우 여러 구성 가능한 요소를 포함하기가 수월하다는 점입니다. Visual Studio IDE 자체를 예로 들 수 있습니다. 사용자는 어떤 화면을 어떻게 배치하여 표시할지 선택할 수 있습니다. 이와 비슷한 기능을 웹 사이트에서 구현하기는 매우 어렵습니다.

ASP.NET 2.0에서는 웹 파트라는 형식으로 이 문제에 대한 해결책을 제시합니다. 웹 파트는 모듈형 구성 요소로, 사용자는 이를 포함하고 배치하여 불필요한 세부 사항으로 인한 혼잡함이 없는 생산적인 인터페이스를 만들 수 있습니다. 사용자는 다음 작업을 수행할 수 있습니다.

  • 표시할 파트 선택
  • 파트의 순서 및 정렬 방법 구성
  • 한 웹 세션에서 다음 세션으로 뷰 저장
  • 특정 웹 파트의 모양 사용자 지정

이러한 모든 기능은 일반적인 웹 응용 프로그램에서는 실질적으로 구현이 불가능합니다.

웹 파트는 모듈형 웹 페이지 블록이라고 할 수 있습니다. 각 블록은 런타임에 웹 페이지에 동적으로 추가하거나 제거할 수 있습니다. 웹 파트를 구성하고 조작하는 코드는 ASP.NET 2.0에 기본적으로 제공됩니다. 레이아웃을 추가, 제거 및 구성하는 모든 기능은 웹 파트 시스템에 의해 자동으로 처리됩니다. 프로그래머는 웹 파트를 구축하고 이를 웹 파트 영역에 할당하기만 하면 됩니다. 사용자는 웹 파트를 조합하여 원하는 순서대로 표시할 수 있으며, 이러한 구성은 다음 번 사이트 방문 시에도 유지됩니다.


웹 파트 사용

예를 들어 병원용 웹 파트 응용 프로그램이라면 사용자는 현재 환자 상태에서 약물 상호 작용 경고에 이르기까지 다양한 표시 구성 요소를 선택할 수 있습니다. 각 사용자는 표시하려는 파트를 카탈로그에서 선택할 수 있습니다.

그림 16. 웹 파트 카탈로그

그 후 컨트롤을 끌어서 놓는 방법으로 각자 필요에 맞도록 배치할 수 있습니다.

그림 17. 웹 파트 배치

레이아웃과 구성은 사용자의 다음 번 사이트 방문을 위해 자동으로 저장됩니다. 웹 파트에 대한 자세한 내용은 ASP.NET 2.0에서의 개인 설정 (영문)을 참조하십시오.


요약

ASP.NET 2.0은 웹 응용 프로그램 개발을 위한 확장 및 구성 가능한 프레임워크를 제공함으로써 ASP.NET 1.x를 더욱 발전시켰습니다. ASP.NET의 핵심 아키텍처도 훨씬 더 다양한 컴파일 및 배포 옵션을 지원하도록 변경되었습니다. 또한 개발자는 Visual Studio 2005의 새로운 컨트롤, 새로운 마법사, 그리고 새로운 기능을 통해 많은 기본적인 작업이 더욱 간소화되었음을 알 수 있을 것입니다. ASP.NET 2.0은 개인 설정, 테마와 스킨, 그리고 마스터 페이지를 위한 혁신적인 새로운 컨트롤을 도입함으로써 옵션의 폭을 더욱 넓혔습니다. 이러한 모든 기능 향상은 .NET Framework 내의 웹 개발에 더 나은 옵션을 제공하기 위해 ASP.NET 1.1 Framework를 바탕으로 이루어졌습니다.


저자 소개

Jayesh Patel - Jay Patel은 .NET 및 Java 기술 개발자로, 주요 연구 분야는 패턴 기반 프로그래밍 및 기민한 방법론(Agile Methodology)입니다.

Bryan Acker - Bryan Acker는 Infusion Development의 테크니컬 라이터입니다. Bryan은 ASP, ASP.NET 웹 개발 및 웹 호스팅 분야에서 풍부한 경험을 가지고 있습니다.

Robert McGovern - Rob McGovern은 Infusion Development의 선임 필자이며 개발자이자 프로젝트 관리자입니다. Rob은 ASP.NET용 CodeNotes, JSP에서 ASP.NET으로의 마이그레이션 가이드를 포함한 다양한 ASP.NET 프로젝트에 참여했습니다. Rob은 또한 Virtual Earth의 Microsoft MVP이기도 합니다.

Infusion Development Corporation은 Fortune지 선정 1000대 기업을 위한 맞춤 소프트웨어 개발, 교육 및 컨설팅 서비스를 제공하는 Microsoft 공인 솔루션 공급업체로, 특히 금융 서비스 산업에 주력하고 있습니다. 뉴욕과 토론토에 사무실을 둔 Infusion Development는 금융 서비스 부분의 세계 최대 기업과 증권사, 그리고 소프트웨어 개발 업계를 포함하는 국제적인 고객 기반을 구축했습니다.


==================================================

# 1.0을 떠나볼까...
회사 개발 플랫폼이 1.0이라 어쩔수 없이 ASP.NET을 써왔다. 조금 늦은감이 있지만 지금 2.0을 사용하지 않으면 영영 안쓰게 될것 같아서 공부 시작! 덩달아 Framework 버젼업 해야하는데 이미 3.0이 나오는 시점에서 무엇을 봐야하는지가 고민된다.

'.net' 카테고리의 다른 글

C# 2.0의 partial classes  (1) 2007.07.23
rs.Read 그리고 rs.HasRows  (1) 2007.07.21
개발자가 알아두면 좋은 ASP.NET 지식 (세션편  (0) 2007.07.21
System.IO 네임스페이스의 재발견  (4) 2007.07.18
DataReader  (1) 2007.07.17

+ Recent posts