ASP.NET Universal Provider 소개

ASP.NET 환경에서 사용자 멤버십, 프로파일, 역할과 세션 상태 관련 기능은 별도의 공급자 클래스에 의하여 구현되는 경우가 많은데, 이러한 공급자 클래스들은 개발자 스스로 원한다면 별도로 정의하여 각자의 서버 및 네트워크 인프라에 맞추어 다시 작성할 수 있습니다. 하지만 이렇게 작업하기에는 녹록치 않은 면들이 많고, 또 실제로 많은 테스트와 검증 과정이 뒷받침되어야 할 필요가 있습니다.


최근에는 SQL Server Compact Edition이나 SQL Server 2012에서 소개된 SqlExpress 또는 SQL Azure와 같이 전통적인 SQL Server 환경이 아닌 곳을 기반으로 택해야 하는 일도 자주 있습니다. 이러한 경우 많은 시행 착오와 오류를 경험할 수 밖에 없는데, 이러한 문제를 크게 덜어줄 유용한 기술이 하나 있습니다. 바로 ASP.NET Universal Provider이며, 향후 Microsoft가 언급하는 Hybrid Cloud Computing 환경에서의 단일 프로그래밍 모델을 구현하기 위한 초석으로 자리매김할 것으로 예상됩니다. 🙂


ASP.NET Universal Provider의 구성


ASP.NET Universal Provider는 다음과 같은 구성을 가지고 있습니다.



  • System.Web.Providers.DefaultMembershipProvider
    (기존의 System.Web.Security.SqlMembershipProvider에 대응)

  • System.Web.Providers.DefaultProfileProvider
    (기존의 System.Web.Profile.SqlProfileProvider에 대응)

  • System.Web.Providers.DefaultRoleProvider
    (기존의 System.Web.Security.SqlRoleProvider에 대응)

  • System.Web.Providers.DefaultSessionStateProvider
    (내장된 세션 상태 관리 공급자를 대체)

ASP.NET Universal Provider를 Visual Studio의 확장 패키지 갤러리 (NuGet 갤러리)를 통하여 설치하게되면 위의 각 공급자에 대한 설정을 현재 ASP.NET 프로젝트 상의 web.config 파일에 지정하게되고, 데이터 소스를 어떻게 선택하는지에 따라서 미리 구성된 데이터 스키마에 맞추어 관련된 서비스 기능을 수행할 수 있도록 맞추게 됩니다.


ASP.NET Universal Provider 설치하기


ASP.NET Universal Provider는 Nuget Package Install Site에서 손쉽게 asp.net 프로젝트에 추가할 수 있습니다. Visual Studio나 Visual Web Developer를 설치한 경우 Nuget Console에서 아래 패키지 이름을 검색하여 기존 프로젝트에 추가하시면 됩니다. 



패키지 설치가 끝나면 web.config 파일에 아래와 같이 Membership, Role, Profile, Session State에 대한 설정을 Universal Provider로 업데이트합니다.


<configuration>
    <connectionStrings>
        <add name=”DefaultConnection” connectionString=”Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|aspnet.mdf;Initial Catalog=aspnet;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True” providerName=”System.Data.SqlClient”/>
    </connectionStrings>
    <system.web>
      <profile defaultProvider=”DefaultProfileProvider” >
        <providers>
          <add name=”DefaultProfileProvider” type=”System.Web.Providers.DefaultProfileProvider” connectionStringName=”DefaultConnection” applicationName=”/”/>
        </providers>
      </profile>
      <membership defaultProvider=”DefaultMembershipProvider”>
        <providers>
           <add name=”DefaultMembershipProvider” type=”System.Web.Providers.DefaultMembershipProvider” connectionStringName=”DefaultConnection”
             enablePasswordRetrieval=”false” enablePasswordReset=”true” requiresQuestionAndAnswer=”false” requiresUniqueEmail=”false”
             maxInvalidPasswordAttempts=”5″ minRequiredPasswordLength=”6″ minRequiredNonalphanumericCharacters=”0″ passwordAttemptWindow=”10″
             applicationName=”/” />
        </providers>
      </membership>
      <roleManager defaultProvider=”DefaultRoleProvider”>
        <providers>
           <add name=”DefaultRoleProvider” type=”System.Web.Providers.DefaultRoleProvider” connectionStringName=”DefaultConnection” applicationName=”/” />
        </providers>
      </roleManager>
      <sessionState mode=”Custom” customProvider=”DefaultSessionProvider”>
        <providers>
          <add name=”DefaultSessionProvider” type=”System.Web.Providers.DefaultSessionStateProvider” connectionStringName=”DefaultConnection” applicationName=”/”/>
        </providers>
      </sessionState>
    </system.web>


위의 설정에서 DefaultConnection에 적절한 연결 문자열과 함께 정확한 providerName을 기재하면 Universal Provider가 정확한 ADO.NET Connection Driver를 사용하여 필요한 서비스들을 제공하게 됩니다. 이렇게 만듦으로서 SQL Azure는 물론 기존 SQL Server, SQL Server CE를 데이터 원본으로 선택할 수도 있습니다.


좀 더 자세한 정보 알아보기


패키지의 최신 업데이트 정보와 설치 방법은 아래 웹 사이트에서 확인할 것을 권합니다.


http://nuget.org/packages/System.Web.Providers/1.0.1


구체적인 사용 방법과 시나리오에 대해서는 Scott Hanselman의 블로그 아티클을 참고하시기 바랍니다.

http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx

 

댓글 남기기