ODBC는 아마도.. Open Data Base Capability 의 약자...로?

윈도우 상에서 돌아가는 프로그램들이 DB프로그램에 종속적이지 않도록 DB와 프로그램 사이에서 인터페이스를 해주는 하나의 계층정도의 기능을 한다.

 

이 ODBC를 통해서 개발자는 동일한 방식으로 코딩을 해도, 변화하는 여러 DBMS에 따라 소스코드를 변경할 필요가 없어지게 되었다. 즉, 나는 ODBC계층에 명령을 내리고 ODBC는 각 DBMS 프로그램에 따라 그 명령을 해석에서 DBMS에 적합한 명령을 내려준다.

 

다시 말해, ODBC라는 하인에게 "가서 SELECT * FROM table 하고 와라" 라고 시키면 ODBC는 DBMS에게 가서 각 DBMS가 알아 먹을 수 있는 언어로 "주인님이 이거 하라는데요" 라고 말하는 구조다.

 

어찌 되었든 간에 postgresql또한 이런 ODBC계층의 업무를 수행할 드라이버를 제공하는데 이름이 psqlODBC이다. ODBC의 실체는 dll파일로 이 dll 파일에 들어 있는 바이너리 코드가 사용자의 명령을 해석하여 postgresql서버에 명령을 전송한다.

 

이 드라이버는 msi파일로 제공되어 그냥 더블클릭만 하면 드라이버 설치가 되고, 심지어 뭐 설정할 것도 없다. 멍하니 Next만 누르다 보면 언제깔았는지도 모를 이상한 프로그램들이 깔리는 다른 로그램과 달리 딸로 깔리는 것도 없어 Next만 눌러도 된다.

 

psqlOBDC는 아래 링크에서 다운 받을 수 있다.

http://www.postgresql.org/ftp/odbc/

 

현재 2014년 10월 버전까지 나왔는데, 그냥 최신버전을 받아 설치하면 된다.

 

참고로 프로그램 작성시 32비트로 코딩 했는데, 64비트 OBDC만 설치 되어 있다면 에러가 발생하니 주의하자. 64비트 ODBC만 설치 되긴 하던데 이 문제를 어떻게 해결할지는 또 열심히 찾아서 포스트 해야지...

 

OBDC 사용방법

 

OBDC를 사용함에 있어서 일단 프로그래밍 언어는 C#을 기준으로 삼겠다. 별 이유 없다. C#이 C++보다 프로그래밍을 많이 해봐서 그런지 좀더 편한것 같다. 그런데 뭐 C++로 해도 뭐 별것 없다. 필요한 헤더 포함시키고, 라이브러리 링크시키고 비슷한 함수 가지고 와서 쓰는거니 별 차이 없다.

 

뭐 일단, OBDC를 사용하는 방법은 크게 2가지 이다.

 

1번째는 DSN (Data Source Name). 즉, 데이터 원본이름을 설정하여 사용하는 방법

2번째는 DSN을 이용하지 않고 코드상에서 직접 postgresql에 접근하는 방법

 

1번째 방법은 윈도우 상에서 DSN을 설정해 주어야 한다.

제어판 -> 관리도구 -> 데이터 원본 (ODBC)를 더블 클릭 해보면 아래와 같이 DSN을 설정 할 수 있는 대화상자가 나타난다.

 

 

ODBC 드라이버가 정상적으로 깔려있는 상태에서 추가 버튼을 누르면, 아래와 같이 현재 컴퓨터상에 깔려 있는 Postgresql의 ODBC드라이버가 보인다.

 

 

 

Postgresql DB설정할 때 ANSI로 했으면 ANSI를, UNICODE로 했으면 UNICODE를 선택하면 된다. 선택이 끝나면 해당 Postgresql DB에 접근하기 위한 설정값들을 입력해야 한다.

 

 

 

이것도 뭐.. 직관적이다. Data Source는 DSN을 분별하는 이름으로, 이걸 가지고 DSN을 코드상에서 구분한다. 자기가 쓰기 쉬운 이름으로 정하면 되고, Description은 이 DSN에 대한 설명, Database는 Postgresql에서 설정한 DB의 이름이다. Server는 Postgresql서버의 주소이고 User Name은 해당 DB에 접근 가능한 계정정보로 Password와 함께 써 넣으면 된다. 마지막으로 port는 DB생성할 때 사용하기로 한 포트 정보를 입력해 주면 된다.

 

 

 

나는 envisiontest_postgres라는 이름으로 DSN을 설정했는데, 이 DSN을 가지고 이제 코드 상에서 해당 DB를 향해서 어떤 명령을 내릴 수 있다.

 

 

그냥 ConnectionString을 "DSN=[DSN이름]"으로 해놓고 OdbcConnection 클래스의 객체를 만들 때 ConnectionString넣어 open만 해주면 미리 지정해 놓은 DSN의 DB로 접속이 된다.

참 쉽죠잉?

 

이 ConnectionString은 Odbc가 여러 DBMS를 관리하기 위해 여러 옵션을 두어 설정 할 수 있는데, 이 DSN을 이용한 방법은 사용자가 윈도우 상에서 DSN을 설정하고 만들어 두면 단순히 DSN이름만 가지고 어떤 DB에 접근 할 수 있다는 장점이 있지만, DSN에 설정해 놓은 DB에만 접근 할 수 있다는 단점이 있어 여러 DB에 접근해야 하는 상황이라면, 해당 DB에 대한 DSN을 일일히 구성 해 두어야 한다는 단점 또한 가지고 있다.

 

그럼 두번째 방법을 알아볼까?

 

DSN을 이용하지 않고서도 어떤 DB에 접근 할 수 있는 방법이 있다.

아까도 말했는데 바로 ConnectionString을 이용하는 방법이다.

 

임의의 DB에 접근해야 하므로 각 DBMS 프로그램마다 약간씩의 Connection 스트링에 차이가 있으나, 일단은 Postgresql만 살펴보자면..

 

"Driver={ODBC드라이버이름};

 Server=Postgresql 서버주소;

 Port=DB포트;

 Database=DB이름;

 UID=DB유저 ID;

 PWD=DB유저 PW";

 

먼저 Driver는 ODBC 드라이버 이름을 말한다. 아까 DSN설정할 때 봤던 ODBC 드라이버의 이름을 그대로 넣어주면 되겠다. 요번경우에는 PostgreSQL Unicode (x64)

그리고 아래 항목들은 모두 직관적인 파라미터 이니까 그냥 보면 되겠다.

 

이렇게 ConnectionString을 바꾸면, 그 이후 과정은 모두 동일하다. OdbcConnection을 이 ConnectionString을 인자로 생성하여 open하고 query 날리고..

 

복잡한 sql 쿼리 구문은 앞으로 차차 공부하여 사용하면 되고, 일단은 DB접속과 간단한 소스코드상의 사용은 이것으로 마무리 하고자 한다. 최종 목표로 pgAdmin III와 같은 매니지먼트 프로그램을 직접 작성해 보면 재미있을 것 같다.

Posted by 굿쟌
,