:meta-keywords: cubrid install, cubrid compatibility, cubrid service, cubrid manager, run cubrid :meta-description: CUBRID supported platforms, hardware and software requirements. How to install and run CUBRID engine and CUBRID manager. *********** CUBRID 소개 *********** CUBRIDì˜ êµ¬ì¡° ë° íŠ¹ì§•ì„ ì„¤ëª…í•œë‹¤. CUBRID는 ê°ì²´ 관계형 ë°ì´í„°ë² ì´ìФ 관리 시스템으로서, ë°ì´í„°ë² ì´ìФ 서버, 브로커, CUBRID ë§¤ë‹ˆì €ë¡œ 구성ëœë‹¤. CUBRID는 ì¸í„°ë„· ë°ì´í„° ì„œë¹„ìŠ¤ì— ìµœì í™”ëœ ë°ì´í„°ë² ì´ìФ 시스템ì´ë©°, 사용ìžê°€ 편리하게 ì‚¬ìš©í• ìˆ˜ 있는 다양한 ê¸°ëŠ¥ì„ ì œê³µí•œë‹¤. ì´ ìž¥ì—서 설명하는 주요 ë‚´ìš©ì€ ë‹¤ìŒê³¼ 같다. * 시스템 구조: ë°ì´í„°ë² ì´ìФ 볼륨 구조, 서버 프로세스, 브로커 프로세스, ì¸í„°íŽ˜ì´ìФ ëª¨ë“ˆì— ëŒ€í•´ 설명한다. * CUBRIDì˜ íŠ¹ì§•: CUBRIDì˜ íŠ¸ëžœìžì…˜, 백업 ë° ë³µêµ¬, 파티션, ì¸ë±ìФ 기능, HA 기능, Java ì €ìž¥ í”„ë¡œì‹œì €, í´ë¦ ì¹´ìš´í„°, 관계형 ë°ì´í„° ëª¨ë¸ í™•ìž¥ì— ëŒ€í•´ 간단히 설명한다. 시스템 구조 =========== 프로세스 구조 ------------- CUBRID는 ê°ì²´ 관계형 ë°ì´í„°ë² ì´ìФ 관리 시스템으로서, ë°ì´í„°ë² ì´ìФ 서버, 브로커, CUBRID ë§¤ë‹ˆì €ë¡œ 구성ëœë‹¤. * ë°ì´í„°ë² ì´ìФ 서버는 CUBRID ë°ì´í„°ë² ì´ìФ 관리 ì‹œìŠ¤í…œì˜ í•µì‹¬ 구성 요소로 ë°ì´í„° ì €ìž¥ ë° ê´€ë¦¬ ê¸°ëŠ¥ì„ ìˆ˜í–‰í•˜ë©°, ë©€í‹°ìŠ¤ë ˆë“œ 기반 í´ë¼ì´ì–¸íЏ/서버 ë°©ì‹ìœ¼ë¡œ ë™ìž‘한다. ë°ì´í„°ë² ì´ìФ 서버는 사용ìžê°€ ìž…ë ¥í•œ 질ì˜ë¥¼ ì²˜ë¦¬í•˜ê³ , ë°ì´í„°ë² ì´ìФ ë‚´ì˜ ê°ì²´ë¥¼ 관리한다. CUBRID ë°ì´í„°ë² ì´ìФ 서버는 ìž ê¸ˆ 기법과 로깅 ê¸°ë²•ì„ ì´ìš©í•´ 다수 사용ìžê°€ ë™ì‹œì— 사용하는 환경ì—ì„œë„ ì™„ë²½í•œ 트랜ìžì…˜ì„ ì§€ì›í•˜ë©°, ìš´ì˜ì— 필요한 ë°ì´í„°ë² ì´ìФ 백업과 복구 ê¸°ëŠ¥ì„ ì§€ì›í•œë‹¤. * 브로커는 서버와 외부 ì‘ìš© 프로그램 ê°„ì˜ í†µì‹ ì„ ì¤‘ê³„í•˜ëŠ” CUBRID ì „ìš© 미들웨어로서, 커넥션 í’€ë§, 모니터ë§, 로그 ì¶”ì ë° ë¶„ì„ ê¸°ëŠ¥ì„ ì œê³µí•œë‹¤. * CUBRID Manager는 사용ìžê°€ ë°ì´í„°ë² ì´ìŠ¤ì™€ 브로커를 ì›ê²©ìœ¼ë¡œ ê´€ë¦¬í• ìˆ˜ 있게 해주는 GUI ë„구ì´ë‹¤. 사용ìžê°€ ë°ì´í„°ë² ì´ìФ ì„œë²„ì— SQL 질ì˜ë¥¼ ìˆ˜í–‰í• ìˆ˜ 있게 해주는 편리한 ë„êµ¬ì¸ ì§ˆì˜ íŽ¸ì§‘ê¸°ë¥¼ ì œê³µí•œë‹¤. * CUBRID ìžë°” ì €ìž¥ í”„ë¡œì‹œì € (Java SP) 서버는 ë°ì´í„°ë² ì´ìФ 서버ì—서 ìš”ì²í•œ ìžë°” ì €ìž¥ í”„ë¡œì‹œì €/함수를 처리하는 실행 (Execution) 서버ì´ë‹¤. .. FIXME: For more information about CUBRID Manager, see http://www.cubrid.org/wiki_tools/entry/cubrid-manager. .. image:: /images/process_structure.png .. _database-volume-structure: ë°ì´í„°ë² ì´ìФ 볼륨 구조 ---------------------- 아래 ê·¸ë¦¼ì€ CUBRID ë°ì´í„°ë² ì´ìФ ë³¼ë¥¨ì˜ êµ¬ì¡°ë¥¼ ë„ì‹í™”한 구성ë„ì´ë‹¤. ë°ì´í„°ë² ì´ìФ ë³¼ë¥¨ì„ í¬ê²Œ ì˜êµ¬ì 볼륨, ì¼ì‹œì 볼륨, 백업 볼륨으로 ë¶„ë¥˜í•˜ê³ , 아래 구성ë„를 ì°¸ê³ í•˜ì—¬ ê°ê°ì— ì†í•˜ëŠ” 볼륨 ë° íŠ¹ì§•ì„ ì‚´íŽ´ë³´ê¸°ë¡œ 한다. .. image:: images/database_volume_structure.png ë°ì´í„°ë² ì´ìФ ë³¼ë¥¨ì„ ìƒì„±, 추가, ì‚ì œí•˜ëŠ” ëª…ë ¹ì— ê´€í•´ì„œëŠ” :ref:`creating-database`, :ref:`adding-database-volume` ê·¸ë¦¬ê³ :ref:`deleting-database`\를 ì°¸ê³ í•œë‹¤. ì˜êµ¬ì 볼륨(Permanent Volume) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Data Volumes** ì˜êµ¬ì ë³¼ë¥¨ì€ í•œë²ˆ ìƒì„±ë˜ë©´ ì˜êµ¬ì 으로 ìœ ì§€ë˜ëŠ” ë°ì´í„°ë² ì´ìФ 볼륨ì´ë‹¤. ì¼ë°˜ì 으로 ë°ì´í„°ë² ì´ìФ 재시작ì´ë‚˜ ë¹„ì •ìƒ ì¢…ë£Œ 후ì—ë„ ë³´ì¡´í•´ì•¼ 하는 ë°ì´í„°ë¥¼ ì €ìž¥í•œë‹¤. ì˜êµ¬ì ë°ì´í„°ì˜ íƒ€ìž…ì€ ë‹¤ìŒê³¼ 같다. * í…Œì´ë¸”(í–‰ ë° ë©€í‹°ë¯¸ë””ì–´ ë°ì´í„°) ì€ ë‚´ë¶€ì 으로 íž™ íŒŒì¼ ë° íž™ 오버플로우 파ì¼ì— ì €ìž¥ë˜ë©°, í…Œì´ë¸”당 í•˜ë‚˜ì˜ íž™ íŒŒì¼ ë˜ëŠ” íž™ 오버플로우 파ì¼ì„ 사용한다. * ì¸ë±ìФ(키 ë° ë©€í‹°ë¯¸ë””ì–´ ë°ì´í„°) 는 ë‚´ë¶€ì 으로 b-tree íŒŒì¼ ë° b-tree 오버플로우 파ì¼ì— ì €ìž¥ë˜ë©°, ì¸ë±ìŠ¤ë‹¹ í•˜ë‚˜ì˜ b-tree ë˜ëŠ” b-tree 오버플로우 파ì¼ì„ 사용한다. * 시스템 ë°ì´í„°ëŠ” ë‚´ë¶€ì 으로 여러 ìœ í˜•ì˜ íŒŒì¼ì— ì €ìž¥ë˜ë©°, 시스템 ë°ì´í„°ì˜ 종류로는 íŒŒì¼ ì¶”ì 기(tracker), vacuum ë°ì´í„°, ì‚ì œëœ íŒŒì¼ ì¶”ì 기(tracker) ë° í´ëž˜ìŠ¤ëª… í•´ì‹œì— í•´ë‹¹í•œë‹¤ 사용ìžëŠ” ì¼ì‹œì ë°ì´í„°ë¥¼ ì €ìž¥í• ì¼ë¶€ ì˜êµ¬ì ë³¼ë¥¨ì„ ëª…ì‹œì 으로 í• ë‹¹í• ìˆ˜ 있다. ì´ëŸ¬í•œ ë³¼ë¥¨ì€ ì ˆëŒ€ ì œê±°ë˜ì§€ 않는다는 ì ì—서는 ì˜êµ¬ì ì´ì§€ë§Œ :ref:`temporary-volumes` 와 비슷하게 ë™ìž‘한다. .. note:: 기존 CUBRID ë²„ì „ì—서는 ì˜êµ¬ì ë³¼ë¥¨ì„ **generic**, **data** ë° **index** 와 ê°™ì´ ì—¬ëŸ¬ 타입으로 분류해 왔으나, ë” ì´ìƒ ì´ëŸ¬í•œ 분류를 사용하지 않는다. ì´ëŸ¬í•œ ì˜µì…˜ì´ ì—¬ì „ížˆ **cubrid createdb** ë° **cubrid addvoldb** ëª…ë ¹ì—서 허용ë˜ê¸´ 하지만 ìƒì„±ë˜ëŠ” ë³¼ë¥¨ì€ ë™ì¼í•˜ë©° ëª¨ë“ íƒ€ìž…ì˜ ì˜êµ¬ì ë°ì´í„°ë¥¼ ì €ìž¥í•œë‹¤. ë³¼ë¥¨ì˜ ìš©ë„는 ì˜êµ¬ì ë°ì´í„°ì™€ ì¼ì‹œì ë°ì´í„°ë¡œë§Œ 분류ëœë‹¤. **ì œì–´ 파ì¼(Control File)** ì œì–´ 파ì¼ì€ ë°ì´í„°ë² ì´ìФ ë‚´ 존재하는 ë³¼ë¥¨ì˜ ì •ë³´, 백업 ì •ë³´ ë° ë¡œê·¸ì˜ ì •ë³´ë¥¼ ì €ìž¥í•˜ëŠ” 파ì¼ì´ë‹¤. * **볼륨 ì •ë³´** : ë°ì´í„°ë² ì´ìФ ë‚´ ëª¨ë“ ë³¼ë¥¨ì˜ ì´ë¦„ê³¼ 위치, ê·¸ë¦¬ê³ ë‚´ë¶€ 볼륨 ì‹ë³„ìžë¥¼ í¬í•¨í•˜ëŠ” ì •ë³´ë¡œì„œ, ë°ì´í„°ë² ì´ìŠ¤ê°€ 재시작ë 때 CUBRID는 볼륨 ì •ë³´ ì œì–´ 파ì¼ì„ íŒë…하며, 새로운 ë°ì´í„°ë² ì´ìФ ë³¼ë¥¨ì´ ì¶”ê°€ë ë•Œì— ìƒˆë¡œìš´ 엔트리를 볼륨 ì •ë³´ ì œì–´ 파ì¼ì— 기ë¡í•œë‹¤. * **백업 ì •ë³´** : ì •ë³´ ë³¼ë¥¨ì— ëŒ€í•œ ëª¨ë“ ë°±ì—…ì˜ ìœ„ì¹˜ëŠ” 백업 ì •ë³´ ì œì–´ 파ì¼ì— 기ë¡ëœë‹¤. ì´ ì œì–´ 파ì¼ì€ 로그 파ì¼ì´ 관리ë˜ëŠ” ê³³ì— ìœ ì§€ëœë‹¤. * **로그 ì •ë³´** : ëª¨ë“ í™œì„± 로그와 ë³´ê´€ ë¡œê·¸ì˜ ì´ë¦„ì„ í¬í•¨í•˜ë©°, 사용ìžëŠ” 로그 ì •ë³´ ì œì–´ 파ì¼ì„ 통해 ë³´ê´€ ë¡œê·¸ì˜ ì •ë³´ë¥¼ 확ì¸í• 수 있다. ì´ëŸ¬í•œ 로그 ì •ë³´ ì œì–´ 파ì¼ì€ 로그 파ì¼ê³¼ ë™ì¼í•œ 위치ì—서 ìƒì„± ë° ê´€ë¦¬ëœë‹¤. ì´ì™€ ê°™ì´ ê°ê°ì˜ ì œì–´ 파ì¼ì€ ë°ì´í„°ë² ì´ìФ ë³¼ë¥¨ì˜ ìœ„ì¹˜, 백업 ì •ë³´, 로그 ì •ë³´ë¥¼ í¬í•¨í•˜ë©°, ë°ì´í„°ë² ì´ìŠ¤ê°€ 재시작하면서 ì½ëŠ” 파ì¼ì´ë¯€ë¡œ ì‚¬ìš©ìž ìž„ì˜ë¡œ 변경해서는 안 ëœë‹¤. **활성 로그(Active Log)** 활성 로그(active log)는 ë°ì´í„°ë² ì´ìŠ¤ì˜ ìµœê·¼ 변경 사í•ì„ í¬í•¨í•˜ëŠ” 로그ì´ë©°, ë°ì´í„°ë² ì´ìŠ¤ì— ë¬¸ì œê°€ ë°œìƒí•˜ëŠ” 경우 활성 로그 ë° ë³´ê´€ 로그를 ì´ìš©í•˜ì—¬ ê³ ìž¥ ë°œìƒ ì „ì˜ ì»¤ë°‹ëœ ì‹œì 으로 ì™„ì „í•˜ê²Œ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ë³µêµ¬í• ìˆ˜ 있다. **ì´ì¤‘ 쓰기 ë²„í¼ (Double Write Buffer, DWB) 파ì¼** ì´ì¤‘ 쓰기 ë²„í¼ íŒŒì¼ì€ I/O ì—러를 방지하기 위하여 디스í¬ì— 쓰여지는 ë°ì´í„° 페ì´ì§€ë“¤ì˜ ë³µì‚¬ë³¸ì„ ì €ìž¥í•œë‹¤. ì´ì— 대한 ìžì„¸í•œ ì„¤ëª…ì€ :ref:`database-volume` ì„ ì°¸ê³ í•œë‹¤. **TDE 키 íŒŒì¼ (TDE Key File)** TDE (Transparent Data Encryption) 키 파ì¼ì€ ë°ì´í„°ë² ì´ìФ 암호화를 위한 í‚¤ë“¤ì„ ë‹´ê³ ìžˆë‹¤. íŒŒì¼ ë‚´ì˜ í‚¤ë“¤ì€ TDE ìœ í‹¸ë¦¬í‹°ë¥¼ 사용하여 관리ëœë‹¤. ì´ì— 대한 ìžì„¸í•œ ì„¤ëª…ì€ :ref:`tde-file-based-key` 와 :ref:`TDE ìœ í‹¸ë¦¬í‹°<tde-utility>` 를 ì°¸ê³ í•œë‹¤. .. _temporary-volumes: ì¼ì‹œì 볼륨(Temporary Volume) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ì¼ì‹œì ë³¼ë¥¨ì€ ì˜êµ¬ì 볼륨과 ìƒë°˜ë˜ëŠ” ê°œë…ì´ë‹¤. 즉, ì¼ì‹œì ë³¼ë¥¨ì€ ì„œë²„ 프로세스가 종료ë 때 ì‚ì œë˜ëŠ” ì¼ì‹œì 으로 ìƒì„±ë˜ëŠ” ì €ìž¥ì†Œ 파ì¼ì´ë©°, ì§ˆì˜ ì²˜ë¦¬ ë° ì •ë ¬ì„ ìˆ˜í–‰í• ë•Œ 중간 결과와 최종 결과를 ì €ìž¥í•˜ëŠ” ë° ì‚¬ìš©ëœë‹¤. ì´ëŸ¬í•œ 파ì¼ì€ 질ì˜ì˜ 중간 결과와 최종 결과를 ì €ìž¥í• ê³µê°„ì„ ì œê³µí•œë‹¤. 요구ë˜ëŠ” ì¼ì‹œì ë°ì´í„° í¬ê¸°ë° ë”°ë¼, ìš°ì„ ì 으로 ë©”ëª¨ë¦¬ì— ì €ìž¥ëœë‹¤.(공간 í¬ê¸°ëŠ” **cubrid.conf** ì— ì§€ì •ëœ ì‹œìŠ¤í…œ 파ë¼ë¯¸í„° **temp_file_memory_size_in_pages** ì— ì˜í•´ ê²°ì •ë¨). ì´ë¥¼ 초과하는 ë°ì´í„°ëŠ” 디스í¬ì— ì €ìž¥í•œë‹¤. ë°ì´í„°ë² ì´ìФì—서는 ì¼ì‹œì ë°ì´í„°ë¥¼ 위한 ë””ìŠ¤í¬ ê³µê°„ í• ë‹¹ì„ ìœ„í•´ ì¼ì‹œì ë³¼ë¥¨ì„ ìƒì„±í•´ 사용한다. 그러나 사용ìžëŠ” **cubrid addvoldb -p temp** ëª…ë ¹ì„ í†µí•´ ì¼ì‹œì ë°ì´í„°ë¥¼ ì €ìž¥í•˜ê¸° 위한 ìš©ë„로 ì˜êµ¬ì ë³¼ë¥¨ì„ í• ë‹¹í• ìˆ˜ë„ ìžˆë‹¤. ì´ëŸ¬í•œ ì˜êµ¬ì ë³¼ë¥¨ì´ ìžˆëŠ” 경우 임시 ë°ì´í„°ë¥¼ ë””ìŠ¤í¬ ê³µê°„ì— ì €ìž¥í• ë•Œ ì¼ì‹œì 볼륨보다 ìš°ì„ ì‚¬ìš©í•œë‹¤. ì¼ì‹œì ë°ì´í„°ë¥¼ ì‚¬ìš©í• ìˆ˜ 있는 질ì˜ì˜ 예는 다ìŒê³¼ 같다.: * **SELECT** 문 등 결과가 ìƒì„±ë˜ëŠ” ì§ˆì˜ * **GROUP BY** 나 **ORDER BY** ê°€ í¬í•¨ëœ ì§ˆì˜ * 부질ì˜(subquery)ê°€ í¬í•¨ëœ ì§ˆì˜ * ì •ë ¬ 병합(sort-merge) ì¡°ì¸ì´ 수행ë˜ëŠ” ì§ˆì˜ * **CREATE INDEX** ë¬¸ì´ í¬í•¨ëœ ì§ˆì˜ ì¼ì‹œì ë°ì´í„°ì— ì˜í•´ ì‹œìŠ¤í…œì˜ ë””ìŠ¤í¬ ê³µê°„ì´ ëª¨ë‘ ì‚¬ìš©ë˜ëŠ” ê²ƒì„ ë°©ì§€í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ ì¡°ì¹˜í• ê²ƒì„ ê¶Œìž¥í•œë‹¤. * ì˜êµ¬ì ë³¼ë¥¨ì„ ë¯¸ë¦¬ ìƒì„±í•´ ì¼ì‹œì ë°ì´í„°ì— 필요한 ê³µê°„ì„ í™•ë³´í•œë‹¤. * **cubrid.conf**\ì—서 **temp_file_max_size_in_pages** 파ë¼ë¯¸í„°ë¥¼ ì„¤ì •í•´ 질ì˜ë¥¼ ìˆ˜í–‰í• ë•Œ ì¼ì‹œì ë³¼ë¥¨ì— ì‚¬ìš©ë˜ëŠ” ê³µê°„ì˜ í¬ê¸°ë¥¼ ì œí•œí•œë‹¤(기본ì 으로는 ì œí•œ ì—†ìŒ). ì¼ì‹œì 볼륨(temporary temp volume)ì´ í•œë²ˆ ìƒì„±ë˜ë©´ ë°ì´í„°ë² ì´ìŠ¤ê°€ 재시작ë 때까지 ìœ ì§€ë˜ë©° í¬ê¸°ë¥¼ ì¤„ì¼ ìˆ˜ 없다. í¬ê¸°ê°€ 너무 í° ê²½ìš° ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 재시작해 ì¼ì‹œì ë³¼ë¥¨ì´ ìžë™ìœ¼ë¡œ ì‚ì œë˜ë„ë¡ í•´ì•¼í•œë‹¤. * **ì¼ì‹œì ë³¼ë¥¨ì˜ íŒŒì¼ëª…**: ì¼ì‹œì ë³¼ë¥¨ì˜ íŒŒì¼ëª… 형ì‹ì€ *db_name*\ **_t**\ *num* ì´ë©°, 여기서 *db_name* ì€ ë°ì´í„°ë² ì´ìŠ¤ëª…ì„, *num* ì€ ë³¼ë¥¨ ì‹ë³„ìžë¥¼ 나타낸다. 볼륨 ì‹ë³„ìžëŠ” 32766부터 1씩 ê°ì†Œí•œë‹¤. * **ì¼ì‹œì ë³¼ë¥¨ì˜ í¬ê¸° ì„¤ì •**: ìƒì„±ë ì¼ì‹œì ë³¼ë¥¨ì˜ ìˆ˜ëŠ” 트랜ìžì…˜ ì²˜ë¦¬ì— í•„ìš”í•œ 공간 í¬ê¸°ì— ë”°ë¼ ì‹œìŠ¤í…œì—서 ê²°ì •í•œë‹¤. 그러나 사용ìžê°€ 시스템 파ë¼ë¯¸í„° ì„¤ì • 파ì¼(**cubrid.conf**)ì—서 **temp_file_max_size_in_pages** 파ë¼ë¯¸í„° ê°’ì„ ì„¤ì •í•´ì„œ ì´ ì¼ì‹œì 볼륨 í¬ê¸°ë¥¼ ì œí•œí• ìˆ˜ë„ ìžˆë‹¤. ê¸°ë³¸ê°’ì€ ì—¬ìœ ê³µê°„ì´ ìžˆëŠ” 한 ì¼ì‹œì ë³¼ë¥¨ì„ ë¬´ì œí•œìœ¼ë¡œ ìƒì„±í• 수 있ìŒì„ 나타내는 -1ì´ë‹¤. **temp_file_max_size_in_pages** 파ë¼ë¯¸í„° ê°’ì´ 0으로 ì„¤ì •ëœ ê²½ìš° ì¼ì‹œì ë³¼ë¥¨ì´ ìƒì„±ë˜ì§€ ì•Šê³ , ì‹œìŠ¤í…œì€ ì¼ì‹œì ë°ì´í„°ì— í• ë‹¹ëœ ì˜êµ¬ì 볼륨만 사용한다. * **ì¼ì‹œì ë³¼ë¥¨ì˜ ì €ìž¥ 위치 ì„¤ì •**: 기본ì 으로 ì¼ì‹œì ë³¼ë¥¨ì€ ìµœì´ˆ ë°ì´í„°ë² ì´ìФ ë³¼ë¥¨ì´ ìƒì„±ëœ ìœ„ì¹˜ì— ìƒì„±ë˜ë‚˜ 사용ìžê°€ **temp_volume_path** 파ë¼ë¯¸í„° ê°’ì„ ì„¤ì •í•´ ì¼ì‹œì ë³¼ë¥¨ì„ ì €ìž¥í• ë‹¤ë¥¸ ë””ë ‰í„°ë¦¬ë¥¼ ì§€ì •í• ìˆ˜ë„ ìžˆë‹¤. * **ì¼ì‹œì 볼륨 ì‚ì œ**: ì¼ì‹œì ë³¼ë¥¨ì€ ë°ì´í„°ë² ì´ìŠ¤ê°€ 실행 중ì—ë§Œ 존재하므로 서버가 실행 ì¤‘ì¼ ë•Œ ì¼ì‹œì ë³¼ë¥¨ì„ ì‚ì œí•´ì„œëŠ” 안 ëœë‹¤. ì¼ì‹œì ë³¼ë¥¨ì€ ë°ì´í„°ë² ì´ìФ 서버가 ì •ìƒì 으로 종료ë 때 ì‚ì œë˜ë©°, ë°ì´í„°ë² ì´ìФ 서버가 ë¹„ì •ìƒì 으로 종료ë 경우 서버가 재시작ë 때 ì‚ì œëœë‹¤. .. note:: ì¼ë°˜ì 으로 ì˜êµ¬ì ë³¼ë¥¨ì€ ì˜êµ¬ì ë°ì´í„°ë¥¼ ì €ìž¥í•˜ëŠ” ë° ì‚¬ìš©ë˜ê³ , ì¼ì‹œì ë³¼ë¥¨ì€ ì¼ì‹œì ë°ì´í„°ë¥¼ ì €ìž¥í•˜ëŠ” ë° ì‚¬ìš©ëœë‹¤. ì¼ì‹œì ë°ì´í„° ì €ìž¥ì„ ìœ„í•´ ì˜êµ¬ì ë³¼ë¥¨ì„ í• ë‹¹í• ìˆ˜ëŠ” 있으나 ì¼ì‹œì 볼륨ì—는 ì ˆëŒ€ ì˜êµ¬ì ë°ì´í„°ê°€ ì €ìž¥ë˜ì§€ 않는다. **ë³´ê´€ 로그(Archive Log)** ë³´ê´€ 로그는 ìµœê·¼ì˜ ë³€ê²½ 사í•ì„ í¬í•¨í•˜ê³ 있는 활성 로그(active log) ê³µê°„ì´ ëª¨ë‘ ì‚¬ìš©ëœ í›„ì— ì§€ì†ì 으로 ìƒì„±ë˜ëŠ” 로그를 보관하기 위한 볼륨ì´ë‹¤. 시스템 파ë¼ë¯¸í„° **log_max_archives** ì˜ ê°’ì´ 0보다 í¬ê²Œ ì„¤ì •ëœ ê²½ìš° 활성 로그 ë³¼ë¥¨ì˜ ê³µê°„ì´ ì†Œì§„ëœ í›„ì— ë³´ê´€ 로그 ë³¼ë¥¨ì´ ì¶”ê°€ëœë‹¤. ì œí’ˆ 설치 시ì—는 0으로 ì„¤ì •ë˜ì–´ 있다. ë³´ê´€ 로그 ë³¼ë¥¨ì€ **log_max_archives** ì˜ ì„¤ì • ê°’ë§Œí¼ ë³¼ë¥¨ 파ì¼ì´ ìœ ì§€ëœë‹¤. ë””ìŠ¤í¬ ê³µê°„ 확보를 위해 불필요한 ë³´ê´€ 로그는 ì‹œìŠ¤í…œì˜ ì„¤ì •ì— ì˜í•´ ì‚ì œë˜ì–´ì•¼ 하지만, ë°ì´í„°ë² ì´ìФ ë³µêµ¬ì— ì‚¬ìš©í•˜ë ¤ë©´ ì´ ê°’ì„ ì ì ˆí•˜ê²Œ ì„¤ì •í•´ì•¼ 한다. ì´ì— 대한 ìžì„¸í•œ ë‚´ìš©ì€ :ref:`managing-archive-logs` 를 ì°¸ê³ í•œë‹¤. **백그ë¼ìš´ë“œ ë³´ê´€ 로그(Background Archive Log)** 백그ë¼ìš´ë“œ ë³´ê´€ 로그(background archive log)는 백그ë¼ìš´ë“œì—서 로그 ë³´ê´€ 작업(log archiving)ì„ ìˆ˜í–‰í• ë•Œ 사용하는 볼륨ì´ë‹¤. 백업 볼륨 ^^^^^^^^^ 백업 ë³¼ë¥¨ì€ ë°ì´í„°ë² ì´ìŠ¤ì— ëŒ€í•œ 스냅샷으로서, ì´ëŸ¬í•œ 백업 볼륨과 로그 ë³¼ë¥¨ì„ ê¸°ë°˜ìœ¼ë¡œ íŠ¹ì • 시ì 까지 ë°œìƒí•œ 트랜ìžì…˜ì„ ë³µêµ¬í• ìˆ˜ 있다. 사용ìžëŠ” **cubrid backupdb** ìœ í‹¸ë¦¬í‹°ë¥¼ 통해 ë°ì´í„°ë² ì´ìФ 복구를 위해 필요한 ëª¨ë“ ë°ì´í„°ë¥¼ ë³µì‚¬í• ìˆ˜ 있으며, ë°ì´í„°ë² ì´ìФ 환경 ì„¤ì • 파ì¼(**cubrid.conf**)ì˜ **backup_volume_max_size_bytes** 파ë¼ë¯¸í„° ê°’ì„ ì„¤ì •í•˜ì—¬ 백업 ë³¼ë¥¨ì˜ ë¶„í• í¬ê¸°ë¥¼ ì¡°ì •í• ìˆ˜ 있다. ë°ì´í„°ë² ì´ìФ 서버 ----------------- **DB 서버 프로세스** ê° ë°ì´í„°ë² ì´ìФì—는 한 ê°œì˜ ì„œë²„ 프로세스가 존재한다. 서버 프로세스는 CUBRID ë°ì´í„°ë² ì´ìФ 서버를 구성하는 핵심 프로세스로 ë°ì´í„°ë² ì´ìФ íŒŒì¼ ë° ë¡œê·¸ íŒŒì¼ ë“±ì— ì§ì ‘ ì ‘ê·¼í•˜ì—¬, 사용ìžì˜ ìš”ì²ì„ 처리한다. í´ë¼ì´ì–¸íЏ 프로세스는 서버 프로세스와 TCP/IP í†µì‹ ì„ í†µí•´ ì ‘ì†í•˜ë©°, í•˜ë‚˜ì˜ ì„œë²„ 프로세스는 ìŠ¤ë ˆë“œë¥¼ ìƒì„±í•´ì„œ ë‹¤ìˆ˜ì˜ í´ë¼ì´ì–¸íЏ í”„ë¡œì„¸ìŠ¤ì˜ ìš”ì² ìž‘ì—…ì„ ì²˜ë¦¬í•œë‹¤. ë°ì´í„°ë² ì´ìŠ¤ë³„, 즉 서버 프로세스별로 시스템 파ë¼ë¯¸í„° ì„¤ì •ì„ ì§€ì •í• ìˆ˜ 있으며 서버 프로세스는 **max_clients** 파ë¼ë¯¸í„° 값으로 ì§€ì •ëœ ìˆ˜ë§Œí¼ í´ë¼ì´ì–¸íЏ í”„ë¡œì„¸ìŠ¤ì˜ ì ‘ì†ì´ 가능하다. **마스터 프로세스** 마스터 프로세스는 í´ë¼ì´ì–¸íЏ 프로세스가 서버 í”„ë¡œì„¸ìŠ¤ì— ì ‘ì†í•˜ì—¬ í†µì‹ í• ìˆ˜ 있게 하는 중개 프로세스로서, 호스트별로 한 개씩 ë™ìž‘한다. (ì •í™•ížˆëŠ” 시스템 파ë¼ë¯¸í„° 파ì¼ì¸ **cubrid.conf** ì— ì§€ì •ë˜ëŠ” ì ‘ì† í¬íЏ 번호별로 í•˜ë‚˜ì”©ì˜ ë§ˆìŠ¤í„° 프로세스가 존재한다.) 마스터 프로세스는 ì§€ì •ëœ TCP/IP í¬íŠ¸ì— ëŒ€ê¸°í•˜ê³ ìžˆê³ , í´ë¼ì´ì–¸íЏ 프로세스는 해당 TCP/IP í¬íŠ¸ë¡œ 마스터 í”„ë¡œì„¸ìŠ¤ì— ì ‘ì†í•œ 후 마스터 프로세스가 ì§€ì •ëœ ë°ì´í„°ë² ì´ìФ ì´ë¦„ì— ë”°ë¼ í•´ë‹¹ 서버 프로세스로 소켓 í¬íŠ¸ë¥¼ 변경하여 ì ‘ì†ì„ 처리한다. **실행 모드** 서버 프로세스를 ì œì™¸í•œ CUBRIDì˜ í”„ë¡œê·¸ëž¨ë“¤ì€ ì¢…ë¥˜ì— ë”°ë¼ ë‘ ê°€ì§€ 실행 모드가 있다. 실행 모드는 í´ë¼ì´ì–¸íЏ/서버 모드(client/server mode)와 ë…립 모드(standalone mode)로 나뉜다. * í´ë¼ì´ì–¸íЏ/서버 모드는 해당 í”„ë¡œê·¸ëž¨ì´ í´ë¼ì´ì–¸íЏ 프로세스로서 ë™ìž‘하여 서버 í”„ë¡œì„¸ìŠ¤ì— ì ‘ì†í•˜ëŠ” ë°©ì‹ì´ë‹¤. * ë…립 모드는 해당 í”„ë¡œê·¸ëž¨ì´ ì„œë²„ í”„ë¡œì„¸ìŠ¤ì˜ ê¸°ëŠ¥ì„ í¬í•¨í•˜ê³ 있어 ì§ì ‘ ë°ì´í„°ë² ì´ìФ 파ì¼ì— ì ‘ê·¼í•˜ì—¬ 수행하는 ë°©ì‹ì´ë‹¤. 예를 들어, ë°ì´í„°ë² ì´ìФ ìƒì„± ìœ í‹¸ë¦¬í‹°ë‚˜ 복구 ìœ í‹¸ë¦¬í‹° ë“±ì€ ë‹¤ìˆ˜ 사용ìžê°€ ë°ì´í„°ë² ì´ìŠ¤ì— ì ‘ê·¼í•˜ëŠ” ê²ƒì„ ë§‰ê³ í•´ë‹¹ í”„ë¡œê·¸ëž¨ë§Œì´ ì˜¨ì „ížˆ ì ìœ í•´ì„œ ìž‘ì—…í• ìˆ˜ 있ë„ë¡ ë…립 모드로 실행ëœë‹¤. ë˜ ë‹¤ë¥¸ 예로, CSQL ì¸í„°í”„리터는 í´ë¼ì´ì–¸íЏ/서버 모드로 ë™ìž‘하여 서버 í”„ë¡œì„¸ìŠ¤ì— ì ‘ì†í• ìˆ˜ë„ ìžˆê³ , ë…립 모드로 ë™ìž‘하여 ë°ì´í„°ë² ì´ìŠ¤ì— ì ‘ê·¼í•˜ì—¬ SQL ë¬¸ì„ ì‹¤í–‰í• ìˆ˜ë„ ìžˆë‹¤. ì°¸ê³ ë¡œ, í•˜ë‚˜ì˜ ë°ì´í„°ë² ì´ìŠ¤ì— ì„œë²„ 프로세스와 ë…립 모드로 실행ë˜ëŠ” í”„ë¡œê·¸ëž¨ì´ ë™ì‹œì— ì ‘ê·¼í• ìˆ˜ëŠ” 없다. 브로커 ------ 브로커는 다양한 ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ ë°ì´í„°ë² ì´ìФ ì„œë²„ì— ì—°ê²°í• ìˆ˜ 있ë„ë¡ ì¤‘ê³„í•˜ëŠ” 미들웨어ì´ë‹¤. 브로커를 í¬í•¨í•˜ëŠ” í브리드 ì‹œìŠ¤í…œì€ ì•„ëž˜ 그림과 ê°™ì´, ì‘ìš© í´ë¼ì´ì–¸íЏ(application), cub_broker, cub_cas, ë°ì´í„°ë² ì´ìФ 서버(cub_server)를 í¬í•¨í•œ 다중 계층 구조를 가진다. .. image:: images/image3.png **ì‘ìš© í´ë¼ì´ì–¸íЏ** ì‘ìš© í´ë¼ì´ì–¸íЏì—서 ì‚¬ìš©í• ìˆ˜ 있는 ì¸í„°íŽ˜ì´ìŠ¤ëŠ” C-API(CCI, CUBRID Call Interface), ODBC, JDBC, PHP, Python, Ruby, OLEDB, ADO.NET, Node.js ë“±ì´ ìžˆë‹¤. **cub_cas** cub_cas(CUBRID Common Application Server, 브로커 ì‘ìš© 서버, ë˜ëŠ” 줄여서 ì‘ìš© 서버, CASë¼ê³ ë„ í•¨)는 ì—°ê²°ì„ ìš”ì²í•˜ëŠ” ëª¨ë“ ì¢…ë¥˜ì˜ ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ 사용하는 공용 ì‘ìš© 서버 ì—í• ì„ í•œë‹¤. ë˜í•œ, cub_cas는 ë°ì´í„°ë² ì´ìФ ì„œë²„ì˜ í´ë¼ì´ì–¸íŠ¸ë¡œ ë™ìž‘하여 í´ë¼ì´ì–¸íŠ¸ì˜ ìš”ì²ì— ì˜í•´ ë°ì´í„°ë² ì´ìФ 서버와 ì—°ê²°ì„ ì œê³µí•œë‹¤. 서비스 í’€(service pool) ë‚´ì—서 구ë™ë˜ëŠ” cub_casì˜ ê°œìˆ˜ëŠ” **cubrid_broker.conf** ì„¤ì • 파ì¼ì— ì§€ì •í• ìˆ˜ 있으며, cub_brokerì— ì˜í•´ ë™ì 으로 ì¡°ì •ëœë‹¤. cub_cas는 CUBRID ë°ì´í„°ë² ì´ìФ ì„œë²„ì˜ í´ë¼ì´ì–¸íЏ ë¼ì´ë¸ŒëŸ¬ë¦¬ì™€ ë§í¬ë˜ëŠ” 프로그램으로 ë°ì´í„°ë² ì´ìФ 서버 프로세스(cub_server)ì—는 í´ë¼ì´ì–¸íЏ 모듈로 ë™ìž‘하며, 쿼리 파싱ì´ë‚˜ 최ì í™”, 실행 ê³„íš ìƒì„± ë“±ì˜ ìž‘ì—…ì´ í´ë¼ì´ì–¸íЏ 모듈ì—서 수행ëœë‹¤. **cub_broker** cub_broker는 ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì™€ cub_cas 사ì´ì˜ ì—°ê²°ì„ ì¤‘ê³„í•˜ëŠ” ê¸°ëŠ¥ì„ ìˆ˜í–‰í•œë‹¤. 즉, ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ ì ‘ê·¼ì„ ìš”ì²í•˜ë©´, cub_broker는 ê³µìœ ë©”ëª¨ë¦¬(shared memory)를 통해 cub_casì˜ ìƒíƒœë¥¼ 파악하여 ì ‘ê·¼ 가능한 cub_casì—게 ìš”ì²ì„ ì „ë‹¬í•˜ê³ , 해당 cub_cas로부터 ì „ë‹¬ ë°›ì€ ìš”ì²ì— 대한 처리 결과를 ì‘ìš© í´ë¼ì´ì–¸íЏì—게 반환한다. ë˜í•œ, cub_broker는 서비스 í’€ ë‚´ì˜ cub_cas 개수를 ì¡°ì •í•˜ì—¬ 서버 부하를 ê´€ë¦¬í•˜ê³ , cub_casì˜ êµ¬ë™ ìƒíƒœë¥¼ ëª¨ë‹ˆí„°ë§ ë° ê´€ë¦¬í•œë‹¤. 만약, ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ ìš”ì²ì„ cub_cas 1ì—게 ì „ë‹¬í•˜ì˜€ëŠ”ë°, ë¹„ì •ìƒì ì¸ ì¢…ë£Œë¡œ ì¸í•´ cub_cas 1ê³¼ì˜ ì—°ê²°ì´ ì‹¤íŒ¨í•˜ë©´, cub_broker는 ì‘ìš© í´ë¼ì´ì–¸íЏì—게 ì—°ê²° ì‹¤íŒ¨ì— ê´€í•œ ì—러 메시지를 ì „ì†¡í•˜ê³ cub_cas 1ì„ ìž¬êµ¬ë™í•œë‹¤. 새ë¡ê²Œ 구ë™ëœ cub_cas 1ì€ ì •ìƒì ì¸ ëŒ€ê¸° ìƒíƒœê°€ ë˜ì–´, 새로운 ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ ìš”ì²ì— ì˜í•´ 재연결ëœë‹¤. **ê³µìœ ë©”ëª¨ë¦¬** ê³µìœ ë©”ëª¨ë¦¬ì—는 cub_casì˜ ìƒíƒœ ì •ë³´ê°€ ì €ìž¥ë˜ë©°, cub_broker는 ê³µìœ ë©”ëª¨ë¦¬ì— ì €ìž¥ëœ cub_casì˜ ìƒíƒœ ì •ë³´ë¥¼ 참조하여 ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì™€ì˜ ì—°ê²°ì„ ì¤‘ê³„í•œë‹¤. ê³µìœ ë©”ëª¨ë¦¬ì— ì €ìž¥ëœ cub_casì˜ ìƒíƒœ ì •ë³´ë¥¼ 통해 시스템 관리ìžëŠ” ì–´ë–¤ cub_casê°€ 현재 ìž‘ì—…ì„ ìˆ˜í–‰ì¤‘ì¸ì§€, ì–´ë–¤ ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì˜ ìš”ì²ì´ 처리 중ì¸ì§€ë¥¼ 확ì¸í• 수 있다. ì¸í„°íŽ˜ì´ìФ 모듈 --------------- CUBRID는 다양한 ì‘ìš© í”„ë¡œê·¸ëž˜ë° ì¸í„°íŽ˜ì´ìФ(API: Application Programming Interface)를 ì œê³µí•œë‹¤. ì§€ì›ë˜ëŠ” API는 다ìŒê³¼ 같다. * JDBC: Java 환경ì—서 ë°ì´í„°ë² ì´ìФ ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ìž‘ì„±í•˜ëŠ” 표준 API * ODBC: Windows 환경ì—서 ë°ì´í„°ë² ì´ìФ ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ìž‘ì„±í•˜ëŠ” 표준 API. ODBC 드ë¼ì´ë²„는 CCI ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 기반으로 작성ë˜ì—ˆë‹¤. * OLE DB: Windows 환경ì—서 COM ë°©ì‹ìœ¼ë¡œ ë°ì´í„°ë² ì´ìФ ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ìž‘ì„±í•˜ëŠ” API. OLE DB 프로바ì´ë”는 CCI ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 기반으로 작성ë˜ì—ˆë‹¤. * PHP: PHP 환경ì—서 ë°ì´í„°ë² ì´ìФ ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ìž‘ì„±í•˜ëŠ” API. PHP 드ë¼ì´ë²„는 CCI ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 기반으로 작성ë˜ì—ˆë‹¤. * CCI: CUBRIDì—서 ì œê³µí•˜ëŠ” C 언어 ì¸í„°íŽ˜ì´ìФ. C ë¼ì´ë¸ŒëŸ¬ë¦¬ 형태로 ì œê³µëœë‹¤. ê° ì¸í„°íŽ˜ì´ìФ ëª¨ë“ˆë“¤ì€ ëª¨ë‘ ë¸Œë¡œì»¤ë¥¼ 통해서 ë°ì´í„°ë² ì´ìФ ì„œë²„ì— ì ‘ê·¼í•˜ê²Œ ëœë‹¤. 브로커는 다양한 ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ ë°ì´í„°ë² ì´ìФ ì„œë²„ì— ì—°ê²°í• ìˆ˜ 있ë„ë¡ ì¤‘ê³„í•˜ëŠ” 미들웨어로, ê° ì¸í„°íŽ˜ì´ìФ ëª¨ë“ˆì˜ ìš”ì²ì„ 받아서 ë°ì´í„°ë² ì´ìФ ì„œë²„ì˜ í´ë¼ì´ì–¸íЏ ë¼ì´ë¸ŒëŸ¬ë¦¬ì—서 ì œê³µí•˜ëŠ” native-C API를 호출하게 ëœë‹¤. .. FIXME: ì¸í„°íŽ˜ì´ìФ ëª¨ë“ˆì˜ ìµœì‹ ì •ë³´ëŠ” http://www.cubrid.org/wiki_apis\ì—서 확ì¸í• 수 있다. CUBRIDì˜ íŠ¹ì§• ============= **완벽한 트랜ìžì…˜ ì§€ì›** 트랜ìžì…˜ì˜ ì›ìžì„±(atomicity), ì¼ê´€ì„±(consistency), 격리성(isolation), ì§€ì†ì„±(durability)ì„ ì™„ë²½í•˜ê²Œ 보장하기 위해 CUBRID는 다ìŒì˜ ê¸°ëŠ¥ì„ ì¶©ì‹¤í•˜ê²Œ ì§€ì›í•œë‹¤. * 트랜ìžì…˜ ë‹¨ìœ„ì˜ commit, rollback, savepoint ì§€ì› * 시스템ì´ë‚˜ ë°ì´í„°ë² ì´ìŠ¤ì˜ ìž¥ì• ì‹œ 트랜ìžì…˜ ì¼ê´€ì„± 보장 * ë³µì œ ê°„ 트랜ìžì…˜ ì¼ê´€ì„± 보장 * ë°ì´í„°ë² ì´ìФ, í…Œì´ë¸”, ë ˆì½”ë“œ 등 다중 단위 ìž ê¸ˆ(multiple granularity locking) ì§€ì› * êµì°© ìƒíƒœ(deadlock) ìžë™ í•´ê²° **ë°ì´í„°ë² ì´ìФ 백업 ë° ë³µêµ¬** ë°ì´í„°ë² ì´ìФ ë°±ì—…ì€ CUBRID ë°ì´í„°ë² ì´ìФ 볼륨, ì œì–´ 파ì¼, 로그 파ì¼ì„ ì €ìž¥í•˜ëŠ” 작업ì´ê³ , ë°ì´í„°ë² ì´ìФ 복구는 백업 ìž‘ì—…ì— ì˜í•´ ìƒì„±ëœ 백업 파ì¼, 활성 로그, ë³´ê´€ 로그를 ì´ìš©í•˜ì—¬ íŠ¹ì • 시ì ì˜ ë°ì´í„°ë² ì´ìŠ¤ë¡œ 복구하는 작업ì´ë‹¤. ì´ ë•Œ, 복구 í™˜ê²½ì€ ë°±ì—… 환경과 ë™ì¼í•œ ìš´ì˜ì²´ì œ ë° ë™ì¼ ë²„ì „ì˜ CUBRIDê°€ 설치ë˜ì–´ì•¼ 한다. CUBRIDê°€ ì§€ì›í•˜ëŠ” 백업 ë°©ì‹ìœ¼ë¡œëŠ” 온ë¼ì¸ 백업, 오프ë¼ì¸ 백업, ì¦ë¶„ ë°±ì—…ì´ ìžˆê³ , 복구 ë°©ì‹ìœ¼ë¡œëŠ” ì¦ë¶„ ë°±ì—…ì— ì˜í•œ 복구, 부분 복구, ì „ì²´ 복구가 있다. **í…Œì´ë¸” ë¶„í• - 파티션** ë¶„í• ê¸°ë²•(partitioning)ì€ í•˜ë‚˜ì˜ í…Œì´ë¸”ì„ ì—¬ëŸ¬ ê°œì˜ ë…립ì ì¸ ë…¼ë¦¬ì 단위로 ë¶„í• í•˜ëŠ” ê¸°ë²•ì„ ê°€ë¦¬í‚¨ë‹¤. ê° ë…¼ë¦¬ì 단위를 ë¶„í• (partition)ì´ë¼ 부르며, ê° ë¶„í• ì„ ì„œë¡œ 다른 물리ì ê³µê°„ì— ë‚˜ëˆ„ì–´ ì €ìž¥í•˜ë„ë¡ í•˜ì—¬ ë ˆì½”ë“œë¥¼ ê²€ìƒ‰í• ë•Œ 해당 ë¶„í• ë§Œ ì ‘ê·¼í• ìˆ˜ 있ë„ë¡ í•˜ì—¬ 성능 í–¥ìƒì„ ê¸°ëŒ€í• ìˆ˜ 있다. CUBRIDê°€ ì œê³µí•˜ëŠ” ë¶„í• ê¸°ë²•ì€ ë‹¤ìŒê³¼ 같다. * ë ˆì¸ì§€ ë¶„í• ê¸°ë²• : 칼럼 ê°’ì˜ ë²”ìœ„ë¥¼ 기준으로 í…Œì´ë¸”ì„ ë¶„í• í•˜ëŠ” 기법 * 해시 ë¶„í• ê¸°ë²• : ì¹¼ëŸ¼ì˜ í•´ì‹œê°’ì„ ê¸°ì¤€ìœ¼ë¡œ ë¶„í• í•˜ëŠ” 기법 * 리스트 ë¶„í• ê¸°ë²• : 칼럼 ê°’ì˜ ëª©ë¡ì„ 기준으로 ë¶„í• í•˜ëŠ” 기법 **다양한 ì¸ë±ìФ 기능 ì§€ì›** CUBRID는 다양한 ì¡°ê±´ 질ì˜ë¥¼ ìˆ˜í–‰í• ë•Œ 가급ì ì¸ë±ìŠ¤ë¥¼ í™œìš©í• ìˆ˜ 있ë„ë¡ ë‹¤ìŒê³¼ ê°™ì€ ì¸ë±ìФ ê¸°ëŠ¥ì„ ì§€ì›í•œë‹¤. * 내림차순 ì¸ë±ìФ 스캔(Descending Index Scan): 별ë„ì˜ ë‚´ë¦¼ì°¨ìˆœ ì¸ë±ìŠ¤ë¥¼ ìƒì„±í•˜ì§€ ì•Šì•„ë„ ì˜¤ë¦„ì°¨ìˆœ ì¸ë±ìŠ¤ë§Œìœ¼ë¡œ 내림차순 ì¸ë±ìФ 스캔 가능 * ì»¤ë²„ë§ ì¸ë±ìФ(Covering Index): **SELECT** ë¦¬ìŠ¤íŠ¸ì˜ ì¹¼ëŸ¼ì´ ì¸ë±ìŠ¤ì— í¬í•¨ëœ 경우 ì¸ë±ìФ 스캔만으로 요구하는 ë°ì´í„°ë¥¼ ê°€ì ¸ì˜¬ 수 ìžˆìŒ * **ORDER BY** ì ˆ 최ì í™”: 요구하는 ë ˆì½”ë“œì˜ ì •ë ¬ 순서가 ì¸ë±ìŠ¤ì˜ ìˆœì„œì™€ 같다면 별ë„ì˜ ì •ë ¬ ìž‘ì—…ì´ í•„ìš” ì—†ìŒ(Skip ORDER BY) * **GROUP BY** ì ˆ 최ì í™”: **GROUP BY** ì ˆì— ìžˆëŠ” ëª¨ë“ ì¹¼ëŸ¼ì´ ì¸ë±ìŠ¤ì— í¬í•¨ëœë‹¤ë©´ ì§ˆì˜ ìˆ˜í–‰ 시 ì¸ë±ìŠ¤ë¥¼ ì‚¬ìš©í• ìˆ˜ 있어 별ë„ì˜ ì •ë ¬ ìž‘ì—…ì´ í•„ìš” ì—†ìŒ(Skip GROUP BY) **HA 기능** CUBRID는 하드웨어, 소프트웨어, ë„¤íŠ¸ì›Œí¬ ë“±ì— ìž¥ì• ê°€ ë°œìƒí•´ë„ ì§€ì†ì ì¸ ì„œë¹„ìŠ¤ê°€ 가능하게 하는 HA(High Availability) ê¸°ëŠ¥ì„ ì œê³µí•œë‹¤. CUBRIDì˜ HA ê¸°ëŠ¥ì€ shared-nothing 구조ì´ë©°, CUBRID Heartbeatì„ ì´ìš©í•˜ì—¬ 시스템과 CUBRIDì˜ ìƒíƒœë¥¼ 실시간으로 ê°ì‹œí•˜ê³ ìž¥ì• ë°œìƒ ì‹œ ì ˆì²´(failover)를 수행한다. CUBRID HA 환경ì—서 마스터 ë°ì´í„°ë² ì´ìФ 서버로부터 ìŠ¬ë ˆì´ë¸Œ ë°ì´í„°ë² ì´ìФ ì„œë²„ë¡œì˜ ë°ì´í„° ë™ê¸°í™”를 위해 ë‹¤ìŒ ë‘ ë‹¨ê³„ë¥¼ 수행한다. * 마스터 ë°ì´í„°ë² ì´ìФ 서버ì—서 ìƒì„±ë˜ëŠ” 트랜ìžì…˜ 로그를 실시간으로 다른 ë…¸ë“œì— ë³µì œí•˜ëŠ” 트랜ìžì…˜ 로그 다중화 단계 * 실시간으로 ë³µì œë˜ëŠ” 트랜ìžì…˜ 로그를 ë¶„ì„하여 ìŠ¬ë ˆì´ë¸Œ ë°ì´í„°ë² ì´ìФ 서버로 ë°ì´í„°ë¥¼ ë°˜ì˜í•˜ëŠ” 트랜ìžì…˜ 로그 ë°˜ì˜ ë‹¨ê³„ **Java ì €ìž¥ í”„ë¡œì‹œì €** ì €ìž¥ í”„ë¡œì‹œì €ëŠ” 미들웨어ì—서 실행ë˜ëŠ” 로ì§ê³¼ ë°ì´í„°ë² ì´ìФì—서 실행ë˜ëŠ” 로ì§ì„ 분리하여 ì‘ìš© í”„ë¡œê·¸ëž¨ì˜ ë³µìž¡ì„±ì„ ì¤„ì´ê³ , 재사용성, 보안성, ì„±ëŠ¥ì„ í–¥ìƒì‹œí‚¬ 수 있는 기법ì´ë‹¤. CUBRID는 범용 ì–¸ì–´ì¸ Java로 작성ë˜ê³ , Java ê°€ìƒ ë¨¸ì‹ (JVM, Java Virtual Machine)ì—서 구ë™ë˜ëŠ” Java ì €ìž¥ í”„ë¡œì‹œì €ë¥¼ ì œê³µí•œë‹¤. CUBRIDì—서 Java ì €ìž¥ í”„ë¡œì‹œì €ë¥¼ 실행하기 위해서는 다ìŒê³¼ ê°™ì€ ì ˆì°¨ê°€ 수행ë˜ì–´ì•¼ 한다. * Java ê°€ìƒ ë¨¸ì‹ ì„¤ì¹˜ ë° í™˜ê²½ ì„¤ì • * Java 소스 íŒŒì¼ ìž‘ì„± * ì»´íŒŒì¼ ë° Java 리소스 로딩 * ë¡œë”©ëœ Java í´ëž˜ìŠ¤ë¥¼ ë°ì´í„°ë² ì´ìФì—서 í˜¸ì¶œí• ìˆ˜ 있ë„ë¡ ë“±ë¡ * Java ì €ìž¥ í”„ë¡œì‹œì € 서버를 êµ¬ë™ (:ref:`cubrid-javasp-server`\ 를 ì°¸ê³ ) * Java ì €ìž¥ í”„ë¡œì‹œì € 호출 **í´ë¦ ì¹´ìš´í„°** ì¸í„°ë„· 환경ì—서 ë°ì´í„° 검색 시 보통 검색 ì´ë ¥ì„ 남기기 위해 조회수와 ê°™ì€ ì¹´ìš´í„°ë¥¼ ë°ì´í„°ë² ì´ìŠ¤ì— ìœ ì§€í•œë‹¤. ì¼ë°˜ì 으로 ìœ„ì˜ ì‹œë‚˜ë¦¬ì˜¤ëŠ” **SELECT** ë¬¸ì„ ì´ìš©í•˜ì—¬ ë°ì´í„°ë¥¼ ê²€ìƒ‰í•˜ê³ , 검색한 질ì˜ì— 대한 조회수를 ì¦ê°€ 시키기 위해 다시 **UPDATE** ë¬¸ì„ í†µí•´ 구현하는 ê²ƒì´ ì¼ë°˜ì ì¸ ë°©ì‹ì´ì—ˆë‹¤. ì´ ë°©ì‹ì€ 한 ë°ì´í„°ì— **SELECT** ê°€ 집중ë 때 **UPDATE** ì— ëŒ€í•œ ìž ê¸ˆ(Lock) ê²½ìŸì´ 가중ë˜ì–´ 급격한 성능 ì €í•˜ê°€ ë°œìƒí•˜ëŠ” 단ì ì´ ì¡´ìž¬í•œë‹¤. ì´ì— CUBRID는 ì¸í„°ë„· 환경ì—서 ì‚¬ìš©ìž íŽ¸ì˜ì„± ë° ì„±ëŠ¥ 측면ì—서 최ì í™”ëœ ê¸°ëŠ¥ì„ ì œê³µí•˜ê¸° 위해 í´ë¦ ì¹´ìš´í„°(Click Counter) ë¼ëŠ” 새로운 ê°œë…ì„ ë„ìž…í•˜ê³ , ì´ë¥¼ 위해 :func:`INCR` 함수 ë° **WITH INCREMENT FOR** êµ¬ë¬¸ì„ ì œê³µí•œë‹¤. **관계형 ë°ì´í„° ëª¨ë¸ í™•ìž¥** * **ì»¬ë ‰ì…˜** 관계형 ë°ì´í„°ë² ì´ìФì—서는 한 ì¹¼ëŸ¼ì´ ì—¬ëŸ¬ ê°œì˜ ê°’ì„ ê°€ì§€ëŠ” ê²ƒì„ í—ˆìš©í•˜ì§€ 않지만, CUBRID는 한 ì¹¼ëŸ¼ì´ ì—¬ëŸ¬ ê°œì˜ ê°’ì„ ê°€ì§€ë„ë¡ ì •ì˜í• 수 있다. ì´ë¥¼ 위해 CUBRIDì—서는 ì»¬ë ‰ì…˜(collection)ì´ë¼ëŠ” ë°ì´í„° íƒ€ìž…ì„ ì œê³µí•˜ëŠ”ë°, ì»¬ë ‰ì…˜ íƒ€ìž…ì€ ì»¬ë ‰ì…˜ ì›ì†Œì˜ 중복 허용 여부와 순서 ìœ ì§€ ì—¬ë¶€ì— ë”°ë¼ í¬ê²Œ **SET**, **MULTISET**, **LIST** ì˜ ì„¸ 종류로 êµ¬ë¶„í• ìˆ˜ 있다. * **SET**: ê° ì›ì†Œì˜ ì¤‘ë³µì„ í—ˆìš©í•˜ì§€ 않는 집합으로서, ì›ì†Œì˜ 나열 순서와 무관하게 중복 ì—†ì´ ì •ë ¬ë˜ì–´ ì €ìž¥ëœë‹¤. * **MULTISET**: ê° ì›ì†Œì˜ ì¤‘ë³µì„ í—ˆìš©í•˜ëŠ” 집합으로서, ì›ì†Œì˜ 나열 순서와 무관하다. * **LIST**: ê° ì›ì†Œì˜ ì¤‘ë³µì„ í—ˆìš©í•˜ëŠ” 집합으로서, **SET**, **MULTISET** ê³¼ 달리 ì›ì†Œì˜ 순서를 ìœ ì§€í•œë‹¤. * **JSON** JavaScript Object Notation (JSON) ì€ ë°ì´í„° êµí™˜ì„ 위한 사실ìƒì˜ í‘œì¤€ì´ ë˜ì—ˆë‹¤. 관계형 ë°ì´í„° 모ë¸ì—서는 ë°˜ ì •í˜• ë°ì´í„° 중 í•˜ë‚˜ì¸ JSONì„ ê°€ì§€ëŠ” ê²ƒì„ í—ˆìš©í•˜ì§€ 않는다. 그러나 í브리드ì—서는 :ref:`SQL JSON 함수<json-fn>`\를 사용하여 JSON 문서를 ìƒì„±í•˜ê³ ì§ˆì˜ í• ìˆ˜ 있다. ë˜í•œ :ref:`JSON ë°ì´í„° 타입<json-data-type>` ì»¬ëŸ¼ì„ ì •ì˜í•˜ê³ JSON 문서를 JSON 타입 ì»¬ëŸ¼ì— ì €ìž¥í• ìˆ˜ 있다. * **ìƒì†** ìƒì†ì€ ìƒìœ„ í´ëž˜ìФ(í…Œì´ë¸”)ì—서 ìƒì„±ëœ 칼럼과 ë©”ì„œë“œë“¤ì„ í•˜ìœ„ í´ëž˜ìФì—서 ìž¬ì‚¬ìš©í• ìˆ˜ 있게 하는 ê°œë…으로, CUBRID는 ìƒì†ì„ ì§€ì›í•¨ìœ¼ë¡œì¨ ìž¬ì‚¬ìš©ì„±ì„ ì œê³µí•œë‹¤. CUBRIDì—서 ì œê³µí•˜ëŠ” ìƒì† ê¸°ëŠ¥ì„ ì´ìš©í•˜ì—¬ ê³µí†µì˜ ì¹¼ëŸ¼ì„ ê°€ì§€ëŠ” ìƒìœ„ í´ëž˜ìŠ¤ë¥¼ ìƒì„±í•˜ê³ , ìƒìœ„ í´ëž˜ìŠ¤ë¥¼ ìƒì†ë°›ì•„ ê³ ìœ í•œ ì¹¼ëŸ¼ì„ ì¶”ê°€í•œ 하위 í´ëž˜ìŠ¤ë¥¼ ìƒì„±í•¨ìœ¼ë¡œì¨, 필요한 칼럼 수를 최소화한 ë°ì´í„°ë² ì´ìФ 모ë¸ë§ì´ 가능해진다.