본문 바로가기
IT

unixODBC: 오픈 소스의 ODBC 라이브러리와 Ubuntu에 설치하고 PostgreSQL 예제 확인하기

by eddy's warehouse 2024. 2. 6.

unixODBC는 Unix, Linux 및 macOS와 같은 POSIX 호환 시스템에서 사용할 수 있는 오픈 소스 Open Database Connectivity (ODBC) 라이브러리입니다. ODBC는 데이터베이스에 접근하기 위한 표준 API로, 다양한 데이터베이스 시스템 간의 상호 운용성을 제공합니다.

unixODBC: 오픈 소스의 ODBC 라이브러리와 Ubuntu에 설치하고 PostgreSQL 예제 확인하기 썸네일

UnixODBC란?

UnixODBC는 ODBC (Open DataBase Connectivity) 의 약자로, 데이터베이스 미들웨어를 연결하기 위한 공개형 응용 프로그램 인터페이스입니다. 이는 데이터베이스 애플리케이션과의 연결을 돕는 공개형 인터페이스로, Microsoft에서 개발되었습니다. ODBC는 다양한 데이터베이스 관리 시스템(DBMS)에 쉽게 연동할 수 있도록 도와주는 표준 API를 제공합니다.

UnixODBC는 이 ODBC를 유닉스 계열 운영체제에서 사용할 수 있도록 하는 오픈 소스 프로젝트입니다. 이 프로젝트의 목적은 Microsoft ODBC를 비 Windows 운영체제에서도 사용할 수 있도록 하는 것이며, GNU 일반 공중 사용 허가서(LGPL) 하에 제공됩니다. UnixODBC를 사용하면 리눅스, macOS, IBM OS/2 등 다양한 유닉스 계열 운영 체제에서 ODBC API를 구현할 수 있습니다.

UnixODBC를 사용하는 주된 이유는 개발자가 각각의 DBMS에 대해 별도의 클라이언트 클래스나 모듈을 개발하지 않고도, 표준화된 방식으로 다양한 DBMS에 접근할 수 있게 해주기 때문입니다. 이로 인해 개발 과정이 단순화되고, 다양한 데이터베이스에 대한 호환성이 향상됩니다.

UnixODBC의 주요기능과 장점

unixODBC의 공식 사이트는 https://www.unixodbc.org 입니다. 해당 사이트에서 소스나 패키지를 다운받으실 수 있습니다.

unixODBC의 주요 기능

  • 데이터베이스 독립성: unixODBC는 애플리케이션과 데이터베이스 간의 중개자 역할을 하여, 애플리케이션 개발자가 특정 데이터베이스에 종속되지 않고 다양한 데이터베이스에 접근할 수 있게 합니다.
  • 드라이버 관리: unixODBC는 ODBC 드라이버를 관리하고, 애플리케이션에 데이터베이스 연결을 제공합니다. 이를 통해 애플리케이션은 데이터베이스에 직접 연결하는 대신 ODBC API를 통해 데이터베이스에 접근할 수 있습니다.
  • GUI 관리 도구: unixODBC는 ODBC 드라이버와 데이터 소스를 관리하기 위한 그래픽 사용자 인터페이스(GUI) 도구를 제공합니다.

unixODBC의 장점

  • 표준화: ODBC는 SQL 데이터 액세스를 위한 표준 인터페이스를 제공하므로, unixODBC를 사용하면 표준 SQL 쿼리를 사용하여 다양한 데이터베이스에 접근할 수 있습니다.
  • 호환성: unixODBC는 다양한 데이터베이스 시스템과 호환됩니다. 이는 MySQL, PostgreSQL, SQLite, Oracle 등의 대표적인 SQL 데이터베이스뿐만 아니라, Microsoft Access, Excel 등의 파일 기반 데이터 소스와도 호환됩니다.
  • 오픈 소스: unixODBC는 오픈 소스 프로젝트로, 누구나 소스 코드를 자유롭게 사용, 수정, 배포할 수 있습니다. 이는 unixODBC를 사용하는 개발자가 필요에 따라 라이브러리를 커스터마이즈할 수 있음을 의미합니다.

unixODBC는 데이터베이스 액세스를 위한 강력하고 유연한 도구로, 다양한 데이터베이스 시스템과의 상호 운용성을 제공합니다. 이를 통해 개발자는 데이터베이스에 종속되지 않고, 표준 SQL 쿼리를 사용하여 다양한 데이터베이스에 접근할 수 있습니다.

Ubuntu Linux에 UnixODBC 설치

저는 우분투 22.04에 unixODBC를 설치하고 altibase DBMS를 연동하려고 합니다. lsb_release -a 명령을 수행하면 우분투 버전을 볼 수 있습니다.

% lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy


이제 터미널에서 다음 명령어를 입력하여 UnixODBC 모듈을 설치합니다. 우분투에서는 apt로 손쉽게 설치가 가능합니다.

sudo apt install unixodbc unixodbc-dev

 

unixODBC 설정

unixODBC에는 ini 파일이 있습니다. 설정을 위해서 ini 파일을 먼저 알아보겠습니다.

ini 파일이란?

ODBC는 Windows 3.0에 처음 등장했습니다. 당시 Windows는 .ini 파일을 사용하여 구성 정보를 포함했습니다. 이러한 파일은 다음과 같은 레이아웃을 포함하는 텍스트 파일입니다.

[section1]
항목1 = 값
entry2 = 값

[section2]
entry1 = 값
entry2 = 값
...


Windows NT의 등장으로 이러한 ini 파일은 레지스트리로 대체되었지만 ODBC에서 이 파일에 액세스하는 API는 동일하게 유지되었습니다. Windows에는 응용 프로그램과 드라이버가 이러한 파일을 쿼리하고 수정할 수 있도록 하는 두 가지 함수, 즉 SQLGetPrivateProfileString 및 SQLPutPrivateProfileString이 odbcinst.dll에 있습니다.
Windows 이외의 플랫폼에서 ODBC 환경을 재현하기 위한 unixODBC의 목표의 일환으로, ini 파일과 libodbcinst는 동일한 형식과 기능을 제공합니다.

 

시스템 설정과 사용자 설정

ODBC는 두 가지 유형의 ini 파일을 구분합니다. 시스템 ini 파일은 모든 사용자가 액세스할 수 있지만 수정할 수 없도록 설계되었으며, 사용자 파일은 특정 사용자에게 비공개이며 해당 사용자가 수정할 수 있습니다.
시스템 파일은 odbcinst.ini 및 odbc.ini(선행 점 없음)이고, 사용자 파일은 각 사용자의 홈 디렉터리에 있는 ~/.odbc.ini(선행 점 있음)입니다.

시스템 파일인 odbcinst.ini에는 모든 사용자가 사용할 수 있는 ODBC 드라이버에 대한 정보가 포함되어 있고, odbc.ini 파일에는 모든 사용자가 사용할 수 있는 DSN에 대한 정보가 포함되어 있습니다. 이러한 "시스템 DSN"은 웹 서버와 같이 실제 사용자로 실행되지 않으므로 .odbc.ini 파일을 포함할 홈 디렉터리가 없는 애플리케이션에 유용합니다.

이에 대한 좋은 예로 ODBC를 지원하는 Apache와 PHP를 들 수 있습니다. http 서버가 처음 시작되면 SQLAllocEnv를 루트로 호출한 다음 나중에 지정된 사용자(제 경우에는 아무도 없음)로 변경하고 SQLConnect를 호출합니다. DSN이 시스템 DSN이 아닌 경우 실패합니다.

 

설정 파일에 설정할 것들

이제 ini 파일과 ODBC에 대해 알았으니 이제 실제로 사용되는 부분에 대해 알아보겠습니다. 파일에 무엇을 넣는지 알아보겠습니다.

odbcinst.ini

여기에는 드라이버의 이름을 제공하는 섹션 제목이 포함되어 있습니다. 아래 예제에서는 PostgreSQL이 Postgres DB의 드라이버를 나타냅니다. 다음 줄에는 설명과 몇 비트 드라이버인지를 기록해 놓았습니다. 실제로 이 값은 단순한 주석의 역할 입니다. 하지만, 비트에 따라서 라이브러리가 달라지므로 사용자가 알아보기 쉽게 잘 작성해 놓는 것이 좋습니다.

 

Driver는 ODBC 드라이버 라이브러리의 경로를 가리킵니다. 이 항목은 해당 DSN에 대해 SQLConnect 또는 SQLDriverConnect가 호출될 때 드라이버 관리자가 동적으로 로드하는 라이브러리입니다. 이 항목이 잘못된 위치를 가리키면 DSN이 작동하지 않습니다. dlopen()이 실패하면 DSN이 작동하지 않습니다. 파일 사용량 항목은 odbcinst 프로그램에 의해 추가되므로 텍스트 편집기를 사용하는 경우 직접 추가해야 합니다.

 

[PostgreSQL]
Description     = PostgreSQL driver for Linux & Win32
Driver          = /usr/local/lib/libodbcpsql.so
FileUsage       = 1

 

[.]odbc.ini

odbc.ini 파일의 내용은 조금 더 복잡하지만, odbcinst.ini 항목과 동일한 형식을 따릅니다. 각 드라이버마다 다른 항목을 요구하기 때문에 복잡합니다. 배포와 함께 제공된 모든 드라이버에 대한 항목은 아래에 참조용으로 포함되어 있습니다. 이러한 항목은 odbcinst 또는 텍스트 편집기를 사용하여 동일한 방식으로 추가할 수 있습니다.

odbc.ini 파일의 내용은 각 드라이버 제공 벤더에 의해서 추가되거나 변경될 수 있습니다.

여기에서 중요한 것은 odbcinst.ini에 있는 섹션 이름이 Driver 항목에 기술되어야 한다는 점입니다.

위의 PostgreSQL의 드라이버와 함께 설정한 예제 항목은 다음과 같습니다.

[PostgreSQL-DSN]
Description         = Test to Postgres
Driver              = PostgreSQL
Trace               = Yes
TraceFile           = sql.log
Database            = nick
Servername          = localhost
UserName            =
Password            =
Port                = 5432
Protocol            = 6.4
ReadOnly            = No
RowVersioning       = No
ShowSystemTables    = No
ShowOidColumn       = No
FakeOidIndex        = No
ConnSettings        =

 

Driver 라인은 odbcinst.ini 파일의 [섹션] 항목과 일치시키는 데 사용되며, odbcinst 파일의 Driver 라인은 드라이버 라이브러리의 경로를 찾는 데 사용됩니다. 이 경로가 로드되고 연결이 설정됩니다.

기타 odbc.ini 예제

PostgreSQL, MiniSQL, MySQL에 대해 odbc.ini를 설정하는 예시는 아래와 같습니다. 설정하는데 참고하시기 바랍니다.

PostgreSQL
[Postgres]
Description         = Test to Postgres
Driver              = PostgreSQL
Trace               = Yes
TraceFile           = sql.log
Database            = nick
Servername          = localhost
UserName            =
Password            =
Port                = 5432
Protocol            = 6.4
ReadOnly            = No
RowVersioning       = No
ShowSystemTables    = No
ShowOidColumn       = No
FakeOidIndex        = No
ConnSettings        =
Mini SQL
[Mini SQL]
Description     = MiniSQL
Driver          = MiniSQL
Trace           = No
TraceFile       =
Host            = localhost
Database        =
ConfigFile      =
MySQL
[MySQL-test]
Description     = MySQL test database
Trace       = Off
TraceFile   = stderr
Driver      = MySQL
SERVER      = 192.168.1.26
USER        = pharvey
PASSWORD    =
PORT        = 3306
DATABASE    = test

 

오늘은 리눅스 계열 OS에서 DBMS에 접근할 때 사용할 수 있는 오픈소스 라이브러리인 unixODBC를 알아보았습니다. 윈도우에서 시작해서 unix까지 동일하게 ODBC 인터페이스를 사용할 수 있도록 만들어진 오픈소스이므로 활용도가 높을 것 같습니다.

예를 들어 저의 경우 pyodbc를 통해 dbms들을 접근하는 프로그램을 사용하는데 dbms을 교체하면서 연동하기에는 unixODBC 만큼 좋은 것은 없는 것 같습니다.

facebook twitter kakaoTalk kakaostory naver band shareLink