티스토리 뷰

반응형

ODBC(Open Database Connectivity) ?


오늘은 DBMS와 통신을 할 때 흔히 사용하는 ODBC에 대해 정리해보겠다.


먼저 ODBC의 정의는 데이터베이스에 접근하기 위한 소프트웨어의 표준 규격이다.


이렇게 정의만 보고서도 "아~ 그러쿠나" 하는 천재가 아니니까 나는.

왜, 뭘 위해 이런 규격이 있는건지 알아보겠다.


1. 소켓 통신

응용프로그램은 DBMS와 데이터를 주고 받는 통신이란 것을 한다.


이 말은 응용 프로그램 상에서 실행 중인 프로세스와, DBMS에서 실행 중인 프로세스가 서로 통신을 한단 얘기다.


이렇게 프로세스와 프로세스 사이에 데이터를 주고 받는 방식은 여러가지가 있는데, 가장 기본적인 방식이 바로 "소켓 통신"이다.


소켓 통신 방법은 대략 이렇다.

소켓을 생성해서 연결을 한 다음, 어떤 형식으로 데이터를 주고 받을 것인지 '프로토콜'에 따라 주고 받는다. 끗.


그럼 이렇게 하면 되잖아?? 

그런데 문제는 DBMS사마다 프로토콜이 다르다.


그래서 불쌍한 개발자들은 프로그램을 각 DBMS사에 맞춰서 따로따로 개발해야 하지만..

100번 양보를 해서 따로따로 개발한다 치자.


그런데 더 큰 문제는 DBMS사에서 프로토콜을 공개하지 않는다는 점.


왜냐? 프로토콜도 중요한 기술력이니까.

DBMS사의 입장에서는 어떤 기술을 이용해야 통신이 빠른지 이런 것들이 다 기술력이니 프로토콜을 공개할 리 만무하다.


2.  Vender API를 통해 통신

그래서 우리의 DBMS사에서는 자기네 프로토콜을 공개하지 않으면서 응용프로그램과 통신하는 방법으로 자기네 DBMS와 통신할 수 있는 API를 제공한다.


덕분에 개발자 입장에서는 소켓 통신 개발을 할 필요가 없고,

MS-SQL DBMS랑 통신하려면 MS-SQL API, MySQL이랑 통신하려면 MySQL API를 이용하면 된다. 


이 API를 통해 호출하면 얘네들이 각각 자기네 DBMS랑 프로토콜로 통신한다. 


근데 얘도 똑같은 문제가 있는데, DBMS마다 API사용법이 다르다는 점이다.


결국엔 DBMS마다 각각 다른 프로그램을 개발해야 한다는 불편함은 여전히 존재한다.




3. ODBC API를 통해 통신

이런 젼차로 어린 개발자가 제 뜻을 시러펴디 못할까하여 MS사가 잔머리를 굴려 내놓은게 ODBC API 규격이다.


ODBC는 데이터베이스에 접근하기 위한 표준 규격으로, 모든 DBMS에 접근하는 방법을 통일시켰다.


이 규격에 따라서 DBMS는 자기네 Vender API에 접근하여 조종하는 "ODBC Driver"라는 것을 만들어 제공한다.


MySql ODBC Driver, Oracle ODBC Driver, MS-SQL ODBC Driver가 각각 다 있다 그 말.

(Excel ODBC Driver도 있음!)



ODBC !


 ODBC 규격        

MySQL ODBC Driver            

MySQL Vender API               

MySQL DBMS

Oracle ODBC Driver              

Oracle Vender API                

Oracle DBMS



특징 하나) DBMS 비종속적이다!


위에서 말했듯, ODBC는 "표준 규격"이다.


즉, ODBC는 모든 DBMS의 기능을 다룰 수 있어야 한다.


따라서 ODBC는 온갖 종류의 DBMS의 모든 기능들을 다 가지고 있다.


그래서 개발자는 ODBC API에 맞춰서 프로그램을 개발하고, 어떤 DBMS를 쓸지 결정만 하면된다. 

저 DBMS나 이 DBMS나 어차피 똑같은 코드를 사용하니까.


그.러.나 주의할 것은,

ODBC에 정의된 함수라고 해서 모든 DBMS에서 사용 가능한 것이 아니다.


즉, ODBC Driver라고 해서 ODBC API에 정의된 모든 기능이 있는 것이 아니다. 

ODBC Driver는 해당 DBMS가 지원 가능한 기능만 만들었기 때문이다.


그치만,

어쩌다가 MySQL에만 있는 기능을 썼는데 Oracle DBMS와 통신해야 한다면 그 부분만 조건문으로 처리해서  다른 방향으로 호출하면 될 것이다.

이전처럼 완전히 따로 작성하는 것보다 간단하다.

고객사 입장에서도 DBMS 선택에 있어서 이전보다 자유로울 수 있다. 

Oracle사를 썼다가 다른 DBMS로 갈아타기가 이전보다 수월해졌다는 얘기, 그들의 갑질에서 벗어날 수 있다는 말씀.




특징 둘) 속도가 느리다.


ODBC Driver를 이용하면 Vender API를 직접 사용하는것보다 느리다.


그러나 충분히 DBMS 비종속적이라는 것만으로도 큰 이점이 있다.



반응형
댓글
댓글쓰기 폼