이 강좌는 윈도우 2000 을 기준으로 작성하고 있기에... 그리고, 초급을 대상으로 하기는 하지만... 조금은 중급적인 부분도 사이사이 다루고 있기에... 조금은 내용이 깊어질 것도 같습니다... ^^
예를 들면 이번 강좌가 그러한 부분중에 하나이지요.. 조금은 중급적인 요소가 없지않은....
해서 이번 강좌는 OLE DB와 UDA(Universal Data Access) 에 대한 이야기부터 한번 해볼까 합니다.. 또한,이 부분을 좀 더 구체적으로 설명하기 위해서2001년 3월말에 나올 taeyo's Advanced ASP 책의 일부를 편집하여 사용할 것이기도 합니다. 히힛... (은근한 책 광고임다... ^-^) 국내 ADO, MTS, COM+의 대가인 최현진 사장(인브레인)님의 감수를 거친 부분이라.... 내용면에서도 조금은 흡족하지 않을까 하는 기대를 가져봅니다... ^^ 기대기대...
우리는 저번 강좌에서 Ms Access와 MS SQL 서버의 경우에 데이터베이스를 ODBC 세팅하는 부분까지 이야기해 보았습니다... 그렇다면 복습의 차원에서 여쭤보겠습니다... 왜??? 무엇땜시.. 우리는 ODBC를 세팅했던 것이었나요? 왜? 그렇게 하지 않으면 안되는 것이었던 것일까아아아아요....~~~~~
그 이유는... 데이터베이스로의 접근 때문이었습니다. 예전의 데이터베이스들은 폐쇄적이었기에.. 데이터베이스 자체에서 제공하는 클라이언트가 없다면 데이터베이스 서버로 접근할 수가 없었습니다.. 하지만, 그러다보니 서로 다른 데이터베이스간에 데이터를 공유하기에 어려움이 있었지요.. 해서, 이러한 폐쇄적인 것들을 개방적으로 오픈할 방법을 생각해 냈는데 그게 바로 ODBC 랍니다. Open Database Connectivity 라는 ODBC를 말이죠....
해서 우리는 웹쪽의 ASP나 Win32 어플리케이션들에서 특정 데이터베이스를 접근하기 위해서.. 그 연결통로라 볼 수 있는 ODBC 를 잡아야 했던 것입니다요... 그리고나면, 우리는 소스중에서 그 연결문자인 DSN 을 이용해서 해당 데이터베이스로 접근이 가능하게 되거든요.... ^^ 그래서 이전 강좌에서 열심히 ODBC를 잡았던 것입니다. ASP 에서 데이터베이스와 연동하기 위해서도 역시나 ODBC 의 연결이 필요하니까요
하지만, 그사이 세상은 놀랄만큼 바뀌고, 발전했지요. 그러니, 그 사이에 ODBC 를 능가할만한 것이 또한 등장할만도 하다는 느낌이 사정없이 들죠? 그렇습니다. 마이크로소프트는 그 사이에 이 방법을 구체하시켜서 ODBC 보다 뛰어난 성능을 가진 OLE DB 라는 것을 등장시켰습니다. 오옷... 대단한 MS (아부성은 아닙니다.)
그리고, MS는 ASP나 Win32 에서 ODBC나 OLEDB와 같은 연결통로를 통해서 데이터를 넣고, 조회하는 등의 작업을 하기 위해서 데이터를 핸들링 할 수 있는 기술을 또한 발전시켜 왔는데.. 그것은 바로 ADO 라는 것입니다. 이미 게시판을 어느정도 만들어 보신 분은 이미 만나보셨겠지만 ADODB.Connection, ADODB.RecordSet, ADODB.Command 등이 그것이랍니다.
다시 설명드리자면.. OLE DB는 RDBMS 에 접근할 수 있는 통로를 제공하는 역할을 담당하는 기술이구요..
(게다가, OLE DB 는 RDBMS 외에 비 관계형 데이터들에게도 접근이 가능합니다.)
ADO는 사실상의 데이터를 처리하는 역할을 하는 담당하는 기술입니다. OLE DB. 이름은 어디선가 자주 들어본 것... 좀 더 알아봅시다.진정코 OLEDB 그것은과연 무엇일까요? 이것은 마이크로소프트의 UDA라는 전략을 구현하는 기술중의 하나입니다...
어라? 그럼 또 UDA는 뭐야? 뭐가 이리 복잡해... -.- 라고 하실만도 합니다. 저도 그랬으니까요.. 하지만, 알고보면 무지 간단한 전략입니다. (단순하게 생각하면요) 하지만, 실제 이 전략에 의해 구현되는 기능들은 가히 몸서리쳐질만 하지요.. (물론, 못 느끼시는 분도 있을 수 있고, "그게 뭐...대단해?" 하시는 분도 있을 수 있습니다)
그렇다면, 알아봅시다. UDA 라는 것.. 그리고 그를 이루는 근간이 되는 OLE DB를 말이죠
UDA 란? UDA는 Universal Data Access를 나타내는 말입니다.
이것은 광범위한 데이터들을 접근할 수 있도록 하는 마이크로소프트의 기술로 UDA 전략이라고도 표현하죠. UDA라는 말은 일종의 개념적이며, 기술 전략적인 이름일 뿐이고, 실제로 이를 구현하는 것은 ADO와 OLE DB 입니다.뒤집어 이야기하면, ADO와 OLE DB를 사용하여 광범위하게 위치한 데이터들을 처리하게 하는 기술을 UDA라고 표현할 수 있을 것입니다.
그렇다?? 그렇다면 OLEDB는 무엇일까요?
여러분들도 어디선가 들어는 본 듯한 말일 것이기는 합니다. 하지만, 여러분들은 OLEDB 라는 단어보다는 아마도 ODBC에 더욱 친숙함을 느끼고 있을 겁니다. 지금까지 대부분의 프로젝트를 ODBC를 통해서 구현해 왔을터이니 말이져.
그렇다면, 여러분이 프로젝트에서 사용한 ODBC의 역할은 무엇이었을까요?
다시금 이야기하자면 이기종의 데이터베이스를 접근할 수 있게 해주는 표준적인 방법으로 였을 겁니다. 거의 모든 관계형 데이터베이스를 접근할 수 있게 해 주는 것이 ODBC였으니 말이죠. 저의 경우도 인포믹스와 오라클에 대해서 ODBC를 이용하여 프로젝트를 수행해 본 경험이 있습니다. 인포믹스 때는 ODBC 가 안 잡혀서 죽는줄 알았습니다. .. 우찌우찌 성공하기는 했지만요... -.- 어쨋든 ODBC는 실로 멋진 기술임에 틀림없슴다.
그러나, OLEDB의 화려한 등장으로 인해 ODBC의 세상은 조금 흔들리고 있습니다. OLE DB는 ODBC보다 한층 이상을 뛰어넘는 모습을 보여주고 있으니 말입니다.
놀라지나 마세요.... OLEDB는 말입니다. 이 녀석을 사용하면 말이죠. 그게 말입니다.... 두 - - 둥.....
이기종의 관계형 데이터베이스뿐 아니라, 비 관계형 데이터들에게도 접근할 수 있습니다.... 즉, SQL서버나, 오라클과 같은 RDBMS 뿐 아니라.. 메일폴더, 각각의 메일자체, 디렉토리, 웹 사이트등등.. 그러한, 비 관계형인 계층 구조적인 데이터들에게도 접근할 수 있게 한다는 것이지요.... 저의 경우 OLE DB란 단어를 처음 만난 것은 3~4년전 이었던 것으로 기억되는데요... 사실 그 때도 OLEDB를 통해서 관계형 데이터베이스 이외의 데이터들에게까지 접근할 수 있다는 이야기는 들었었지만, 어떻게 그것이 가능한지에 대해서는 그다지 많은 정보를 얻을 수 없었었던 기억이 있슴다. 하지만, 이제 ADO 2.5에 들어서며 이를 가능하게 하는 편리한 방법들이 등장하였다는 것이죠. 놀라시지 않나요? 전 무지하게 놀랬는데... 흠...
그렇다면, 놀래고 싶은 분들은 조금 놀래보시구요...
(진짜로 안 놀래다니.. 흠.. 일부러라도 놀라는 척 해주지..... -.-)
어쨋든 우리는 이제 OLE DB를 통해서데이터베이스외의 자료들에 대한 접근도 가능하게 된다는 것은 기억해 두시기 바랍니다. 물론, 앞으로도 대부분의 경우는 데이터베이스로의 접근을 위해 사용되겠지만, 기회는 열려져 있다는 것이죠. (익스체인지 서버관련 솔루션을 개발할 때는 100% 필수입니다. 이거..)
사실, 현재 2001년에 태오에게 주어진 임무가 바로 그러한 작업인데요.... Exchange 2000 Server 를 이용해서 웹 메일 시스템과 그룹웨어, 전자결재, KMS 를 구현하는 작업입니다. 그러다보니 데이터베이스가 아닌 메일 시스템에 접근할 방법이 필요하구요.. 저는 이를 OLEDB와 ADO2.5를 통해서 가능하게 하고 있답니다... ^^ 물론, MSDN을 참고해서요
자..... 다음의 그림은 UDA 아키텍쳐(Architecture) 입니다.
그림에서 볼 수 있는 것처럼 UDA 기술은 ADO와 OLE DB를 사용하여 SQL 데이터뿐 아니라 비 SQL적인 데이터들(메일, 텍스트, 디렉토리서비스등)에도 접근을 가능하게 하구요. 데이터를 처리할 수 있게 합니다. 또한, OLE DB를 통해서 기존의 ODBC를 통한 데이터의 연결도 이용할 수 있게 되어 있답니다. 이처럼 OLE DB를 통한 접근은 기존의 ODBC가 부족했던 점을 완전히 메꾸고 있구요... ODBC 때에 비해서 접근 속도도 많은 향상을 가져왔습니다. ..
그렇다고, 이 OLEDB 기술이 ODBC를 없애버리고 세상을 바꾸자는 의도를 가지고 있는 것은 아닙니다. 기존의 기술을 더욱 발전시키자는 데에 목적을 두고 있는 것이 OLEDB 기술인 것이랍니다. 유식하게 말하면, 온고지신(溫故知新)의 개념인 것이져.. 온고지신... 태오 한문도 쫌 함다...
잠깐 !! 잘모르겠는디요. ADO, ODBC, OLEDB 뭐가 무엇을 하는것이죠? 그렇습니다. 분명 혼란함을 느끼시는 분들이있을 것입니다. 우리에게는 동시통역기가 하나있다고 가정해 봅시다요. 기본적으로 미국, 러시아, 일본의 칩은 제공된다고 가정합시다. 이 동시통역기가 바로 ADO라고 볼 수 있으며, 각 나라용 칩은 ODBC 라고 볼 수 있습니다. 그런 어느날, 기존의 통역기능을 좀 더 효과적으로 사용할 수 있으면서도, 주의할 것은 이렇게 원본 데이터를 우리가 사용할 수 있게 제공해주는 역할을 하는 것이 어때요? 쏙쏙 들어오죠??? |
이제 여러분은 OLE DB 라는 것을 사용하면 뭔가 상당한 이익이 있을 것이라는 막연한 기대를 가지게 되었을 것입니다. 하지만, 그것은 막연한 기대로 끝나지만은 않을 겁니다... 실제로 상당한 성능의 향상을 가져다 주니까요... 그렇다면, OLE DB 라는 것은 어떻게 사용할 수 있을까를 여러분이 이제 충분히 궁금해 하실 시간이 되었네요..
ODBC 를 잡은 것을 여러분이 ASP 코드에서 사용하기 위해선, 이미 해보신 분들은 알겠지만.. 다음과 같은 코드를 통해서 가능합니다... ADO의 Connection 개체를 통해서 말이지요.
Dim adoCn
Set adoCn = Server.CreateObject("ADODB.Connection")
adoCn.Open "DSN=MyDB" 'Access일 경우
(혹은adoCn.Open"DSN=MySQLDB;uid=xx;pwd=xx" 'SQL 서버일 경우 )
소스에서 사용한 DSN은 이전 강좌에서 여러분이 세팅한 ODBC의 DSN 값을 사용해서 이루어집니다. ODBC를 사용할 경우는 위와 같은 방법으로 접근해야 하지요.. 하지만, OLE DB를 사용할 경우는 ODBC와 같은 세팅은 필요치 않습니다.. 코드에서 단지 연결문자열만으로 아주 쉽게 사용할 수가 있게 되지요... 즉, OLE DB 를 사용하게 된다면 위와 같은 코드는 다음과 같은 코드로 바꾸어 사용할 수 있게 됩니다.
Dim strConnect, adoCn
Set adoCn = Server.CreateObject("ADODB.Connection")
str = "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=pubs;user ID=xx;password=xx;"
adoCn.Open strConnect
중요한 부분은 소스중에서 커넥션 객체의 Open 메소드에 사용하는 연결문자열인데요.. 소스중에 Provider=SQLOLEDB;Data Source=(local);Initial Catalog=pubs;user ID=xx;password=xx; 라고 되어져 있는부분이 그것입니다.
즉, OLE DB를 사용하기 위해서는 이 연결문자열만 잘 구성하면 그것으로 OK 라는 이야기가 되지요. 그렇다면, 이제 여러분이 외워야 할것은 이 연결 문자열임을 알 수 있습니다. 그렇다면, 이 연결문자열이 의미하는 것을 이제조목 조목 알아봅시다... 문자열 내에서 각각의 정보는 세미콜론인 ; 로써 구분이 되는데요...
첫번째 정보는 프로바이더 정보입니다.
Provider가 바로 그것이지요.... 만일, SQL 서버를 사용한다면 SQLOLEDB 라는 문자열을 사용해야지만 SQL 서버용 OLEDB를 이용할 수 있게됩니다. 만일, ORACLE를 사용하려 한다면 MSDAORA 라는 OLEDB 프로바이더를 지정해야 하지요... ^^ 이러한 각각의 OLE DB 프로바이더 이름이나, OLE DB 프로바이더는 각각의 데이터베이스 업체에서 제공합니다. 이것은 MS 에서 제공하는 것이 아닙니다. 즉, 여러분의 회사가 Informix 를 사용하고 있는데... OLE DB 를 사용하고 싶어졌다면 인포믹스 측에 연락해서 OLE DB 용 프로바이더를 제공해 달라고 부탁하시면 됩니다.
현재즈음이면 대부분의 데이터베이스 업체가 OLE DB 공급자를 제공해 주고 있을 겁니다. 아마도..말이죠. 그리고, 그것을 받아서 서버에 설치하시면 해당 데이터베이스 서버용 OLE DB를 사용할 수가 있게 되는 것이지요. 기본적으로 Windows 2000 에서 제공하는 것은 MS의 제품관련 OLE DB 들이라는 것을 기억하세요... ^^
여기서는 SQL 서버에 접속하려 하기에 Provider=SQLOLEDB 라는 것을 지정하였던 것이죠... 중요... 이 문자열은 다닥다닥 붙여쓰셔야 합니다. ^^
두번째 정보는 Data Source 입니다.
물론, 정보를 지정하는데에 특별한 순서가 있는 것은 아닙니다만... 일반적으로 이런 순서로 지정합니다. 기분 나쁘시다면 순서는 여러분 맘대로 하셔도 돼요... ^^ Data Source=(local) 이것은 사용하고자 하는데이터베이스 서버가 설치된 서버의 이름을 지정하는 것입니다. (local)이라고 지정하면 현재의 자신의 서버에 데이터베이스 서버가 설치되어져 있을 경우에 가능하구요... 네트웍의 다른 서버에 데이터베이스 서버가 있을 경우는... 그 서버의 서버이름을 기입해 주시면 됩니다. 예를 들어 네트웍 상의 Sony 라는 서버에 데이터베이스 서버가 있다면 이 부분을 Data Source=Sony 라고 주시면 된 답니다. 어렵지 않죠?
세번째 정보는 사용할 데이터베이스 정보입니다.
데이터베이스 서버안에 존재하는... 여러 데이터베이스중에 어떤 데이터베이스를 사용할 것인지 정하는 것이지요.... 하지만, 인자이름이 조금은 외우기 부담스러운... Initial Catalog 이네요.. 어쨋든 외워야 합니다... 해서 소스에서는 Initial Catalog=pubs 라고 하였습니다. SQL 서버에서 기본적으로 제공되는 Pubs 데이터베이스를 사용하겠다고 지정한 것이죠...
네번째, 다섯번째의 인자는 User ID와 password 입니다. 이것은 SQL 서버의 해당 데이터베이스로 접근할 수 있는 계정 아이디와 비밀번호를 적어주면 됩니다... 중요한 것은 위의 문자열들은 띄워쓰기를 꼭 지켜주어야 한다는 것입니다. User ID에서 User 라는 단어와 ID라는 단어사이에는 꼭 한칸을 띄워주어야 합니다.
Initial Catalog 도 마찬가지 이구요. 대, 소문자는 구분하지 않아도 에러가 안 나지만... 띄워쓰기는 반드시 지켜주어야 합니다. ^^ 반드시, 꼭, 기필코, 여하튼, 결사코, 겁나게.
어렵지 않죠??? 그럼 지금부터 30초 드리겠습니다. 이 문자열을 외우시기 바랍니다....
어어... 스크롤바 내리지 말고 위로 올려서 어서 외우세요.. 어~~ 외우라니깐요...
흠....
외우기가 어렵다구요..??? 조금은 그럴 수 있죠. 하지만, 외우셔야 합니다.
하지만, 아무리 외워도 또 시간이 지나면 까먹죠... 그렇기에 쉽게 이 OLE DB 연결문자열을 만들 수 있는 방법을 알려드리겠습니다. 이 방법은 꼭 외워두세요...
1. 먼저 바탕화면에 새로운 텍스트 파일을 하나 만듭니다. 그리고, 그 파일의 이름을 바꾸시는데 그 이름을
OLEDB.UDL 이라고 지정합니다. 파일 이름은 뭐라해도 상관없지만 확장자는 반드시 UDL이어야 합니다.
그러면 다음 그림과 같이 아이콘이 바뀔 것입니다.
2. 그 아이콘에 마우스 우측 클릭해서 등록정보로 갑니다. 그러면 아래 그림처럼 Provider이라는 탭이 나올텐데, 그 탭으로 가면 현재 여러분의 시스템에서 지원되는 모든 OLE DB 공급자들이 나올겁니다. 우리는 여기서 SQL Server 을 사용할 것이기에 아래의 그림처럼 그것을 선택하시구요. 다음 탭인 Connection 탭으로 이동하세요 (혹은 Next >> 버튼을 누르세요)
3. Connection 탭으로 이동하시면 다음과 같은 화면이 나올 것입니다. 그림에도 표시해 두었지만 먼저 1번 칸에
는 접근할 데이터베이스 서버의 이름을 기입해 주세요. 만일, 로컬 서버에 데이터베이스 서버가 설치되어져
있다면 (local)이라고 하셔도 됩니다. 2 번 칸에는 해당 DB 서버로 접근할 수 있는 계정 아이디와 비밀번호를
기입하시면 됩니다.
위와 같이 설정하시고 나면 3번의 "Select the database on the Server" 의 콤보박스를 클릭할 경우 여러분이 기입한 내용을 기반으로 해당 데이터베이스 서버에 지정한 계정 아이디와 비밀번호로 접근을 자동으로시도합니다... 만일, 위의 그림에서 지정한 부분중 틀린 부분이 있다면 다음과 같은 에러가 날 수도 있습니다.
이 에러화면은 계정의 아이디가 없거나, 비밀번호가 일치하지 않을 경우 입니다. 이런 경우는 계정을확인하시면 됩니다. ^^ 만일, 모든 것이 잘 맞아 떨어졌다면 다음 그림처럼 위의 윈도우는 현재 DB 서버가 가지고 있는 데이터베이스들이 나온답니다.
4. 이렇게 디비들이 마구 나온다면... 접근이 제대로 된 것입니다. ^^ 성공축하....추카추카
그러면, 우리가 사용할 MyDataBase 를 선택하고 바로 밑의 버튼인 Test Connection 을 꼭 누르세요.
그럼 현재까지 지정한 것들을 가지고 다시금, 완전히, 실제로 OLE DB 접근 테스트를 합니다.
그리고, 성공하면 다음과 같은 메시지가 나오지요. 꼭 이거 나와야 합니다.
오홋홋... 마치 ODBC 잡을때와 비슷한 절차를 거치고 있네요.. ^^ 하지만, 이 작업은 반드시 해야하는 작업이 아닙니다.. OLE DB 연결 문자열을 도저히 외울수 없는 분들에게 유용한 방법이지요....
이렇게 세팅을 끝내고 난 다음에는 뭘 어떻게 하느냐?
5. 이제 세팅이 끝난 뒤, 바탕화면에 존재하는 OLEDB.UDL 을 "메모장"으로 로딩을 합니다.
그림과 같이 말이지요.. ^^
그러면, 메모장에는 다음과 같이 OLEDB 연결 문자열이 만들어져 있는 것을 볼 수 있을 것입니다.
비밀번호는 제가 일부러 *** 처리했음을 양해바랍니다.... ^^ 또한, Persist Security Info=False; 라는 부분은 우리에게 필요없는 부분이기에.. 그림에서는 그 부분을 지우고 보여드림도 양해바랍니다. 원래의 결과에서는 Persist Security Info=False; 라는 부분이 있을 겁니다. 하지만, 우리에게는 그것이 필요없으니 지우셔도 무방합니다. 있어도 무방하구요.. ^^
고로, OLE DB 연결문자열을 외우시기 싫거나, 자체 CPU가 딸려서 잘 외워지지 않는 분들은... 이러한 방법으로 언제나 연결 문자열을 만들어 내면 되는 것입니다.... ^^ 어때요? 쉽죠??
자... 조금은 길었지만...OLE DB를 통해서 데이터베이스를 접근하는 방법을 이제 장려해야 하겠다는 생각이 들으셨을 것이라 생각하구요.. OLE DB를 사용하기 위해서는 연결 문자열만을 외우면 된다는 것도아셨을 겁니다.
그리고, 윈도우 2000에서는 ODBC 보다는 OLE DB를 사용하는 것이... 훨씬 낫다는 것을 기억하세요... 여러가지 장점이 있으니까요... ^^ 그중에 하나는 ODBC의 경우 ASP에서 여러 개의 데이터베이스를 접근하기 위해선, 각각의 데이터베이스를 모두 ODBC잡아야 하는 반면, OLE DB 연결 문자열을 사용하면... 그러한 것이 하나도 없이 ASP 내부에서 여러 데이터베이스로 자유자재로 접근이 가능하게 됩니다. ^^
자... 이것으로 OLE DB 에 대한 이야기도 어느정도 이야기가 되었네요.. 더욱 궁금하신 것은 2001년 4월 초에 출시되는(된) 태오의 심혈의 대작... 두~~둥
"taeyo's Advanced ASP to be professional"을 참고하세요
^^ 조금은 더 깊은 이야기가 있습니다. (과연 속아줄것인가?....) 그럼.. 이제 이러한 지식을 기반으로... 다음 강좌에서부터는 ASP에서 OLE DB를 이용해서 게시판을 만들어나가기 시작하겠습니다. 글 올리기를 시작으로 해서 말이지요... ^^ 기대가 사정없이 되지요.. 크핫핫.... ...
그럼 다음 강좌에서..... 다시... 10000 나요~!
PS :Ms Access를 OLE DB로 연결하고 싶다면 Microsoft.Jet.OLEDB.4.0을 사용하심 됩니다. 해서, Ms Access 경우때의 연결문자열은 다음과 같이 만들어 사용하고는 합니다.
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\Nwide.mdb"
여기서의 Data Source 는 데이터베이스 파일의 경로를 적어주시면 됩니다. 반드시 물리적인 경로를요
출처 : http://www.taeyo.net/Columns/View.aspx?SEQ=224&PSEQ=15&IDX=3
'용어' 카테고리의 다른 글
클래스패스와 환경 변수, 그것이 알고 싶다. (0) | 2010.01.05 |
---|---|
DBMS의 종류 (0) | 2010.01.04 |
아카이빙(Archiving) 과 백업(Backup) 의 차이점 (0) | 2009.11.12 |
당신도 데이터베이스 관리자인가요? (0) | 2009.07.08 |
DBA란? (0) | 2009.07.08 |