DATOR

ODBC - Application에서의 DB connection

Document URL : http://www.dator.co.kr/msjung/267978
DB Connection 프로그래밍 | Posted on March 10th, 2012 at 14:27 by 밀오 | 조회수 : 16813

내용 출처: MSDN의 Visual Studio 6.0 하위 페이지 들

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

 

1. ODBC 란?

 

MFC에서 DB에 접속하는 방식 중 하나로,

미리 구성된 ODBC DataSource에 접속하는 방식이며,

이를 위해, MFC 에서는 몇 가지 class 들을 제공해 줍니다.

 

여기서는, 그 중 에서도 MFC ODBC class 들 중심으로 정리하겠습니다.

  - MFC ODBC class 외에도, ODBC DataSource에 접속할 수 있는 class는 몇 개 더 있습니다.

 

2. ODBC 의 구성도

 

ODBC는 다음과 같은 구성요소로 이루어져 있습니다. 

  1. ODBC API
     - 개발자를 위해 제공되는 API 입니다. MFC ODBC class에서 호출 되거나, 직접 호출 할 수 있습니다.

  2. ODBC 드라이버 관리자
     - ODBC DB 드라이버를 어플리케이션에서 쉽게 사용할 수 있도록 도와주는, DLL 입니다.

  3. ODBC 데이터베이스 드라이버
     - 각각의 DBMS 에 맞는 드라이버가 DLL로 제공됩니다. (필요한 드라이버가 없다면 설치 해야 합니다.)

  4. ODBC Cursor Library
      - ODBC 드라이버 관리자와 드라이버 사이에 위치하며, 데이터 집합을 조작하도록 도와주는, DLL 입니다.

  5. ODBC Administrator
     - DBMS에 해당하는 ODBC DataSource를 관리해주는 Tool로, 윈도우 제어판에 들어가면 볼 수 있습니다.

 

각 요소별 관계를 정리하면 아래와 같습니다.

 

 

ODBC 구성요소.png

 

 

3. ODBC DataSource 란?

 

결국 ODBC의 목표 대상은 ODBC DataSource가 됩니다.

ODBC DataSource란 건 뭘까요?

 

간략하게 정리하자면,

ODBC DB 드라이버를 제공하는 모든 data 제공자는, ODBC DataSorce 가 될 수 있습니다.

 

예로, 현재 ODBC DB 드라이버를 제공하는 곳을 나열해 보면, 아래와 같습니다.

 - 각종 DBMS (Oracle, MS-SQL 등의 Database 들)

 - excel 파일이나, text 파일 등의 각종 파일 포맷

 - ODBC 드라이버를 제공하는 각종 Application 들

 

하지만 주로 DBMS 들이 DataSource로 사용됩니다.

 

4. MFC 의 ODBC Class

 

CDataBase   - DataSource와의 연결을 관리

CRecordSet  - DataSource와 주고받을 Data를 처리

이렇게 두 가지의 class가 제공됩니다.

 

5. ODBC DataSource의 연결 방식 

  1. 우선 DataSource 와 Driver가 준비되어 있어야 합니다.
    • (없다면)사용하고자 하는 data 제공자의 driver를 찾아서 설치
    • ODBC 관리자를 이용해서, DataSource를 설정하고 생성
      - ODBC API를 이용한다면, 프로그램을 실행하는 시점에 DataSource를 생성할 수도 있습니다.

      예) SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Excel Files (*.xls)",
                        "DSN=New Excel Data Source\0"
                        "Description=New Excel Data Source\0"
                        "FileType=Excel\0"
                        "DataDirectory=C:\\EXCELDIR\0"
                        "MaxScanRows=20\0");

  2. 접속을 위한 Connection String 설정
    • ODBC 외의 다른 접속 방식에서도 비슷한 방식을 이용합니다.
      접속 시점에, 어디에 어떤 방식으로 접속 할지를 결정해야 하기 때문에,
      Connection String 이라는 문자열 Object에, 미리 정해진 형식으로 연결 정보를 넣고
      해당 정보를 전달해서 접속하는 방식입니다.

    • DataSource를 생성할 때 접속 정보를 지정해 두었다면,
      DataSource에 지정된 기본 값을 사용해서 접속할 수 있습니다.

    • 접속 정보를 직접 지정하려면,
      각 DataSource 에 맞는 connection String을 직접 지정해서 접속하거나,
      Connection String에  부족한 부분을 하나씩 물어보면서 만드는 방법 등이 있습니다.

    • Connection String 예
      "ODBC;DSN=mydb;UID=sa;PWD=Fred;"
      이런 식으로 구성되어 있으며, DataSource의 종류나,  ODBC Driver에 따라 필요한 항목이 달라지기도 합니다.

  3. Connection String이 설정되었다면, CDataBase class의 Open 이나 OpenEx 함수를 불러주면 연결을 시도합니다.

  4. 상황에 따라 연결이 실패하기도 하며, 그에 따른 사후 처리가 필요합니다.

  5. 연결이 성공했다면, 이제 원하는 data 작업을 수행할 수 있게 됩니다.

6. ODBC 방식의 장/단점

 

개발자의 입장에서 볼 때,

각각의 Data 제공자마다 자기만의 접속 방식을 제공한다면,

지원해야할 Data 제공자가 추가될 때마다, 접속 및 데이터 관리 부분을 새로 개발해야 하는 부담이 생깁니다.

게다가, 기존 코드와의 호환성 문제로 넘어가면 머리가 아파집니다.

 

ODBC Driver가 제공 된다면, 어느 Data제공자라도 동일한 방식으로 접속이 가능합니다.

즉, ODBC Driver가 제공되는 Data 제공자를 이용할 경우엔, 코드 재사용성이 높아집니다.

 

반대로 말하면, ODBC Driver 가 없거나, Driver가 있더라도 제대로 만들어지지 않았다면,

만들어놓은 코드가 확정성이 제한되서, 버려지는 코드가 될 수 있습니다.

 

ODBC 방식은 MicroSoft가 제안한 표준방식으로,

Database Vender가 자체 제공하는 방식에 비해선, DB 호환성이 떨어지는 편입니다.

즉, 확장성을 얻는 대신, 각각의 DB에 대해선 약간씩 손해보는 방식입니다.

 

MicroSoft에서 제안한 방식이지만,

Linux나 Mac OS을 위한 드라이버도 나와 있다고 합니다.

(사용해 본적이 없어서, 판단은 나중으로 미루겠습니다.)

 

7. 다음은 OLE-DB

 

ODBC는 MFC를 이용하는 반면

OLE-DB는 ATL를 기반으로 하고 있습니다.

 

OLE-DB는,

ODBC보다 더 확장성이 높아진 버전이라고 보면 될 것 같습니다.

ODBC와 달리, COM interface를 바탕으로하고 있어서, data가 저장된 형태에 제약을 덜 받는 것 같습니다.

 

다만,

구조상 ODBC 보다  Windows OS 의존도가 크고, 현재 다른 OS에서는 지원하지 않는 것으로 보입니다.

또한, Data 제공자에 대한 확장성을 얻은 만큼, 당연히 잃는 부분도 있습니다.

 

Tagged :
   

Comments : 0