티스토리 뷰



국산 오픈소스 DBMS 큐브리드 설치하기에 이어 큐브리드(CUBRID) DBMS를 본격적으로 사용하기 위한 기본 환경을 준비하고 간단한 사용 사례를 다루어 볼까 합니다. 큐브리드 매니저를 설치해서 GUI를 통한 편리한 데이터베이스 관리를 수행할 수도 있지만 큐브리드에서 기본적으로 제공하는 콘솔 도구를 활용하는 방법을 적용하고자 합니다. 원천적인 도구 활용에 익숙해지는 방법이 DBMS와 친해지는 좋은 방법입니다.


■ 콘솔 인터페이스 준비하기

위의 그림은 큐브리드 설치 폴더 아래 bin 디렉토리로(C:\CUBRID\bin) 큐브리드의 다양한 서비스 프로그램과 라이브러리가 위치하고 있는 곳입니다. 큐브리드 관리를 위한 도구, 질의 도구등 큐브리드와 연관한 대부분의 기능을 이곳에서 처리할 수 있으므로 이 폴더에 대한 바로가기 만들기로 큐브리드 사용 환경 준비를 시작합니다.

바탕화면의 컨텍스트 메뉴(마우스 우측 버튼)에서 새로 만들기>바로 가기를 선택합니다.


"항목 위치 입력"에 cmd를 입력하고 [다음]으로 진행합니다.


바로 가기에 사용할 이름에 적절한 이름을 입력하고 [마침]으로 바탕화면에 바로가기를 생성합니다.


생성한 바로가기의 컨텍스트 메뉴>속성에서 "바로가기" 탭의 시작위치의 큐브리드 설치 디렉토리 아래 bin을 입력하고 [확인]하면 콘솔 환경 준비는 모두 끝납니다.


위의 그림은 생성한 바로가기를 더블클릭하여 실행한 콘솔 창으로 큐브리드의 실행 파일이 모인 곳으로 자동 이동한 것을 확인할 수 있습니다.  이 상태에서 각종 명령을 수행할 수 있습니다.


■ 데이터 생성과 DB 서버 가동/중단/상태 조회

앞선 글에서 트레이의 큐브리드 메뉴를 통해서 큐브리드 서비스를 가동 및 중단하는 간편한 방법을 다루었습니다. 트레이(Tray) 메뉴의 "Service Start" 메뉴가 클릭할 수 없는 상태라는 의미는 현재 서비스가 가동중임을 나타내는 것입니다. 그렇지만 보다 자세한 상태 확인을 원한다면 "cubrid service status" 명령을 사용할 수 있습니다.


위의 그림은 큐브리드 서비스 상태를 조회한 것으로 "master", "server", "broker", "manager server"로 구분 표시하고 있으며 실제로도 각 서비스는 별도의 프로세스로 동작합니다. 트레이의 큐브리드 메뉴에서 이들 서비스를 가동/중단 시킬 수도 있지만 콘솔창에서 명령으로 가동 및 중단하려면 아래와 같은 명령을 사용합니다.

cubrid service start

cubrid service stop


MySQL을 비롯한 다른 DBMS는 하나의 DB 서버가 여려 데이터베이스를 관리하지만 큐브리드의 경우에는 데이터베이스별로 서버를 가동시킵니다. 위의 예제에서 "server"로 표시되는 것이 DB 서버를 의미합니다. 위의 예제에서는 가동중인 DB 서버가 하나도 없는 상태입니다. 앞선 포스팅에서 큐브리드 설치 시점에 demodb라는 샘플 데이터베이스를 생성했으므로 demodb를 가동/중단 시키고 싶다면 아래와 같은 명령을 사용합니다.

cubrid server start demodb

cubrid server stop demodb

DB 서버의 상태를 조회하고 싶다면 "cubrid server status"를 사용하면 됩니다.


위의 그림은 큐브리드 설치 시점에 생성했던 demodb의 서버를 가동시키고 DB 서버들의 상태를 확인한 결과입니다. 개발이 끝난 다음 실제 구동환경에서 큐브리드를 시스템 구동과 함께 동작시키고 싶다면 큐브리드 설치 폴더 아래 conf 디렉토리에 있는 cubrid.conf에 자동 구동시키고 싶은 데이터베이스를 등록합니다.



cubrid.conf 내용중에 "service=" 항목에는 자동 구동할 서비스를 기술하고 "server=" 항목에는 자동 구동할 데이터베이스를 기술하면 됩니다. 위의 그림에서는 설치 기본값대로 서비스를 구동시켰고 demodb와 testdb를 자동 구동하도록 설정했습니다. 


위의 그림은 testdb라는 새로운 데이터베이스를 생성하는 과정으로 설치 폴더 아래 databases 디렉토리 아래에 새로운 데이터베이스 파일을 저장할 디렉토리를 생성하고 "cubrid createdb" 도구를 사용하여 해당 위치에 데이터베이스를 생성하는 과정으로 이루어 집니다.

usage: cubrid createdb [OPTION] database-name database-locale


database-locale format is <language>.<charset>; examples : en_US.iso88591, ko_KR.utf8

valid options:

      --db-volume-size=SIZE           size of first information volume

                                      default: db_volume_size in cubrid.conf

      --db-page-size=SIZE             database page SIZE in bytes; default: 16K

      --log-volume-size=SIZE          size of log archives

                                      default: log_volume_size in cubrid.conf

      --log-page-size=SIZE            log page SIZE in bytes; default: database page size

      --comment=COMMENT               COMMENT for a database; default: none

  -F, --file-path=PATH                directory PATH for database volumes; default: current directory

  -L, --log-path=PATH                 directory PATH for log volumes; default: same as file-path

  -B, --lob-base-path=PATH            base directory PATH for external LOB data; default: <file-path>/lob

      --server-name=HOST              server's HOST name; default: current host name

  -r, --replace                       replace an existing database; default: don't replace

      --more-volume-file=FILE         FILE contain specifications for creation of additional volumes; default: none

      --user-definition-file=FILE     FILE contain user definitions; default: none

      --csql-initialization-file=FILE FILE contain SQLs for an initialization of the database; default: none

  -o, --output-file=FILE              redirect output messages to FILE; default: none

  -v, --verbose                       enable verbose status messages; default: disabled

위의 내용은 "cubrid createdb" 도구의 사용법으로 예제 처럼 범용 및 로그 볼륨 크기를 지정하지 않으면 cubrid.conf에 등록되어 있는 설정값(기본값은 512MB)으로 데이터베이스를 생성합니다. 데이터베이스 디렉토리는 임의로 지정할 수 있습니다. 데이터베이스를 삭제하려면 "cubrid deletedb testdb"처럼 deletedb 도구로 해당 데이터베이스를 삭제할 수 있습니다.  생성한 데이터베이스를 사용하려면 앞서 언급한 것과 같이 "cubrid server start"로 DB 서버를 가동시켜 주어야 합니다. 데이터베이스 생성 과정에 지정하는 로케일 및 인코딩은 한국어의 경우 ko_KR.utf8과 ko_KR.euckr을 지원하지만 다른 언어의 경우에는 utf8 인코딩만 지원한다고 합니다.


■ 기본 사용자와 비밀번호 설정

오라클의 scott, SQL Server의 SA, MySQL의 root, 파이어버드의 SYSDBA등은 모두 DBMS에서 기본적으로 제공하는 사용자 아이디입니다. 큐브리드도 마찬가지로 DBAPUBLIC이라는 기본 아이디를 제공합니다. 큐브리드에서 사용자 아이디를 추가하거나 변경하려면 반드시 DBA 권한이 있어야 합니다. 그런데, DBMS를 설치하면 기본적으로 생성되는 아이디이기 때문에 비밀번호를 설정하지 않거나 그저 뻔한 비밀번호로 설정했다면 보안에 취약해질 수 밖에 없습니다. 특히 네크워크로 개방되어 있는 경우 TCP 포트 또한 공개되어 있기 때문에(큐브리드는 기본값으로 1523을 사용합니다) 보안 취약성은 더욱 심화될 수 밖에 없습니다. 큐브리드에서 데이터베이스를 생성하면 각 데이터베이스에 기본적으로 생성되는 DBA, PUBLIC 아이디에는 비밀번호가 설정되어 있지 않으므로 본격적인 사용에 앞서 비밀번호 설정 작업을 권장해 드립니다.


위의 그림은 콘솔창을 통해서 각종 질의를 수행할 수 있는 도구인 csql을 사용하여 기본 사용자 dba와 public의 비밀번호를 설정한 결과입니다. csql을 수행시킬때 -u 옵션으로 사용자를 지정하지 않으면 public 사용자로 간주합니다. 앞서 언급한 것처럼 사용자 추가 및 변경등의 작업은 dba 권한으로 수행해야 하므로 비밀번호 변경시 반드시 dba 권한으로 csql을 접속합니다. csql을 사용하는데 있어 주의할 점은 csql 자체 명령은 세미콜론을 앞에 붙여주고(예, ;help, ;exit) 일반적인 SQL은 문장 끝에 세미콜론을 붙여줍니다. 'ALTER USER'문장에서 PASSWORD 다음에 기술하는 새로운 비밀번호는 반드시 작은 따옴표(')로 감싸주어야 하는 것에 주의하셔야 합니다.


■ 스키마 조회와 질의 테스트


큐브리드에서 특정 데이터베이스에 있는 모든 테이블 검색은 위의 그림과 같이 "show tables;" 질의로 가능합니다. 또한 특정 테이블의 컬럼 내역을 조회하려면 "show columns in 테이블명;"을 사용할 수 있습니다. MySQL처럼 "explain 테이블명;"으로도 특정 테이블의 컬럼 내역을 확인할 수도 있습니다. 

테이블 정보와 컬럼 정보를 위와 같이 확인하는 방법도 있지만 MySQL이나 SQL Server 처럼 SELECT 질의를 사용해서 확인할수도 있는데 테이블은 db_class 시스템 테이블을 질의하고 컬럼은 db_attribute 시스템 테이블에 대해서 질의를 수행하면 됩니다. 아래는 db_class의 스키마를 조회하고 사용자 테이블 내역을 SELECT 질의로 확인하는 과정입니다.

csql> explain db_class;

=== Result of SELECT Command in Line 1 ===

  Field                 Type                  Null                  Key          Default               Extra
====================================================================================================================================
  'class_name'          'VARCHAR(255)'        'YES'                 ''          NULL                  ''
  'owner_name'          'VARCHAR(255)'        'YES'                 ''          NULL                  ''
  'class_type'          'VARCHAR(6)'          'YES'                 ''          NULL                  ''
  'is_system_class'     'VARCHAR(3)'          'YES'                 ''          NULL                  ''
  'partitioned'         'VARCHAR(3)'          'YES'                 ''          NULL                  ''
  'is_reuse_oid_class'  'VARCHAR(3)'          'YES'                 ''          NULL                  ''

6 rows selected. (0.050000 sec) Committed.

1 command(s) successfully processed.
csql> SELECT * FROM db_class WHERE is_system_class='NO';

=== Result of SELECT Command in Line 1 ===

  class_name            owner_name            class_type            is_system_class       partitioned           is_reuse_oid_class
====================================================================================================================================
  'stadium'             'PUBLIC'              'CLASS'               'NO'          'NO'                  'NO'
  'code'                'PUBLIC'              'CLASS'               'NO'          'NO'                  'NO'
  'nation'              'PUBLIC'              'CLASS'               'NO'          'NO'                  'NO'
  'event'               'PUBLIC'              'CLASS'               'NO'          'NO'                  'NO'
  'athlete'             'PUBLIC'              'CLASS'               'NO'          'NO'                  'NO'
  'participant'         'PUBLIC'              'CLASS'               'NO'          'NO'                  'NO'
  'olympic'             'PUBLIC'              'CLASS'               'NO'          'NO'                  'NO'
  'game'                'PUBLIC'              'CLASS'               'NO'          'NO'                  'NO'
  'record'              'PUBLIC'              'CLASS'               'NO'          'NO'                  'NO'
  'history'             'PUBLIC'              'CLASS'               'NO'          'NO'                  'NO'

10 rows selected. (0.120000 sec) Committed.

1 command(s) successfully processed.
csql>



댓글
댓글쓰기 폼
«   2022/11   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함