DATOR

OLE DB - Application에서의 DB connection

Document URL : http://www.dator.co.kr/msjung/270084
DB Connection 프로그래밍 | Posted on March 21st, 2012 at 00:25 by 밀오 | 조회수 : 15800

내용 출처: MSDN의 Microsoft OLE DB 하위 페이지 들

(http://msdn.microsoft.com/en-us/library/ms722784(v=vs.85).aspx)

 

 

1. OLE DB란?

 

Visual Studio로 개발하는 Window 응용 프로그램에서,

Database에 접속 하기 위한 여러가지 방법 중 하나입니다.

 

OLE DB 방식를 간단히 설명하자면,

COM interface를 기반으로 한 Data Source 접속 방식입니다.

 

때문에, OLE 방식을 이해하려면 COM에 대해서도 어느정도 알아야 할 필요가 있습니다.

 

COM에 대해 간단히 정리하면,

Microsoft에서 서로 다른 객체간 데이터 공유를 위해 만들어놓은 표준 interface로, 

COM의 도움을 받아, 흔히 알고 있는 Ctrl+c Ctrl+v 가 가능해지게 됩니다.

 

Database에서도 이 COM interface를 지원하기 위해,

OLE-DB가 탄생했다고 보면 됩니다.

 

자세한 탄생 비화가 궁금하신 분은,

여기를 참고해보세요. http://blogs.msdn.com/b/data/archive/2006/12/05/data-access-api-of-the-day-part-i.aspx

ODBC 부터 OLE-DB, ADO.NET, LINQ로 이어지는 스토리가 적혀있습니다.

 

 

2. OLE DB의 구성

 

OLE DB의 주 목적은,

ODBC와 마찬가지로 Application에서 data에 어떻게 접근하느냐 입니다.

 

OLE DB는

Provider 라는 data 제공자   ( OLE DB interface를 제공하는 data 제공자 )

Consumer라는 data 소비자 ( OLE DB component를 포함한 system이나 application )

로 구성된 형태입니다.

 

Consumer를 더 보면,

Data source object 와 Session object 라는

2개의 COM object가 연결을 담당하고 있습니다.

 

먼저 Data source object의 instance를 생성하고,

이 object를 이용해서 session object의 instance를 생성하면,

이후 data 처리가 가능해지는 방식으로 동작하게 됩니다.

 

3. OLE DB관련 class

 

OLE DB는 COM object로 구성되어 있기 때문에,

interface API를 호출 하는 방식으로도 동작시킬 수 있습니다.

 

다만, API를 직접 호출하는 방식은 여러모로 불편해서,

필요한 것만 모아놓은 class들이 만들어져 있습니다.

 

 

IC38863.gif

 

전에 올렸던 그림인데요,

이중에 오른쪽 트리가,

바로 그 역할을 하는 ADO ( ActiveX Data Objects ) 입니다.

 

ODBC에 MFC의 class를 통해서 접근하는 것과  유사한 방식으로

OLE DB에 ADO 를 통해서 접근할 수 있게 됩니다.

 

4. OLE DB 연결 방식 (ADO)

 

사용하는 객체만 다를 뿐,

ADO도 connection string을 작성해서 접속하는 방식을 사용합니다.

 

예) http://msdn.microsoft.com/en-us/library/ms678277(v=vs.85).aspx
      _ConnectionPtr pConnection2 = NULL;

      pConnection2->ConnectionString = "DSN=DataPubs;UID=MyUserId;PWD=MyPassword;";
      pConnection2->Open("", "", "", adConnectUnspecified);

      .....

      pConnection2->Close();

 

ODBC 방식과 큰 차이가 없어서, 코드 설명은 생략합니다.

 

5. OLE DB 방식의 장단점

 

장단점은 대부분,

COM을 사용하는 것과 관련이 있습니다.

 

단점을 꼽자면,

사용하는 Database가 COM interface을 잘 지원하는지,

또한 COM 등록 및 해제등 관리의 문제. ( = 레지스트리 관리 문제)

또한 개발자가 COM을 어느정도 알고 있어야 한다는 점.

이 정도가 될 것 같고요.

 

COM을 사용하기 때문에,

Window계열이 아닌 OS에서는 쓸 수 없는 방식입니다.

(Middleware나 Bridge 형태로 지원하고 있을지는 모르겠습니다.)

 

장점이라면,

COM object간의 호환성이 좋다는 것.

 

때문에,

OLE DB로 접속할 때가 ODBC 로 접속할 때 보다, 호환이 잘된다거나 지원이 잘되는 경우.

또는 ODBC 방식으로는 사용할 수 없었던 data object를 사용할 경우

엔 OLE DB 방식을 선택하는 게, 큰 도움이 될 수 있습니다.

 

6. 성능 차이

 

아직까지 큰 차이를 느껴본적이 없지만,

커뮤니티를 돌아보면 OLE DB가 더 낫다는 평이 많습니다.

 

다만 layer를 보면

 

ADO

   ↓

OLE DB API

   ↓

COM

   ↓

Provider

MFC ODBC classes

      ↓

ODBC API

       ↓

ODBC Manager

       ↓

ODBCDriver

       ↓

Data Source

 

ADO와 MFC 제공 class들, OLE DB API와 ODBC API

간의 차이는 대충 보일 거고요.

 

전략적으로,

ODBC 보다는 OLE DB쪽에 지원이 더 되는 편이라,

ODBC 보단 OLE DB쪽을 선택하는 편이 편할거라 생각됩니다.

 

물론,

이제는 COM도 다른 기술에 의해 밀려나는 중이라서,

OLE DB도 최종 선택이 되기엔 부적합해 보입니다.

 

7. 다음은?

 

현황을 보면,

.net framework와 java 등에도 대체할 만한 data access 기술이 많이 나와 있습니다. 

다만, 아직은 느린감이 있어서, ODBC나 OLE DB가 그런 점에선 유리합니다.

 

그리고,

각각의 data provider 들도, 자기 나름대로의 접속 방식을 제공하고 있으며,

이 또한, 해당 provider에 특화된 장점을 갖고 있습니다.

 

기회가 닿는대로,

다른 data access 기술들에 대해서도 정리해 보겠습니다.

Tagged :
   

Comments : 0