DAAB(Data Access Application Block) in Enterprise Library 2.0 - (2회)
DAAB(Data Access Application Block) in Enterprise Library 2.0 - (2회) |
| ||||||||||||||||||
[DAAB사용법1(사용을위한준비작업)] Enterprise Library에포함된DAAB이전의DAAB에서는static메서드를사용해서액세스하였다. Enterprise Library에포함된DAAB는[Plugin]패턴을사용한다.플러그인은구현객체에대한의존성정보를설정파일에담아실시간으로관리함으로써,어플리케이션을구성하는각각의컴포넌트들이구체적인구현클래스를모르고도상호작용할수있도록한다. DAAB를사용하는단계는다음과같다. 가장먼저DAAB가사용할Data Provider와DB연결문자열등의정보를web.config등의구성정보파일에설정한다. 구성정보를구성파일에저장하기위해서는되도록이면프레임워크에서제공되고있는Configuration Console을이용한다. 물론구성파일에이러한정보를저장할필요없이사용할수도있다.
[Configuration Console을이용한구성정보설정] 아래그림은Configuration Colsole을실행시킨화면이다. 위화면에서New Application을선택한다. 어플리케이션을생성한뒤에Data Access Application Block을선택한다. 그런다음Default database의Instance를설정한다. Default database의Instance는인스턴스이름없이DAAB의DatabaseFactory.CreateDatabase를호출했을때사용되는인스턴스정보를담게된다. DAAB의DatabaseFactory.CreateDatabase메서드를사용해서Database를생성할때인자로인스턴스이름을주게된다. 위Configuration Tool을이용해서Default database Instance, Named Instance(위그림에서는Northwind, Orders)를구성할수있고각인스턴스별로별도의DB연결문자열, ADO.NET Data Provider를설정할수있다. 즉구성정보만으로Application Code의 수정없이DB연결과관련된정보를변경할수있음으로해서DataBase에독립적인코딩이가능하다. 아래그림은Default database Instance, Named Instance(Northwind, Orders)를설정한예이다. 왼쪽트리에서Data Access Application Block을선택하면오른쪽윈도우에서DefaultDatabase Name에서Default Database Instance이름을설정할수있다. 그럼각각의인스턴스에대한좀더구체적인설정을살펴보겠다. Default Database Instance의경우(다른Named Instance도같다) 왼쪽에서해당인스턴스를선택하면오른쪽창에서해당인스턴스의Data Provider를선택할수있으며해당DB의DB연결문자열을구성하는각각의값들을설정할수있다.이경우해당값이없으면새로이추가하면된다. User ID와Password는디폴트로없는상태이므로새롭게추가하여해당값을설정하면된다. 설정이끝나면Save Application메뉴를통해해당구성정보를저장할구성파일을지정한다. 아래그림은3개의인스턴스를설정한Configuration Tool의모습과실제구성파일에저장된내용을보여주고있다. <configuration> <configSections> <sectionname="dataConfiguration"type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"/> <sectionname="oracleConnectionSettings"type="Microsoft.Practices.EnterpriseLibrary.Data.Oracle.Configuration.OracleConnectionSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"/> </configSections> <dataConfigurationdefaultDatabase="Northwind"/> <oracleConnectionSettings> <addname="Orders"> <packages> <addprefix="OP2"name="Oracle Package2"/> <addprefix="OP1"name="Oracle Package1"/> </packages> </add> </oracleConnectionSettings> <connectionStrings> <addname="Default Database Instance"connectionString="Database=Database;Server=(local)\SQLEXPRESS;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/> <addname="Orders"connectionString="Data Source=Northwind;Server=(local);User ID=scott;Password=tiger;" providerName="System.Data.OracleClient"/> <addname="Northwind"connectionString="Database=Northwind;Server=abc;User ID=sa;Password=password;" providerName="System.Data.SqlClient"/> </connectionStrings> </configuration> 위의구성정보중OracleConnectionSettings내에있는Package부분이필요한이유는다음과같다.오라클의Stored Procedure가패키지내에그룹핑되어있는경우이를호출하기위해서는Stored Procedure이름앞에패키지이름을붙여주어야한다. 그러나이렇게할경우개발되는코드들은오라클이라고하는DB에종속적이게된다. DAAB는이러한패키지이름과Prefix를위와같이구성정보에관리하여개발자가작성하는코드는이러한패키지명에신경쓰지않고코딩할수있게함으로써결과적으로개발되는코드가DB에독립적이게한다. 즉위와같이패키지명과Prefix를구성정보에담게되면DAAB가알아서해당Stored Procedure를호출할때내부적으로이를처리해주므로개발자는다른DB와똑같은방식으로Stored Procedure를호출하면된다.개발자는단지위의구성정보매핑에있는데로해당Stored Procedure이름을해당Prefix로시작하게하면된다. 위의구성정보에서prefix로“*”를사용하게되면 모든Stored Procedure호출시에관련된패키지명이붙게된다. 이러한패키지와Prefix와의매핑은오라클DB에만한정되는얘기이다. Configuration Tool이만들어주는구성정보에대한자세한설명은Enterprise Library설명서내Data Access Application Block부분중Source Schema for the Data Access Application Block부분을참고하기바란다. 이와같이DAAB를사용하기위한구성정보를일일이구성파일을열어설정할필요없이GUI화면을통해쉽게설정할수있게하는Configuration Tool을제공하고있다.단주의할것은각각의Key/Value값들은유효성검사를수행하지는않는다.단지키와값이같이존재하는지여부만체크한다는사실을주의해야한다. 결국사용자의책임하에키/값을사용해서구성정보를설정해야한다. 관련DLL참조추가및Using Namespace설정DAAB를사용하기위해서는관련DLL을우선참조추가해야한다. 위그림처럼Microsoft.Practices.EnterpriseLibrary.Data.dll, Microsoft.Practices.EnterpriseLibrary.Common.dll, Microsoft.Practices.EnterpriseLibrary.ObjectBuilder.dll을참조추가한다. 그리고아래와같이개발할코드이상위에using문을추가한다.(C#의경우) using Microsoft.Practices.EnterpriseLibrary.Data; using System.Data; |