본문 바로가기

Development/ASP.NET

Web.Config 를 확장해 보자

반응형

 

개인적인 사이트라면 모를까.. 점점 사이트 규모가 커지면 그곳에 필요한 설정 정보들 또한 굉장히 많이 늘어나게 될겁니다. Web.Config 라인수가 200 라인 넘어가게 되면 이거 ~ 찾기도 힘들고

   

그럼 어떻게 하면 될까… Web.Config 여러 개의 파일로 쪼개어 연관성 있는 정보들만 묶으면 되지 않을까? 좋다.. 또는 관련된 섹션끼리 묶을 없을까??

그럼 한번 해보자..

   

다음과 같이 실습에 필요한 Config 파일을 만들어 봅시다.

Web.Config

기본 생성되는 파일

Umc.Core.Config

Core 모듈에 설정이 들어가는 파일

Umc.Message.Config

Message 관련 설정이 들어가는 파일

   

그리고 다음과 같이 Web.Config 추가해봅시다.

<configuration>

        <configSections>

               <!-- Web.Config 섹션 설정-->

               <sectionname="Umc.Web"type="Umc.Core.Web.UmcConfigurationSectionHandler, Umc.Core"/>

               <sectionname="Umc.Core"type="Umc.Core.Web.UmcConfigurationSectionHandler, Umc.Core"/>

               <sectionname="Umc.Message"type="Umc.Core.Web.UmcConfigurationFileAttributeHandler, Umc.Core"/>

        </configSections>

   

Section name 에서는 섹션의 이름과,

Type 에서는 섹션 처리를 담당할 클래스, 그리고 콤마뒤에는 어셈블리 이름(DLL ) 등록합니다.

   

그럼 Web.Config 에서 type 등록한 클래스를 만들어 봅시다.

   

UmcConfigurationSectionHandler.cs

using System;

using System.Configuration;

using System.Collections.Generic;

using System.Text;

   

namespace Umc.Core.Web

{

        ///<summary>

        /// Web.Config 의섹션을구성하는핸들러

        ///</summary>

        public class UmcConfigurationSectionHandler : System.Configuration.NameValueSectionHandler

        {

        }

}

   

UmcConfigurationFileAttributeHandler.cs

using System;

using System.Collections.Generic;

using System.Text;

   

namespace Umc.Core.Web

{

        ///<summary>

        /// Web.Config file 특성을처리하는핸들러

        ///</summary>

        public class UmcConfigurationFileAttributeHandler

               : System.Configuration.NameValueFileSectionHandler

        {

               public UmcConfigurationFileAttributeHandler()

               {

               }

        }

}

   

줸장~ 보는대로 소스는 텅텅~ 비었습니다.

비었다고 생각하지 말아주세요. 각각 섹션 핸들러를 상속받아 쓰고 우리의 프로젝트에 포함시키려

뿐입니다^^

이걸로 섹션 처리기는 완성이 되었습니다.

   

그럼 이제 이것을 활용할 있도록 클래스를 하나 만들어 보겠습니다.

using System;

using System.Configuration;

using System.Collections.Specialized;

using System.Collections.Generic;

using System.Text;

using System.Web;

   

namespace Umc.Core

{

        ///<summary>

        ///환경설정내용을가져온다..

        ///</summary>

        public class UmcConfiguration

        {

               public static string ConnectionString

               {

                       get

                       {

                              return ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();

                       }

               }

   

               ///<summary>

               /// Umc.Web Configuration 을가져온다.

               ///</summary>

               public static NameValueCollection Web

               {

                       get

                       {

                              return (NameValueCollection)ConfigurationManager.GetSection("Umc.Web");

                       }

               }

   

               ///<summary>

               /// Umc.Core Configuration 을가져온다.

               ///</summary>

               public static NameValueCollection Core

               {

                       get

                       {

                              return (NameValueCollection)ConfigurationManager.GetSection("Umc.Core");

                       }

               }

   

               ///<summary>

               /// Umc.Message COnfiguration 을가져온다.

               ///</summary>

               public static NameValueCollection Message

               {

                       get

                       {

                              return (NameValueCollection)ConfigurationManager.GetSection("Umc.Message");

                       }

               }

        }

}

   

   

우리는 섹션의 타입을 NameValueSectionHandler 상속받은 처리기를 만들었으므로, 리턴값도 NameValueCollection 으로 리턴할 있습니다.

   

이제 적당한 config 파일을 만들어 보도록 할게요

<?xmlversion="1.0"?>

<configuration>

               <!-- Web.Config 설정 섹션 -->

               <sectionname="Umc.Web"type="Umc.Core.Web.UmcConfigurationSectionHandler, Umc.Core"/>

               <sectionname="Umc.Core"type="Umc.Core.Web.UmcConfigurationSectionHandler, Umc.Core"/>

               <sectionname="Umc.Message"type="Umc.Core.Web.UmcConfigurationFileAttributeHandler, Umc.Core"/>

        </configSections>

.

.

<!-- Database 연결 -->

        <connectionStrings>

               <addname="ConnectionString"connectionString="server=(Local); database=UmcBlog; uid=sa; pwd=anjfqhk"/>

        </connectionStrings>

        <Umc.Web>

               <addkey="umc"value="엄씨야~~" />

        </Umc.Web>

        <Umc.Core>

 <addkey="umc.core"value="코어관련 셋팅" />

        </Umc.Core>

        <Umc.Messagefile="Umc.Message.Config">

        </Umc.Message>

   

Umc.Message 섹션을 보면, file 속성을 사용하는 것을 있습니다.

이것은 지정한 파일을 현재 config 가져올 있습니다. 소위 include 있다는 것이지요.

   

Umc.Message.Config

<?xmlversion="1.0"encoding="utf-8"?>

<Umc.Message>

        <addkey="umcMessage"value="메시지"></add>

</Umc.Message>

   

이제 마지막으로 샘플 페이지를 만들어 볼게요.

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

               string sectionValue = Umc.Core.UmcConfiguration.Message["umcMessage"];

               Response.Write( sectionValue );

    }

}

   

비쥬얼스튜디오 2005 기준으로 작성이 되었구여.. 2003 버전에서는 GetSection 대신 GetConfig 사용하시면 됩니다.

어렵지 않게 구현할 있는건데, 제가 설명하려니 길어지고 오히려 난해해지네요 ^^;;

   

<http://blog.powerumc.kr/1>에서 삽입

반응형

'Development > ASP.NET' 카테고리의 다른 글

UnitTestProject에서 Controller Test 하기  (0) 2021.11.03
ASP.NET MVC Model Parameter  (0) 2015.03.27
ASP.NET MVC5 Update 후 오류  (0) 2015.02.05
ASP.NET AJAX Control Toolit 빌드시 에러  (0) 2009.03.05