큐브리드2010/03/08 01:26
databases 디렉토리에 이미 생성하고자 하는 데이터베이스명으로 된 디렉토리가 존재할 경우 오류처리가 되지 않고 데이터베이스 생성 프로세스로 넘어가서 CM Server로부터도 정상적인 오류 메시지를 받지 못하는 문제로
서버에 연결할 수 없습니다. CUBRID 매니저 서버의 구동 상태와 연결 설정(Port,IP등)을 점검하십시오.
와 같은 오류 메시지가 출력되어 왔습니다. 데이터베이스 생성전 디렉토리 검사 프로세스에서 존재시 오류 메시지를 출력하는 것이 더 좋은 방법이라 생각되어 오류 메시지를 추가하였습니다.

-- 목적 데이터베이스명(디렉토리명)으로 된 디렉토리가 존재하지 않을 경우
task:checkdir
status:success
note:none
noexist:C:\CUBRID\databases\testdb

-- 이미 존재할 경우
task:checkdir
status:success
note:none


// if a directory is not exists, display a alert window.
if (dirs == null || dirs.length == 0) {
    Display.getDefault().syncExec(new Runnable() {
        public void run() {
            CommonTool.openErrorBox(getShell(),
                    Messages.bind(Messages.msgExistDbFound, databaseName));
            isCanFinished = false;
            getShell().setVisible(true);
        }
    });
}

저작자 표시 비영리 변경 금지
Posted by 종이비행기
큐브리드2010/03/04 01:17
한줄로 자랑하는 큐브리드 적용 스토리! 여러분도 함께 참여해 보세요. 

저작자 표시 비영리 변경 금지
Posted by 종이비행기
큐브리드2010/01/29 22:01
2008년 NHN DeView 1회의 소식을 들었을 때 참석하고 픈 마음이 있었지만 개인 사정으로 갈 수 없었습니다. 회사 개발자분들이 다녀온 이후에 팜플렛을 통해 큐브리드의 오픈소스 소식을 듣게 되었습니다.


다짐1! 라이센스 제약없이 무료로 쓸 수 있고 소스까지 공개된 국산 오픈소스 DB로 교체하자!

그 이후로 고난의 연속이었습니다. 취지는 좋았지만 기반 시스템을 바꾼다는 게 그리 쉬운 일은 아니었지요. 고난의 길을 지나서 지금은 안정화가 되었고 회사에도 큰 도움이 되었습니다만, 작년 한해는 튜닝하지 못한 raw 상태 그대로의 DBMS로 고생 좀 했었지요(MySQL에 너무 익숙해 있었는가 싶습니다).


다짐2! 큐브리드 매니저, 불편하네. 고쳐 써 보자!

그런 생각으로 인사이드 모임 1회부터 차근 차근 나가게 되었습니다. 소스 트리를 헤집어 놓아서 큐브리드 관계자 분들을 당황스럽게 만들기도 했었구요. 그렇게 그렇게 알게된 인연으로 좋은 분들 많이 만나게 되었습니다. 개인적으로 마음을 터놓고 지내는 분도 생겼구요. 불편해서 시작한 개인적인 목적의 개발이었는데 어쩌다보니 다른 분들이 큐브리드를 편리하게 쓸 수 있도록 했으면 하는 마음이 생겼습니다. 그래서 개인 시간을 더 쓰면서 소스를 분석하고 글을 쓰고 코드를 만들게 되었습니다.


다짐3! 개발자 확산에 힘쓰자!

시도도 제대로 못해봤었습니다. 노력 부족이었다고 판단하지만, 나름대로는 바빠서라고 핑게를 대곤 합니다. 혼자서 하는 것보다 여럿이서 하는 게 더 즐겁고 성과도 더 빛나는 거라 생각이 듭니다. 그러나, 월화수목금금금하는 현실에서 개인 시간을 쪼개어 오픈소스 개발을 할만큼 여유가 있는 분들은 드물지 않을까 생각합니다. 회사에서 코드 보는 것도 지겨운데 집에서도 코드를 봐야해? 라고 반문할 수 있겠지요. 블로터 인터뷰에서 "코드를 보면 피로가 풀려요"라는 말 한마디에 졸지에 워커홀릭이 되어버렸지만, 내가 좋아하고 좋아하는 개발을 언제 어디서든 할 수 있다는 것을 항상 하느님께 감사드리며 여전히 코드로 피로를 풀고 있습니다(^^;). 이런 분들 어디 계시면 연락을~. 2009년은 큐브리더로서 최소한의 역할을 수행하는 정도였다고 생각합니다.


다짐4! 큐브리드 인사이드 발표도 해보자!

언젠가 제안이 들어왔지요. 현재 개발하고 있는 부분을 발표해 보는 게 어떤가? 그렇게 하면 좀 더 개발자들이 참여할 수 있지 않을까 하는 생각에 선뜻 받아들였습니다. 근데, 안면도 없는 분들 앞에서 하는 게 어렵긴 어려웠습니다. 그러나 이것도 경험이다 싶어서 하고 나니 할만 했었지요.


다짐5! DeView 함 해보자!

네이버의 개발자 행사인 DeView 2009에 세션 발표자로 서게 되었습니다. 이것도 외부 참여 개발자가 튜터리얼 세션을 진행하면 좋지 않겠는가? 그런 제안에 선뜻 받아들였습니다. 인사이드 발표도 했는데 뭘~ 하면서요^^ 자료 준비하는 데 노력이 많이 들었습니다. 오신 분들 시간을 아껴드려야하기에 대충 할 수 없는 거죠. 결국 내용이 많아 참석하신 분들을 숙박비 없이 재워드렸습니다. 그날 OKJSP의 허광남님이 보러 오셨는데요. 그분의 세미나 스타일을 좋아합니다. 재밌게 이야기를 풀어나가는 능력이 몸에 배어 있다고나 할까요. 그 내공 언젠가는 저도 익히게 되리라 믿습니다. 여튼 좋았었습니다.


다짐6! I Do Code, 그래 이왕 하는 거면 거기에 내보는 것도 좋지!

지금은 시간 투여할 여력이 없어서 잠시 보류해두고 있는 프로젝트가 있습니다. 큐브리드 DBMS와 큐브리드 매니저와는 Cubrid Manager Protocol로 데이터를 교환하는데, RCP로 개발된 Cubrid Manager 뿐만 아니라 MySQL에서 익숙해 있었던 저로서는 phpMyAdmin 스타일의 DBMS 관리툴이 절실히 필요했었습니다. 그런 이유로 비 접속 유지 프로토콜인 HTTP에서도 불편없이 사용할 수 있도록 cm broker와 cubrid web manager를 개발하게 되었는데, 퇴근 후에 밤늦게까지 PC와 씨름하던 그 무더웠던 여름날이 아직도 잊혀지지 않습니다. 하루 3~4시간을 자면서 그렇다고 회사에 누가 되지 않도록 최선을 다했던 기억이 듭니다. 지금 다시 하라면 못할 듯 합니다만, 생각해보면 뿌듯합니다. 그래서 NHN에서 대상을 타는 영광을 누리지 않았나 생각해봅니다.


이렇게 지난 2009년을 큐브리드와 함께 보냈습니다. 힘든 기억도 즐거운 기억도 새로운 경험도 많이 했었던 한해였습니다. 2010년의 목표는 큐브리드가 좀 더 많이 사용하게 되고 그로 인해 많은 유저가 알게 되고 많은 개발자가 개발에 참여하게 되고 기능과 안정성이 더 좋아져서 국산 시스템 소프트웨어로서 세계에서도 인정받을 수 있는 밑거름이 되려고 노력하려고 합니다. 그러면 저는 무료로 잘 사용할 수 있겠죠^^;

저작자 표시 비영리 변경 금지
Posted by 종이비행기
큐브리드2009/08/25 22:38



작년에는 개인 사정상 참석을 못했었는데 올해는 참석이 아니라 발표를 하게 되었습니다.
참석하시는 분들에게 아깝지 않은 시간이 되도록 노력하겠습니다.

http://deview.naver.com/home/main

저작자 표시 비영리 변경 금지
Posted by 종이비행기
큐브리드2009/08/10 00:48
아시마 호호코는 “미래에는 자신의 욕망을 채우기 위해 그리는 꿈이나 목표는 아무리 열심히 그려도 잘 이루어지지 않는다. 사리사욕을 위한 것이나 ‘조금만 더 조금만 더’ 하는 식의 욕심을 채우기 위한 희망이라면 반드시 실패한다. 반대로, 나 한 사람의 행복과 평화를 넘어 다른 사람의 것으로까지 이어지는 것이라면 어떤 일이든 길은 열릴 것이다. 그것이 바로 세계가 원하는 것이기 때문이다.”라고 얘기했습니다.

CUBRID는 세계가 원하는 “모든 개발자와 사용자가 함께 만들고 사용하는 DBMS”를 꿈꾸고 있습니다. 어떤 한 기업이나 개인의 노력이 아닌, 모두가 같이 참여하는 소통의 공간을 통해 반드시 그 꿈이 이루어질 것으로 믿습니다.

- 큐브리드 진은숙 랩장님 -
저작자 표시 비영리 변경 금지
Posted by 종이비행기
큐브리드2009/07/18 23:20
DELETEBACKUPINFO

설명
DELETEBACKUPINFO 명령은 백업 자동화를 위한 예약 사항을 삭제하는데 사용된다. 기존에 등록된 예약 사항은 backupid로 구분이 되며,backupid 항목에는 필히 기존에 등록된 예약 사항의 backupid가 사용되어야 한다.


구문
DELETEBACKUPINFO 명령의 문법은 다음과 같다. 볼드체는 필수 입력 정보이다.

task:deletebackupinfo
token:{cmserver 인증후 받은 token 문자열}
dbname:{백업 대상 데이터베이스명}
backupid:{백업 자동화 아이디}


예제
demodb 데이터베이스 백업 자동화 예약 항목을 삭제하는 예제이다.

--request--
task:deletebackupinfo
token:4504b930fc1be99b56c62051e186181169c3a3d75bc217ed30e72b1bd4aa20b67926f07dd201b6aa
dbname:notexistdb
backupid:bak_daily

--response:success--
task:deletebackupinfo
status:success
note:none

--response:success(존재하지 않는 데이터베이스, 존재하지 않는 backupid)--
task:deletebackupinfo
status:success
note:none

--response:fail(데이터베이스명 및 필수 입력 사항 누락)--
task:deletebackupinfo
status:failure
note:Parameter(database name) missing in the request

※ 존재하지 않는 DB명 및 존재하지 않는 backupid를 입력하더라도 에러는 발생하지 않는다. 다만, 정상적으로 삭제되지는 않을 뿐이다.
저작자 표시 비영리 변경 금지
Posted by 종이비행기
큐브리드2009/07/18 23:19
SETBACKUPINFO

설명
SETBACKUPINFO 명령은 백업 자동화를 위한 예약 사항을 변경하는데 사용된다. 기존에 등록된 예약 사항은 backupid로 구분이 되며, backupid 항목에는 필히 기존에 등록된 예약 사항의 backupid가 사용되어야 한다.


구문
SETBACKUPINFO 명령의 문법은 다음과 같다. 볼드체는 필수 입력 정보이다. 참고로, SETBACKUPINFO와 ADDBACKUPINFO의 구문은 동일하다.

task:setbackupinfo
token:{cmserver 인증후 받은 token 문자열}
dbname:{백업 대상 데이터베이스명}
backupid:{백업 자동화 아이디}
path:{백업될 경로}
period_type:{Monthly or Weekly or Daily or Special, 기간 유형}
period_date:{1-31/Monthlyor Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday/Weekly ornothing/Daily, yyyy-mm-dd/Special}
time:{hhmi, 백업시간(시분)}
level:{0-2, 백업레벨}
archivedel:{ON or OFF, 아카이브 로그 파일 삭제 여부}
updatestatus:{ON or OFF, 통계정보 업데이트 여부}
storeold:{ON or OFF, 이전 백업 보존 여부}
onoff:{ON or OFF, 온라인 및 오프라인 백업}
zip:{y or n, 백업파일 압축 여부}
check:{y or n, 데이터 일관성 체크 여부}
mt:{n >= 0, 병렬백업 쓰레드 개수}


예제
demodb 데이터베이스 백업 자동화 예약 항목을 변경하는 예제이다.

--request--
task:setbackupinfo
token:4504b930fc1be99b4eaf9ddf7d52f6e3d0e5415096e0ca7230e72b1bd4aa20b67926f07dd201b6aa
dbname:demodb
backupid:bak_daily
path:/opt/frameworks/cubrid/databases/demodb/backup
period_type:Daily
period_date:nothing
time:1230
level:1
archivedel:ON
updatestatus:OFF
storeold:ON
onoff:ON
zip:y
check:y
mt:0

--response:success--
task:setbackupinfo
status:success
note:none

--response:success(존재하지 않는 데이터베이스, 존재하지 않는 backupid)--
task:setbackupinfo
status:success
note:none

--response:fail(데이터베이스명 및 필수 입력 사항 누락)--
task:setbackupinfo
status:failure
note:Parameter(?) missing in the request

※ 존재하지 않는 DB명 및 존재하지 않는 backupid를 입력하더라도 에러는 발생하지 않는다. 다만, 정상적으로 변경되지는 않을 뿐이다.
저작자 표시 비영리 변경 금지
Posted by 종이비행기
큐브리드2009/07/18 23:19
ADDBACKUPINFO

설명
ADDBACKUPINFO 명령은 백업 자동화를 위한 예약 사항을 등록하는데 사용된다. 백업 자동화란 일정 주기 또는 특정 일자에 백업이 자동으로 수행되도록 설정해두는 일종의 예약 시스템이라고 할 수 있다.


구문
ADDBACKUPINFO 명령의 문법은 다음과 같다. 볼드체는 필수 입력 정보이다.

task:addbackupinfo
token:{cmserver 인증후 받은 token 문자열}
dbname:{백업 대상 데이터베이스명}
backupid:{백업 자동화 항목 구분을 위한 적절한 아이디를 부여}
path:{백업될 경로}
period_type:{Monthly or Weekly or Daily or Special, 기간 유형}
period_date:{1-31/Monthly or Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday/Weekly or nothing/Daily, yyyy-mm-dd/Special}
time:{hhmi, 백업시간(시분)}
level:{0-2, 백업레벨}
archivedel:{ON or OFF, 아카이브 로그 파일 삭제 여부}
updatestatus:{ON or OFF, 통계정보 업데이트 여부}
storeold:{ON or OFF, 이전 백업 보존 여부}
onoff:{ON or OFF, 온라인 및 오프라인 백업}
zip:{y or n, 백업파일 압축 여부}
check:{y or n, 데이터 일관성 체크 여부}
mt:{n >= 0, 병렬백업 쓰레드 개수}


예제
demodb 데이터베이스 백업 자동화 예약 항목을 등록하는 예제이다.

--request--
task:addbackupinfo
token:4504b930fc1be99b4eaf9ddf7d52f6e3d0e5415096e0ca7230e72b1bd4aa20b67926f07dd201b6aa
dbname:demodb
backupid:bak_monthly
path:/opt/frameworks/cubrid/databases/demodb/backup
period_type:Monthly
period_date:1
time:1230
level:0
archivedel:ON
updatestatus:ON
storeold:ON
onoff:ON
zip:y
check:y
mt:0

--response:success--
task:addbackupinfo
status:success
note:none

--response:success(존재하지 않는 데이터베이스)--
task:addbackupinfo
status:success
note:none

--response:fail(데이터베이스명 입력누락)--
task:addbackupinfo
status:failure
note:Parameter(database name) missing in the request

※ 존재하지 않는 DB명을 입력하더라도 에러는 발생하지 않는다.
저작자 표시 비영리 변경 금지
Posted by 종이비행기
큐브리드2009/07/18 23:18
GETBACKUPINFO

설명
GETBACKUPINFO명령은 백업 자동화 예약된 항목의 상세 정보를 조회하는데 사용된다.


구문
GETBACKUPINFO 명령의 문법은 다음과 같다. 볼드체는 필수 입력 정보이다.

task:getbackupinfo
token:{cmserver 인증후 받은 token 문자열}

dbname:{조회할 데이터베이스명}


예제
demodb 데이터베이스 백업 자동화 예약 항목을 조회하는 예제이다.

--request--
task:getbackupinfo
token:4504b930fc1be99b9cb8c885a0e8674a4ea3fcd68c6ea61530e72b1bd4aa20b67926f07dd201b6aa
dbname:demodb

--response(백업 예약 항목이 1건)--
task:getbackupinfo
status:success
note:none
dbname:demodb
dbname:demodb
backupid:bak_monthly
path:/opt/frameworks/cubrid2/databases/demodb/backup
period_type:Monthly
period_date:1
time:1230
level:0
archivedel:ON
updatestatus:ON
storeold:ON
onoff:ON
zip:y
check:y
mt:0

--response(백업 예약 항목이 1건 이상)--
task:getbackupinfo
status:success
note:none
dbname:demodb
dbname:demodb
backupid:bak_monthly
path:/opt/frameworks/cubrid2/databases/demodb/backup
period_type:Monthly
period_date:1
time:1230
level:0
archivedel:ON
updatestatus:ON
storeold:ON
onoff:ON
zip:y
check:y
mt:0
dbname:demodb
backupid:bak_daily
path:/opt/frameworks/cubrid2/databases/demodb/backup
period_type:Daily
period_date:nothing
time:1230
level:1
archivedel:ON
updatestatus:OFF
storeold:OFF
onoff:ON
zip:y
check:y
mt:0

--response:success(존재하지 않는 데이터베이스)--
task:getbackupinfo
status:success
note:none
dbname:notexistdb

--response:fail(데이터베이스명 입력누락)--
task:getbackupinfo
status:failure
note:Parameter(database name) missing in the request


※ 이 명령은 백업 자동화와 관련이 있으므로 GETBACKUPINFO 보다는 BACKUPPLANLIST가 더 맞을 듯 하다.
※ 존재하지 않는 DB명을 입력하더라도 에러는 발생하지 않으며 dbname항목만 추가가 되어서 반환된다(CM서버의 오류로 판단된다).
저작자 표시 비영리 변경 금지
Posted by 종이비행기
큐브리드2009/07/18 23:18
GETBACKUPLIST

설명
GETBACKUPLIST 명령은 각 백업 레벨(0~2)별 백업 파일의 경로 정보를 조회하는 데 사용된다. 단, 레벨별로 최종 백업 정보만 조회가 가능하며, 상위 레벨의 백업이 되면 하위 레벨의 내역은 제외되어 출력된다. 즉, 2레벨까지 모두 백업된 이후에 1레벨을 백업하면 2레벨의 정보는 자동으로 제외될 것이다.


구문
GETBACKUPLIST 명령의 문법은 다음과 같다. 볼드체는 필수 입력 정보이다.

task:getbackuplist
token:{cmserver 인증후 받은 token 문자열}

dbname:{조회할 데이터베이스명}


예제
demodb 데이터베이스 백업 이력을 조회하는 예제이다.

--request--
task:getbackuplist
token:4504b930fc1be99b9cb8c885a0e8674a4ea3fcd68c6ea61530e72b1bd4aa20b67926f07dd201b6aa
dbname:demodb

--response--
task:getbackuplist
status:success
note:none
level0:/opt/frameworks/cubrid2/databases/demodb/backup/demodb_backup_lv0
level1:/opt/frameworks/cubrid2/databases/demodb/backup/demodb_backup_lv1
level2:/opt/frameworks/cubrid2/databases/demodb/backup/demodb_backup_lv2

--response:fail(존재하지 않는 데이터베이스)--
task:getbackuplist
status:failure
note:Can not find the directory database(notexistdb) is located

--response:fail(데이터베이스명 입력누락)--
task:getbackuplist
status:failure
note:Parameter(database name) missing in the request
저작자 표시 비영리 변경 금지
Posted by 종이비행기