개인적인 사이트라면 모를까.. 점점 사이트 규모가 커지면 그곳에 필요한 설정 정보들 또한 굉장히 많이 늘어나게 될겁니다. 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를 사용하시면 됩니다.
어렵지 않게 구현할 수 있는건데, 제가 설명하려니 길어지고 오히려 난해해지네요 ㅋ^^;;
'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 |