지금껏 ColdFusion을 공부해 오면서 SQL구문때문에 골치썩어본 적은 단 한번도 없었습니다. 물론 각 Database Server를 만드는 벤더마다의 지원하는 함수 등의 차이, 기능상의 차이로 일부 SQL구문이 달라지기도 하지만 사실 대부분의 Web Application Server에서의 처럼 ColdFusion에서도 DSN(Data Source Name)이란 개념이 있어 DB의 연결과 해제에 대해 고민할 일이 실상은 거의 없다는 점은 분명 저에게는 엄청난 매력입니다. 하지만 일반 J2EE기반의 JSP/Servlet WAS와는 또 다르게 정말 평이한 SQL구문을 작성하게 하는 ColdFusion의 장점때문에 대부분의 PHP와 같은 타 언어에서는 MySQL to MSSQL 등의 DB Migration이 실상 엄두내기가 쉽지 않는 작업에 비하여, ColdFusion으로 작성된 코드는 거의 (코드작성량 또는 어플리케이션의 크기에 따라 다르겠지만) 하루면 끝난다는 것은 분명 매력적인 것이 아닐까 생각합니다. PHP코드에서 MySQL을 지원하는 함수와 MSSQL을 지원하는 함수가 달라 이 부분을 일일히 찾아 바꾼다는 것 정말 끔찍한 일입니다.
얼마전에 이래저래 인터넷서핑을 하다가 네이버의 큐브리드(Cubrid)에 관련된 이벤트를 하나 보았습니다. 일단 솔직히 말씀드려 경품에 눈이 멀어서 이글도 (경품은 소박하게 참가자 전원에게 준다는 4GB USB를 노리고 있습니다. 저는 사실 DB에 대한 지식은 거의 무식에 가까울 정도입니다. 특히 SQL구문에 대해서는 더더욱. ㅠㅠ) 큐브리드와 ColdFusion을 접목할 수 있을까? 있겠지? 하던차에 한번 해봐야 겠다고 작심하고 그 결과를 정리는 차원에서 작성중입니다.
몇해전 천안에 있는 독립기념관의 홈페이지 리뉴얼 사업에 저희 회사에서도 참가신청을 한 적이 있었습니다. 물론 저희 업체는 탈락했습니다..ㅠㅠ; 당시 PT를 제가 했는데, 저희 회사에서는 시스템 환경을 Apache, PHP, MySQL을 제안했었습니다. 물론 그 때 당시 독립기념과의 홈페이지 시스템환경 역시 DB를 제외한 나머지는 동일한 사양인것으로 기업합니다만, 심사위원 대부분이 기 구축된 막대한 양의 Database를 어떻게 재가공하고 정리할 것이며, MySQL로 안정적으로 이전할 것인지 집중적으로 물어왔습니다. 그때당시 UniSQL이란 이름에 대해 막연하게 제품명만 알고 있었고, 일반 웹사이트에서는 거의 사용하지 않는 그야말로 희귀종의 DBMS로 생각했기에 저의 대답은 예상하신대로 시원찮았습니다. 뭐.. 그냥 옮긴다는 막연한 답변 ㅠㅠ;(뭘 알아야 답변을 하지..)
당시 저의 회사에서는 uniSQL을 다루는 분이 없었기에 그 전에 다니던 회사에서 근무하던 개발자에게 물어보니 거의 저주에 가까운 막말을 쏟아냈습니다. 그때의 들은 말을 그대로 옮겨보자면 "살다살다 이런 쓰레기같은 DB는 처음본다"는 것이 그분의 말이였는데 아주 예전의 UniSQL을 접했던 분이라 뭔가 기술적인 부분에서 엄청 데었구나 했습니다. 그래서 저의 첫 UniSQL에 대한 인상은 일단 형편없는 제품이고, 일부 영업맨의 눈물겨운 성공스토리로 일부 기관에 깔려댄 것으로 여기게 되었습니다. 워낙 주변의 악평이 많아서.. 그러나 어찌어찌 이 UniSQL이 Cubrid라는 제품명으로 이름이 바뀌고 여차저차 오픈소스가 되면서 NHN과 합병하는 등등의 세간의 뉴스는 접하고 있었으나 4GB USB의 경품을 보지 못한 3일전까지 정확하게 완전히 외면하고 살았습니다.
실제 저는 본격적인 개발을 하는 입장은 아니고, 회사내에서 기획파트에서 주력하다보니 코딩은 거의 취미로 하고 있는데, 부끄럽지만 ColdFusion이란 것을 공부하고 있고 거의 MySQL에서 작업을 하고 있어 4GB USB를 받겠다는 신념으로 오늘 제 VPS환겨에 Cubrid도 깔고, PC에 Cubrid Manager도 설치하고 MySQL과 같은듯 하면서도 또 다른 Cubrid의 쿼리문을 기술문서, 검색 등등 하루종일 부산을 떨었습니다. ㅎㅎ
솔직히 설치하는 작업은 간단해서 뭐.. 만족등급을 주고 싶은데, 역시나 Cubrid에도 당장 시급해 보이는 것이 전문 문서팀이 있어야 겠다는 생각입니다. 소스포지에도 등록할 정도로 공개에 자신이 있다면 제품의 성능이나 기능도 중요하지만 무엇보다 사용자층을 넓히려면 기술문서 정리가 잘되어 있어야 하는데, 대강의 기술문서는 정리된듯하나 실제 코딩작업시에 도움되는 정도의 양은 아니거니와 제로보드를 사용하여 실 사용모습을 보여주려고 그랬는지 모르겠지만 게시판에 정리도 안된 문서를 마구잡이식으로 중복된 내용을 거르지도 않고 등록해놔 정말 짜증이 제대로 났었습니다. 흔한 설치문서 하나없는 오픈소스 프로젝트도 많지만 이정도로 홈페이지가 정리안된 것도 사실 처음 봅니다.(MS나 Oracle정도의 개발자센터내의 도큐먼트를 원하진 않습니다만..) 처음 접하는 사용자를 위한 ABC가 무척 아쉽습니다.(있긴 있는데 정리도 안되었고, 버전정리도 안되서.. 보는게 더 짜증이였습니다. 한번에 알아보는 뭐 그런거.. 그걸 원하는 제가 나쁜놈일까요?)
암튼 각설하고. 저는 VPS(가상서버)를 2대 운영중인데 둘다 MySQL이 운영중이지만 이 블로그와 같이 실제 서비스되는 웹사이트가 적은 두번째 VPS에 Cubrid를 설치했습니다. 자.. J2EE기반의 WAS를 운영해 보면 JDBC라는 말이 많이 나오는데, 일단 이 드라이버를 깔아야 겠는데 cubrid는 설치 디렉토리내에 jdbc란 디렉토리안에 버전별로 존재하더군요. 저는 Linux서버를 운영중이므로 Cubrid를 /opt/CUBRID에 설치했습니다. 물론 Railo라는 ColdFusion엔진은 /opt/railo가 설치디렉토리입니다. (Adobe ColdFusion엔진을 가지고 테스트 해보려고 했는데 이 경우 실제 운영중인 웹사이트를 확보할 라이센스를 구매해야 해서 오픈소스인 Railo를 가지고 했습니다. 어짜피 둘은 같은거라서.)
1. Cubrid JDBC Driver를 Railo에 설치
Railo에서 JDBC를 사용해야 하고, 하위 Context에서 모두 사용가능하게 하려면, 아래 그림과 같이 CUBRID/jdbc안의 JDBC-8.2.1.0125.jar파일을 railo/lib안에 복사를 해줘야 합니다. 아래 그림과 같이 복사합니다.(경로는 순전히 저의 시스템의 경로입니다.)

그런다음, Railo를 재시작해 줍니다. 웹으로 Railo를 관리하는 Server Admin에서가 아닌 콘솔상에서 아예 데몬을 재시작합니다. 기본적으로 Railo를 Caucho Resin과 통합된 버전을 설치했다면, /opt/railo/bin/httpd.sh 파일을 재시작합니다. (./httpd.sh restart) Adobe ColdFusion 역시 이와 같게 JDBC-8.2.1.0125.jar파일을 ColdFusion설치 경로 안의 lib안에 복사해 줘야 합니다.
2. Railo Context에서 DSN(Data Source Name)지정하기
자, 그런다음, 자신의 웹사이트의 Railo Context로 로그인하여 DSN을 지정합니다. Adobe ColdFusion도 자신의 context에서 DSN을 지정합니다. 아래의 그림은 Railo의 웹관리자(context)에서의 DSN지정화면입니다. 그림에서처럼 Cubrid의 JDBC URL과 Driver명을 잘 지정합니다. BLOB등의 옵션은 실제 Cubrid와 관련이 없습니다만, DSN을 지정할때 Railo나 Adobe ColdFusion과 같은 외산 WAS에서는 Cubrid를 선택하는 항목이 없으므로 Others항목에서 지정해야 합니다. 이 부분이 왜 불편하냐면 DSN항목에 DB명이 있으면 공식지원하는 DB이므로 JDBC드라이버와 URL, Driver명이 자동으로 내장되어 있어 그냥 DB명/사용자명/비밀번호만 등록하면 되므로 편리하지만 그렇지 아니한 경우 일일히 타이핑을 해 주는 수고가 뒤따르고 위 1번에서처럼 JDBC드라이버 퍼일도 직접 설치해야 하는 수고를 해야 하기 때문이죠. 일단 아래 그림처럼 지정합니다.
유니코드를 써야 하므로 UTF-8을 지정하는 것 잊지마세요. ColdFusion은 기본적으로 한글도 1byte로 계산하고, Railo에서는 Form, URL등의 인코딩셋도 지정할 수 있어 유니코드로 작성하는 것이 매우 유리합니다. 특히 한글 1자를 1byte로 처리한 다는 것이 얼마나 편리한지 코딩해보면 알 것입니다. 특히 글자자를때 PHP에서 ??같이 한글을 짤리는 것을 막기위해 별도의 함수를 코딩해야 하는 것과 다르게 ColdFusion에서는 LEFT()함수 하나로 처리합니다.

자, ColdFusion에서 Cubrid로 개발할 환경은 대강 잡혔습니다. 그럼 이제 실제 코딩만해야 해야 하는데.. 일단, 제가 ColdFusion + MySQL로 얼마전에 만든 간단한 고객응대용 게시판을 Cubrid로 다시 만들어 보았습니다. 저희회사에서 실제 사용중인 소스라 직접적인 공개는 어렵고, 또 저의 형편없는 코딩능력으로 인해 소스가 굉장히 지저분합니다. 다행히 저의 모자란 코딩능력으로 떨어진 퍼포먼스는 강력한 ColdFusion의 성능에서 커버하고 있는지라.. ㅎㅎㅎㅎㅎㅎ 암튼 수주내에 정리하여 소스는 공개하도록 하겠습니다. 일단 큐브리드 매니저에서 다음 그림과 같이 DB생성, 사용자추가, 테이블생성했습니다.

게시판자체의 소스가 매우 간결하고, 실제 파일갯수도 몇개 안되어 MySQL용으로 만든 이 소스를 Cubrid로 바꾸는데 딱 3분걸렸습니다.(FTP업로드 시간 포함 ㅠㅠ;) 단순게시판이라 거의 표준 SQL문만 쓰기 때문에 가능했지만, 실제 대용량에서도 ColdFusion은 그리 어렵지 않게 Migration할 수 있을 것입니다. 이 게시판의 주요 기능은 ColdFusion과 MySQL로 만든 간단한 고객지원 Board Application 을 참조해 주시고, 테스트 URL은 다음과 같습니다. 글은 자신이 작성시 입력한 비밀번호로 조회가능하고 관리자용(123456)을 입력하면 모든 글을 볼 수 있습니다. Cubrid용 게시판에서는 서버환경문제로 파일다운로드에 문제가 있습니다. PDF 생성기능 역시 해당 VPS의 Railo서버에 한글 Font가 설치되지 않아 한글은 모두 깨져 보입니다. 이점 양해 바랍니다. 이 부분은 MySQL용에서 테스트해 주세요. 어짜피 ColdFusion이나 Cubrid의 문제가 아니라 시스템상의 문제이므로..