글
STUDY/DAAB 2007. 4. 26. 12:15[Study] DAAB(Data Access Application Block) in Enterprise Library 2.0 - (2)
[출처 : http://www.gosu.net/GosuWeb/Article-detail.aspx?ArticleCode=1159]
[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>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
<section name="oracleConnectionSettings" type="Microsoft.Practices.EnterpriseLibrary.Data.Oracle.Configuration.OracleConnectionSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
</configSections>
<dataConfiguration defaultDatabase="Northwind" />
<oracleConnectionSettings>
<add name="Orders">
<packages>
<add prefix="OP2" name="Oracle Package2" />
<add prefix="OP1" name="Oracle Package1" />
</packages>
</add>
</oracleConnectionSettings>
<connectionStrings>
<add name="Default Database Instance" connectionString="Database=Database;Server=(local)\SQLEXPRESS;Integrated Security=SSPI;"
providerName="System.Data.SqlClient"/>
<add name="Orders" connectionString="Data Source=Northwind;Server=(local);User ID=scott;Password=tiger;"
providerName="System.Data.OracleClient" />
<add name="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;
RECENT COMMENT