티스토리 뷰
월간 마이크로소프트웨어 2006년 7월호
---------------------------------------------------------------------------------------
전사적 공통 엔진 Enterprise Library 2.0 <part1>
한용희woom33@paran.com
롯데정보통신 정보기술연구소에 재직 중이며, 닷넷 기반의 여러 프로젝트에 참여했다. 현재 Microsoft Visual C# MVP이며 MSDN 세미나 강사로도 활동 중이다.
운영체제 │ 윈도우 2000, 윈도우 2003, 윈도우 XP
개발도구 │ Microsoft Visual Studio 2003/2005, SQL Server 2000/2005
기초지식 │ C#
응용분야 │ 모든 애플리케이션
2005년 1월 마이크로소프트 패턴앤프렉틱스 팀에서 전사적으로 사용할 수 있는 공통 라이브러리인 Enterprise Library 1.0을 닷넷 프레임웍 1.1 기반으로 발표했다. 그러다가 2005년 11월 비주얼 스튜디오 2.0이 발표되면서 새롭게 닷넷 프레임웍 2.0을 기반으로 하는 새로운 Enterprise Library 2.0버전을 발표하였다. 이번호에서는 지난 2006년 1월 새롭게 출시한 Enterprise Library 2.0에 대해 소개하고자 한다.
일반적으로 프로젝트를 시작하면 보통 공통 개발 표준 프레임웍을 만들고 시작한다. 개발자들이 공통적으로 많이 사용하는 기능들을 통합하고 하나로 관리하기 위해서 대부분의 SI 회사에서는 자신만의 개발 프레임웍을 만들어 사용한다. 이를 이용하면 개발자들은 기술적인 부분은 프레임웍에 맡기고 업무를 위한 비즈니스 로직을 구현하는데 더욱 충실할 수 있다. 예를 들어 만약 이런 프레임웍이 없다면 개발자들은 자신이 스스로 기술적인 문제를 해결하기 위해 노력을 해야 하므로 생산성이 떨어지게 되며, 나중에 개발을 완료하고 나서도 이 프로그램이 어디에 문제가 있는지 발견하기 어려워서 유지보수 하는데 어려움을 느끼게 된다.
그래서 웬만한 규모의 프로젝트라면 이러한 공통 표준 개발 프레임웍을 가지고 있고, 이를 제일 먼저 구축하게 된다. 그리고 한번 잘 구축해 두면 두고두고 재사용 할 수 있어서 보통 회사들마다 자신들의 환경에 맞도록 개발한 프레임웍을 가지고 있다.
MS에서도 이러한 고객들의 요구 사항을 듣고 자체 내에서 공통 표준 프레임웍을 구축하도록 도와주는 라이브러리를 개발하게 되었다. 2005년 1월 닷넷 프레임웍 1.1 기반으로 하여 엔터프라이즈 라이브러리(Enterprise Library)라는 제품을 발표하였다. 하지만 2005년도는 이미 닷넷이 보급 된지 꽤 시간이 지난 상태라 이미 대부분의 SI업체에서는 자신들만의 닷넷 개발 공통 표준 프레임웍을대부분 완성해 놓은 상태여서 그리 많은 주목을 받지는 못했다. 이름 또한 제품 이름이라기보다는 그냥 기업에서 사용 라이브러리라는 보통명사라는 의미로 받아들이는 경우도 있어서 약간의 혼동도 있었다.
하지만 그 내부를 들여다보면 상당히 유용하고 잘 완성된 기능이 들어 있다. MS의 패턴앤프렉틱스(patterns & practices) 팀에서 오랜 기간 동안 고객의 요구사항을 충분히 수용하여서, 일관된 디자인 패턴을 적용하고 충분히 검증된 기능과 성능 그리고 유연한 기능을 제공하는 엔터프라이즈 라이브러리는 무시하기에는 많은 매력적인 특징을 가지고 있었다.
그러다가 2005년 11월 비주얼 스튜디오 2005가 발표되면서 닷넷 프레임웍도 2.0이 새로 등장한다. 이에 따라 엔터프라이즈 라이브러리도 이번에는 발 빠르게 2006년 1월 엔터프라이즈 라이브러리 2.0을 발표하였다.
엔터프라이즈 라이브러리는 기존 1.0 버전도 1월에 발표한 이후 그해 6월 업데이트 버전이 나왔다.이번 2.0도 마찬가지로 이번 1월로 끝나는 것이 아니라 계속 고객의 피드백을 받아서 계속 발전해 나가고 있다.
엔터프라즈 라이브러리란?
엔터프라이즈 라이브러리는 MS에서 판매하는 제품이 아니다. 모든 소스가 공개되어 있는 무료 라이브러리이다. 그러므로 MS의 기술 지원을 받을 수 없으며, 이전 버전과의 호환성도 보장하지 않는다. 대신 개발자가 마음대로 수정하고 확장 할 수 있다. 사실 모든 개발 환경이 각자 나름대로의 특징과 특수성이 있기 때문에 엔터프라이즈 라이브러리의 기능을 그대로 가져가 쓰는 것 보다는 각자의 프로젝트 환경에 맞게 수정해서 사용하는 것이 더 좋은 방법이 될 수도 있다.
엔터프라이즈 라이브러리는이래와 같은 목적을 가지고 설계가 되었다.
*일관성(Consistency)
일관성 있는 디자인 패턴과 구축 방법을 사용
*확장성(Extensibility)
개발자들이 자신만의 코드를 삽입할 수 있는 확장성 있는 포인트를 제공
*손쉬운 사용(Ease of use)
그래픽 기반의 설정 도구 제공, 단순한 설치 방법, 명료하고 완벽한 문서와 예제 제공
*통합(Integration)
각 엔터프라이즈 라이브러리 애플리케이션 블락들 간에 서로 잘 통합하여 작업할 수 있고, 또한 각자 독립적으로 사용할 수 있는 기능을 제공
엔터프라이즈 라이브러리는 대부분의 프로젝트에서 공통적으로 원하는 기능을 6개의 블락으로 나누어서 담아 놓았다. 예를 들어 기업용 애플리케이션을 만든다면 필수적으로 DB 액세스 기능은 꼭 들어갈 것이다. DB 작업을 하기 위해서는 DB 연결을 위한 연결 문자열 처리 그리고 저장 프로시저 호출 하는 기능을 필수적일 것이다. 엔터프라이즈 라이브러리는 이러한 기능을 손쉽게 구현하도록 라이브러리를 제공한다.
엔터프라이즈 라이브러리는 크게 6개의 애플리케이션 블락으로 나누어져 있다.
*데이터 액세스 애플리케이션 블락(Data Access Application Block)
표준화된 데이터베이스 액세스 기능을 위한 블락
*캐싱 애플리케이션 블락(Caching Application Block)
로컬 캐시 처리를 위한 블락
*암호 애플리케이션 블락(Cryptography Application Block)
해시 함수와 동기 암호화를 위한 블락
*예외 처리 애플리케이션 블락(Exception Handling Application Block)
아키텍쳐 레이어 전체를 포함하여 일관된 예외 처리 정책 수립을 위한 블락
*로깅 애플리케이션 블락(Logging Application Block)
로깅 정보 처리를 위한 블락
*보안 애플리케이션 블락(Security Application Block)
권한 검증과 보안 캐시 처리를 위한 블락
위의 6개의 블락을 꼭 모두 다 사용할 필요는 없다. 엔터프라이즈 라이브러리는 각 블락들 간의 독립성을 보장한다. 자신이 필요로 하는 부분만 따다가 그 블락만 사용하면 된다. 그렇게 때문에 무겁지 않아서 사용하는데 부담이 없다.
<그림1>각 애플리케이션 블락들 간의 관계
<그림1>은 각 애플리케이션 블락들 간의 상관관계를 나타낸 그림이다. 모든 블락은 코어 엔진 부분을 공통적으로 참조하고 각 블락들 간의 독립성을 보장한다. 그러므로 어떤 블락을 사용하기 위해 반드시 어떤 블락을 꼭 사용해야 하는 것은 아니다. 다만 옵션 사항으로 같이 사용할 수 있는 기능을 제공한다.
엔터프라이브 블락들은 저마다의 설정 방법을 제공한다. 이 기능을 이용하여 소스 코드의 수정 없이 설정 구성파일 변경만으로 블락들의 환경을 설정할 수 있다. 예를 들어 로깅 애플리케이션 블락의 경우 로깅 정보를 이벤트 로그에 저장을 하다가 정책이 변경되어서 텍스트 파일에 저장하기로 바뀌었다면 단순히 설정 파일만 변경하면 된다. 전혀 소스 코드를 수정 할 필요가 없다. 이것이 엔터프라이즈 라이브러리의 가장 큰 장점 중의 하나이다. 설정 파일 또한 코딩 할 필요 없이 그래픽 기반의 설정 도구인 Enterprise Library Configuration 툴을 제공하여 손쉽게 구성 환경을 변경 할 수 있다.
이것 이외에도 성능 카운터 측정이나 이벤트 로그 기록, WMI(Windows Management Instrumentation) 이벤트를 위한 인스트러멘테이션(instrumentation) 기능을 제공한다. 이를 이용하면 위의 블락들을 사용하다가 어디에서 문제가 생겼는지 어디에서 병목이 생겼는지 쉽게 찾아 낼 수 있다.
엔터프라이즈 라이브러리 설치 방법
먼저 MS의 패턴앤프렉틱스(patterns & practices) 사이트(http://msdn.microsoft.com/library/?url=/library/en-us/dnpag2/html/EntLib2.asp)에서 Enterprise Library 2.0을 다운 받는다. 이를 설치하기 위해서는 반드시 비주얼 스튜디오 2005가 있어야 한다.
엔터프라이즈 라이브러리는 유닛테스트 기능도 제공한다. 두 가지 유닛테스팅 도구를 지원 하는데 하나는 비주얼 스튜디오 팀 시스템용 도구와 NUnit용 솔루션을 제공한다. 엔터프라이즈 라이브러리는 소스 형태로 제공되기 때문에 처음에 설치를 하고 나면 컴파일을 해야만 한다. 이때 그냥 설치를 하면 유닛 테스트 용 도구를 포함하지 않고 컴파일을 하는데 만약 엔터프라이즈 라이브러리를 유닛 테스트 도구와 함께 사용하고 싶다면 아래와 같은 두 개의 솔루션 파일을 선택해서 빌드하면 된다.
*EnterpriseLibrary.VSTS.sln
비주얼 스튜디오 팀 시스템용 유닛 테스트 기능 제공
*EnterpriseLibrary.Nunit.sln
NUnit용 유닛 테스트 기능 제공
빌드를 하면 각 블락의 DLL들이 Bin 폴더에 만들어 진다. 이제 이 DLL을 각자의 용도에 맞게 참조하여 사용하면 된다.
<화면5>빌드가 성공적으로 이루어져서 생긴 DLL들
<화면5>를 보면 6개의 블락이므로 6개의 DLL만 있으면 될 것 같은데, 상당히 많은 DLL들이 존재한다.이는 각 블락들 간의 독립성을 보장하기 위한 것인데, 만약 예외 처리 애플리케이션 블락에서 로깅 정보를 기록하고 싶다면 Microsoft.Practices.EnterpriseLibrary.Logging.dll을 참조할 것이 아니라 Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll을 참조해야만 한다.
기본적으로 인스트러멘테이션(instrumentation) 기능은 사용하지 못하게 되어있다.이를 사용하고 싶다면 엔터프라이즈 라이브러리를 설치한 메뉴의 [Install Instrumentation] 버튼을 눌러서 별도로 설치를 해줘야 한다.
설치가 다 되었다면 이제각 애플리케이션 블락들의 상세한 기능을 하나씩 알아보자.
데이터 액세스 애플리케이션 블락(Data Access Application Block)
데이터 액세스 블락은 데이터베이스와 작업하기 위한 일관되고 단순한 방법을 제공한다.DB가 Sql Server이든 Oracle이든 상관없이 일관된 코딩을 할 수 있으며, DB를 바꾸고 싶다면 클라이언트 코드를 수장하지 않고 구성 설정 파일만 변경하면 된다.또한 인라인 SQL과 저장 프로시저 모두를 지원한다.
아래는인라인 SQL 구문의 예제이다.
Database db = null;
db = DatabaseFactory.CreateDatabase("NWConn");
using (IDataReader results = db.ExecuteReader(CommandType.Text,
"SELECT * From Customers"))
{
while (results.Read())
{
string ID = (string)results["CustomerID"];
string Name = (string)results["ContactName"];
string City = (string)results["City"];
Console.WriteLine("ID={0}, Name={1}, City={2}", ID, Name, City);
}
}
<결과>
ID=ALFKI, Name=Maria Anders, City=Berlin
ID=ANATR, Name=Ana Trujillo, City=Mexico D.F.
ID=ANTON, Name=Antonio Moreno, City=Mexico D.F.
ID=AROUT, Name=Thomas Hardy, City=London
ID=BERGS, Name=Christina Berglund, City=Lulea
위 소스를 보면 Database라는 공통 클래스를 이용하며 DB 연결을 설정하고 있다. 이러한 연결 정보는 구성 설정 파일에 저장되어 있다. 구성 설정 파일은 해당 프로젝트에서 새로운 아이템으로 Application Configuration File을 선택하여 추가하면 생성할 수 있다.
이 파일은 XML 형식으로 되어 있는데, 이를 전부 외워서 설정하기에는 많은 어려움이 있다. 그래서 설정 툴을 사용하면 되는데, 엔터프라이즈가 설치된 폴더의 bin 폴더 아래에 보면 EntLibConfig.exe 파일이 있다. 바로 이 프로그램이 구성 설정 파일을 손쉽게 그래픽 기반으로 해주는 프로그램이다. 이 프로그램을 이용하면 해당 구성 파일을 손쉽게 편집할 수 있다.
<화면2>App.Config 파일을 편집하는 화면
<화면2>는 해당 구성 파일을 열어서 편집하는 화면이다. 위 화면을 보면 “LocalSqlServer"라는 것이 있는데, 이는 machine.config 파일에 있는 설정 내용을 나타내 준 것이다. 우리는 SQL Server 2000의 대표적 DB인 Northwind를 사용할 것이므로 이름을 NWConn이라고 하고 연결 설정을 하였다.
이번에는 저장 프로시저를 사용하는 예제이다.
Database db = null;
db = DatabaseFactory.CreateDatabase("NWConn");
DbCommand dbCommand = db.GetStoredProcCommand("GetCustomer");
db.AddInParameter(dbCommand, "City", DbType.String, "London");
using (IDataReader results = db.ExecuteReader(dbCommand))
{
while (results.Read())
{
string ID = (string)results["CustomerID"];
string Name = (string)results["ContactName"];
string City = (string)results["City"];
Console.WriteLine("ID={0}, Name={1}, City={2}", ID, Name, City);
}
}
<결과>
ID=AROUT, Name=Thomas Hardy, City=London
ID=BSBEV, Name=Victoria Ashworth, City=London
ID=CONSH, Name=Elizabeth Brown, City=London
ID=EASTC, Name=Ann Devon, City=London
ID=NORTS, Name=Simon Crowther, City=London
ID=SEVES, Name=Hari Kumar, City=London
<저장프로시저>
CREATE PROCEDURE [dbo].[GetCustomer]
@City nvarchar(15)
AS
SELECT *
FROM Customers
WHERE City = @City
인라인 SQL과 마찬가지로 단순한 코딩으로 저장 프로시저를 사용 할 수 있다.
캐싱 애플리케이션 블락(Caching Application Block)
일반적으로 성능 향상을 위해서 캐싱 기능을 많이 사용한다. 예를 들면, 스마트 클라이언트 애플리케이션에서 캐시 기능을 이용하면 오프라인 작업을 수월하게 할 수 있다. 캐싱 애플리케이션 블락은 자주 변경되지 않는 데이터를 접근하는데 있어서 접근 비용이 비싸다면 성능 향상을 위해 고려해 볼 만한 기능이다.윈폼, 콘솔, 윈도우 서비스, 엔터프라이즈 서비스, ASP.NET 등 모든 분야에서 사용할 수 있다. 단 ASP.NET의 경우 자체 캐시 기능이 있으므로 자체 캐시 기능이 지원하지 못하는 데이터에 한해서 사용할 수 있을 것이다.
캐시를 저장하는 공간으로는 메모리, 데이터베이스,격리된 스토리지(Isolated Storage)를 이용할 수 있다.
아래는 캐싱 애플리케이션 블락을 사용한 예이다.
static string GetDataFromDB(string key)
{
System.Threading.Thread.Sleep(3000);
return "Big Data";
}
static string GetData(string key)
{
string data = null;
CacheManager cache = CacheFactory.GetCacheManager();
data = (string)cache[key];
if (data == null)
{
data = GetDataFromDB(key);
cache.Add(key, data);
}
return data;
}
static void Main(string[] args)
{
Console.WriteLine("첫번째시도 시작:{0}", DateTime.Now.Second);
Console.WriteLine("첫번째시도 데이터:{0}", GetData("han"));
Console.WriteLine("첫번째시도 끝:{0}", DateTime.Now.Second);
Console.WriteLine("두번째시도 시작:{0}", DateTime.Now.Second);
Console.WriteLine("두번째시도 데이터{0}", GetData("han"));
Console.WriteLine("두번째시도 끝:{0}", DateTime.Now.Second);
}
<결과>
첫번째시도 시작:44
첫번째시도 데이터:Big Data
첫번째시도 끝:48
두번째시도 시작:48
두번째시도 데이터Big Data
두번째시도 끝:48
GetDataFromDB라는 메소드는 DB에서 많은 데이터를 가져오는 메소드를 가장했다. 그래서 이 데이터를 가져오는데 3초가 걸린다고 가정을 하였다. GetData라는 메소드는 먼저 데이터를 가져오는데 있어 캐시에 있는지 확인을 하고 없으면 DB에서 데이터를 가져오고 캐시에 저장을 하는 역할을 한다.
그래서 결과를 보면 처음 데이터를 가져올 때에는 4초가 결렸지만, 두 번째 가져올 때에는 바로 가져왔다.위 방법은 저장공간으로 메모리를 사용하였는데, 격리된 저장 공간을 사용하면 두 번째 실행 할 때에도 빠르게 가져올 것이다. <화면4>는 격리된 저장 공간을 사용하라고 셋팅한 그림이다.
<화면4>격리된 스토리지를 셋팅한 화면
즉, Cache Manager에 저장 공간으로 아무것도 설정 안하면 기본적으로 메모리에 저장을 하고 따로 저장 공간을 설정하면 그곳에 저장을 한다.아래는 실행 결과 이다.
첫번째시도 시작:37
첫번째시도 데이터:Big Data
첫번째시도 끝:38
두번째시도 시작:38
두번째시도 데이터Big Data
두번째시도 끝:38
1초만에 데이터를 가져왔다. 이는 격리된 공간에서 데이터를 가져오는 시간이 포함된 것이다. 캐싱 애플리케이션 블락은 내부적으로 백그라운드 스케줄러가 정기적으로 작동하면서 의해 오래된 것은 메모리에서 삭제를 한다. 따라서 이러한 만료 시간이나 우선 순위 등을 따로 설정할 수 있는 기능도 있다.
암호 애플리케이션 블락(Cryptography Application Block)
데이터 보안을 위해서 중요한 정보는 보통 암호화를 해서 저장을 한다. 이러한 암호화를 위해서 암호 애플리케이션 블락을 이용할 수 있다. 암호 애플리케이션 블락은 해시 함수와 동기 암호화 방식을 지원하며 비동기 암호화 방식은 지원하지 않는다.
<화면12>동기 암호화 방식중 AES(Rijndael) 알고리즘으로 설정한 화면
static void Main(string[] args)
{
string msg = "han";
Console.WriteLine("원본 메세지:{0}", msg);
string encrypt = Cryptographer.EncryptSymmetric("symmProvider", msg);
Console.WriteLine("암호화 메세지:{0}", encrypt);
string decrypt = Cryptographer.DecryptSymmetric("symmProvider", encrypt);
Console.WriteLine("복호화 메세지:{0}", decrypt);
}
<결과>
원본 메세지:han
암호화 메세지:hX/Uy4VOH+79f9n6mIzEp0+PZUwgkFAs/xcz54JsRmo=
복호화 메시지:han
마치면서
이번호에서는 6개의 애플리케이션 블락 중 캐싱 애플리케이션 블락, 암호 애플리케이션 블락, 데이터 액세스 애플리케이션 블락 3가지를 알아보았다.엔터프라이즈 라이브러리는 충분히 검증되고 안정된 기능을 보여주기 때문에 이미 공통 표준 프레임웍이 있는 회사에서도 취사선택하여 사용할 수 있으며, 학생들이 주로 하는 작은 프로젝트라면 이러한 안정된 라이브러리를 사용하는 것이 더욱 빠르게 하기 프로젝트는 완성하는 지름길이 될 것이다. 다음호에서는 나머지 3개인 예외 애플리케이션 블락, 로깅 애플리케이션 블락, 보안 애플리케이션 블락에 대해 알아 볼 것이다.
- Total
- Today
- Yesterday
- georgia max
- 아이폰 셀카
- .NET Excel
- Roibosh Vanilla
- 나를 기억하고 있는 너에게
- 보이스차
- 아이팟 보조배터리
- 켄우드 정수기
- 아이폰 보조배터리
- GTO SHONAN 14DAYS
- 닷넷 엑셀
- hot 6
- 아이폰 카메라어플
- Lily's Diary
- 모토스톰2
- Crows Zero
- KL-2200
- 윈터드림
- 안녕 바다
- 로네펠트
- KL2200
- 닷넷 파일형식
- 보이스티
- IT·컴퓨터
- 삼성 외장하드
- God of War III
- 릴리스 다이어리 - 설레어
- 아이튠즈 없이 mp3가져오기
- 릴리스다이어리
- 러브트리프로젝트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |