본문 바로가기
DataBase/E.T.C.

[DB] ODBC라는 것은 무엇인가.

by 오늘은강박사갈거야~~ 2022. 2. 12.
반응형

- 이 글은 제가 공부를 하며, 이해한 것을 바탕으로 작성하는 글입니다.

- 그렇기에 틀리거나 잘못된 부분이 있을 수 있습니다.

- 글의 오류를 발견하시면, 댓글로 말씀해 주시면 정말 감사하겠습니다.

 


이번 프로젝트에서는 파이썬으로 여러 DB, DW에 접근하여 필요한 데이터를 가져오는 경우가 많이 있었다.

어려웠고, 이해가 잘 되지 않았던 부분은 DB에 접속하는 방법이었다. PYMYSQL, PYMSSQL 라이브러리 같은 경우는 쉽게 사용할 수 있었지만, PYODBC 라이브러리의 사용은 쉽지 않았다.

우선 우분투에 설치하는 것부터가 난관이었고, 간단히 테스트를 위한 로컬(윈도우)에서의 사용도 쉽지 않았다. 이 것들에 관련하여, 검색하며 자료를 찾는 중, ODBC와 DSN과 같은 용어들이 많이 나와, 개념을 정리해 두려고 한다.

 

이번 글에서는 ODBC에 대하여 정리해보려고 한다.

 

 

 

ODBC는 Open Database Connectivity의 약자로, DB에 접근하기 위한 API라고 보면 된다.

정의는 아래와 같다.

마이크로소프트가 만든, 데이터베이스에 접근하기 위한 소프트웨어의 표준 규격으로, 각 데이터베이스의 차이는 ODBC 드라이버에 흡수되기 때문에 사용자는 ODBC에 정해진 순서에 따라서 프로그램을 쓰면 접속처의 데이터베이스가 어떠한 데이터베이스 관리 시스템에 관리되고 있는지 의식할 필요 없이 접근할 수 있다.

즉 어떠한 종류의 DB건, 접속을 할 수 있는 표준화된 규격으로 보면 된다.

이제, 내가 어떤 루트로 디비에 접속하는지 아래 그림을 통해 확인해 보자.

 

출처: Using the Oracle ODBC Driver

.................

 

어떠한 방식으로 접근하는지 전혀 모르겠다.. 조금 더 자세하게 들어가 보자.

- DB Driver :일반 인터페이스를 특정 데이터베이스 공급업체 구현에 연결하는 어댑터 정도로 생각하자.

 

컴퓨터 내부에서는 서로서로 데이터를 주고받는 경우가 존재하는데, 데이터를 주고받을 때에는 규칙을 정하고 주고받는다. (이러한 방법은 소켓 통신이라고 한다.)

 

소켓 통신 - 프로세스와 프로세스 간의 데이터를 주고받는 방식으로, 서로 정해진 규격(프로토콜)에 따라 주고받음.

 

이러한 맥락에서 살펴보면, 내가 DB에 접근해서, 데이터를 가져오는 행위는 규격에 맞게, 주고받으면 될 것이다.

그런데 세상에 있는 여러 DB들은 모두 이 규격이 다르다는 것이다.

 

각 DB 회사들은 그들만의 규격을 가진 API를 가지고 있기에, 내가 사용하려는 DB에 맞는 규격을 찾아 사용했었어야만 했었다. (쉽게 말해, MYSQL DB를 사용하려면, MYSQL에서 만든 DB 접근 API를 사용해야만 한다.)

 

그런데, 이런 상이한 규격을 하나로 통일하고 자는 생각이 나오는데, 마이크로소프트는 다음과 같은 방법을 고안하였다. 쉽게 말해 내가 모든 DB를 받아들여줄게. ODBC라는 규격을 만들 테니 모두들 알아서 따라와! 였다. 이것이 바로 ODBC API이다.

 

즉, 어떠한 DB 규격이든 간에 ODBC API에 맞추라는 것이었다. 그렇게 하여, 우리가 알고 있는 많은 DB들( MYSQL, MSSQL,...) 은 이 ODBC 규격에 따라, 자신들의 DB로의 통신 규격인 DATABASE API를 컨트롤하는 DRIVER를 만들어내게 되는데, 이를 ODBC Driver라고 한다. 예를 들어, MYSQL ODBC Driver, MSSQL ODBC Driver 등이 있다.

 

그렇다면 이 수많은 DB 회사들이 만들어 낸 Driver들을 선택하고, 관리하는 모든 기능을 하는 것을 Driver Manager라고 한다. (자세한 내용은 아래 서술)

 

Driver Manager: 드라이버 관리자는 응용 프로그램과 드라이버 간의 통신을 관리하는 라이브러리입니다. 드라이버 관리자는 주로 응용 프로그램 작성자의 편의로 존재하며 모든 응용 프로그램에서 공통되는 여러 가지 문제를 해결합니다. 여기에는 데이터 원본 이름에 따라 로드할 드라이버를 결정하고, 드라이버를 로드 및 언로드 하고, 드라이버의 함수를 호출하는 것이 포함됩니다.

 

자 다시 그림을 보자.

 

 

ODBC Application이라는 프로그램은 위에서 말한 ‘나’라고 생각을 했을 때, 내가 MS-SQL DB에 접근을 ODBC 규격에 맞게 요청하면, 여러 회사의 Driver를 관리하고 있는, Driver Manager를 거쳐 MS-SQL ODBC Driver로 내 요청이 전달되고, 이 ODBC Driver들은 기존의 자신들이 사용하는 DB API를 거쳐, DB에 접근하게 되는 것이다.

 

 

Reference.

-What is Open Database Connectivity (ODBC)? - Definition from WhatIs.com (techtarget.com)

-Using the Oracle ODBC Driver

-Open Database Connectivity - Wikipedia

반응형

댓글