"큐브리드"의 두 판 사이의 차이
(→참고자료) |
|||
(사용자 3명의 중간 판 18개는 보이지 않습니다) | |||
2번째 줄: | 2번째 줄: | ||
[[파일:큐브리드 글자.png|썸네일|300픽셀|'''큐브리드'''(Cubrid)]] | [[파일:큐브리드 글자.png|썸네일|300픽셀|'''큐브리드'''(Cubrid)]] | ||
− | '''큐브리드'''(Cubrid)는 [[오픈소스]] 기반의 [[관계형 데이터베이스 관리 시스템]](RDBMS)이다. 2006년 2월에 설립된 [[㈜큐브리드]]<!--큐브리드-->가 개발하였고, 2008년 [[네이버㈜]]<!--네이버-->의 계열사로 편입되었다. 이후 기술 개발은 네이버㈜가 담당하고 있으며, 기술 지원은 2010년 12월 | + | '''큐브리드'''(Cubrid)는 [[오픈소스]] 기반의 [[관계형 데이터베이스 관리 시스템]](RDBMS)이다. 2006년 2월에 설립된 [[㈜큐브리드]]<!--큐브리드-->가 개발하였고, 2008년 [[네이버㈜]]<!--네이버-->의 계열사로 편입되었다. 이후 기술 개발은 네이버㈜가 담당하고 있으며, 기술 지원은 2010년 12월 네이버㈜에서 분리 독립한 별도 회사인 [[㈜큐브리드]]가 맡고 있다. 큐브리드는 2011년 11월 대한민국 정부 통합전산센터의 [[클라우드]] 구축 공식 [[데이터베이스 관리 시스템]](DBMS)으로 선정되었다. 2014년 국방통합데이터센터의 표준 데이터베이스 관리 시스템(DBMS)으로 선정되었다. |
==개요== | ==개요== | ||
− | 큐브리드는 [[관계형 데이터베이스 관리 시스템]](RDBMS)으로서 엔터프라이즈 시장에서 요구하는 대용량 [[데이터]] 처리 능력 및 성능, 안정성, 가용성, 관리 편의성을 제공한다. 안시 [[에스큐엘]](Ansi SQL)을 준수하고 있으며, [[고가용성]] | + | 큐브리드는 [[관계형 데이터베이스 관리 시스템]](RDBMS)으로서 엔터프라이즈 시장에서 요구하는 대용량 [[데이터]] 처리 능력 및 성능, 안정성, 가용성, 관리 편의성을 제공한다. 안시 [[에스큐엘]](Ansi SQL)을 준수하고 있으며, [[고가용성]](High Availability) 기능, [[데이터베이스]] 관리 및 마이그레이션을 위한 [[그래픽 유저 인터페이스]](GUI) 기반의 각종 도구를 제공하고 있다. 큐브리드는 3계층 구조를 이루는 응용(Application) - 브로커(Broker) - [[서버]](Server)로 구성되며, 유연하게 시스템을 구축할 수 있어 데이터가 급증하는 [[온라인]] [[트랜잭션]] 처리(OLTP: On-line Transaction Processing) 서비스에 적합하다. 또한, 인터넷 데이터 서비스에 최적화된 데이터베이스 시스템이며, 사용자가 편리하게 사용할 수 있는 다양한 기능을 제공한다. 주요 기능으로는 관계형 데이터베이스 관리 시스템의 기본 기능 지원, 고성능 보장, 대용량 및 확장성 보장, 안정성 및 운영 편의성 제공, 개발 편의성 제공이 있다.<ref name="홈피">큐브리드 공식 홈페이지 - https://www.cubrid.com/</ref> |
− | == | + | 큐브리드 데이터베이스 관리 시스템은 국내 유일의 [[오픈소스]] 데이터베이스 관리 시스템으로 온라인 트랜잭션 처리(OLTP) 업무에 최적화된 개방형 정보 플랫폼이며, GPL(엔진)과 비에스디(BSD) 라이선스가 합쳐진 유연한 오픈소스 라이선스 정책을 가지고 있다. 국내 누적 다운로드 수 25만 건이 넘었으며, 정부통합전산센터의 G-클라우드와 국방통합데이터센터 클라우드의 표준 데이터베이스 관리 시스템으로 사용한다. 네이버㈜, 에쓰오일, 하나투어, 한겨레신문, KBS 등에도 적용된다.<ref>〈[https://cloud.kt.com/portal/ktcloudportal.epc.productintro.ucloud_server_image.CUBRIDDBMS.html Cubrid]〉, 《케이티 클라우드》</ref> |
− | * | + | |
− | * | + | ==연혁== |
− | * | + | {{글 보임 시작}} |
− | * | + | * 1996년 09월 : 웹 [[애플리케이션]] 서버 유니웹(UniWEB) 개발 |
− | * | + | * 1997년 01월 : 3계층 [[클라이언트]] 및 서버 [[중간자]] 비전3(Vision3) 개발 |
− | * | + | * 1999년 07월 : 유니에스큐엘(UniSQL) 4.0K 출시 |
− | * | + | * 2000년 12월 : 통합 애플리케이션 서버 유니캐스(UniCAS) 4.0 출시 |
− | * | + | * 2001년 10월 : 유니에스큐엘 5.0, 유니캐스 4.5 출시 |
− | * | + | * 2002년 06월 : 유니툴 출시 |
− | * | + | * 2003년 01월 : 유니에스큐엘 6.0 출시 |
− | * | + | * 2003년 10월 : 유니에스큐엘 메인 메모리 데이터베이스(MMDB), 모바일 [[데이터베이스]] 2.5 출시 |
− | * | + | * 2004년 04월 : 유니에스큐엘 메인 메모리 데이터베이스 3.0 출시 |
− | * | + | * 2004년 05월 : 유니에스큐엘 모바일 데이터베이스 3.0 출시 |
− | * | + | * 2004년 12월 : 유니에스큐엘 6.2.1 출시 |
− | * | + | * 2005년 03월 : 유니에스큐엘 6.3 출시 |
− | * | + | * 2006년 02월 : 큐브리드 설립, 유니에스큐엘에서 큐브리드로 명칭 변경 |
− | * | + | * 2006년 03월 : 큐브리드 6.4 출시 |
− | * | + | * 2006년 03월 : 새로운 나이스(NEIS) 개통 |
− | * | + | * 2006년 06월 : 큐브리드 6.5 출시 및 무료선언 |
− | * | + | * 2006년 07월 : 코드명 엑스 데이터베이스 관리 시스템(XDBMS), [[네이버㈜]](NHN)와 공동개발 계약 |
− | * | + | * 2006년 09월 : 우수 [[소프트웨어]](Good Software) 인증 |
− | * | + | * 2006년 12월 : 다운로드 6,000건 돌파 |
− | * | + | * 2007년 04월 : 큐브리드 7.0 출시<ref>〈[http://www.unioneinc.co.kr/upload/board/cubrid_product_intro.pdf 큐브리드 제품 소개]〉, 《유니원아이앤씨》</ref> |
− | * | + | * 2008년 09월 : 서치솔루션, 큐브리드 지분 100% 인수 |
− | * | + | * 2008년 11월 : 큐브리드 2008 R1.1 (8.1) 출시 - [[오픈소스]] [[데이터베이스 관리 시스템]] 전환 |
− | * | + | * 2011년 01월 : 서치솔루션에서 지분독립 |
− | * | + | * 2011년 01월 : 엔코아와 전략적 제휴 체결 |
− | * | + | * 2011년 12월 : [[HP]] 이코리아(HP eKorea) 파트너 선정 |
− | * | + | * 2012년 04월 : [[전자정부]] 표준프레임워크 호환성 인증 |
− | * | + | * 2012년 10월 : 솔트웨어와 기술 및 사업협약 체결 |
− | * | + | * 2013년 03월 : 큐브리드 9.1 출시 |
− | * | + | * 2013년 10월 : 큐브리드 9.2 출시 |
− | * | + | * 2013년 10월 : 크로센트와 업무협약 체결 |
− | * | + | * 2014년 06월 : 큐브리드 9.3 출시 |
− | * | + | * 2014년 12월 : 맨텍과 업무협약 체결 |
− | * | + | * 2015년 02월 : 잼투인과 업무협약 체결 |
− | * | + | * 2016년 02월 : 범일정보와 업무협약 체결 |
− | * | + | * 2016년 05월 : 전자정부 표준프레임워크 3.5 호환성 인증 |
− | * | + | * 2016년 05월 : 한국공간정보통신과 지리정보체계(GIS) 분야 업무협약 체결 |
− | * | + | * 2016년 06월 : 에스유소프트와 업무협약 체결 |
− | * | + | * 2016년 08월 : 크로센트와 공공기관 PaaS 생태계 활성화를 위한 양해각서 체결 |
− | * | + | * 2017년 01월 : 큐브리드 대전사무소 개설 |
− | * | + | * 2017년 08월 : 큐브리드 10.1 출시 |
− | * | + | * 2018년 02월 : 쓰리에이치에스와 업무협약 체결 |
− | * | + | * 2018년 05월 : 부설연구소 병역지정업체 선정 |
− | * | + | * 2018년 05월 : [[아사달]]과 업무협약 체결 |
− | * | + | * 2018년 08월 : 네이버 비즈니스 플랫폼(NBP)과 네이버㈜ 클라우드 플랫폼 업무협약 |
− | * | + | * 2018년 10월 : 오픈나루와 [[IT]] 모니터링 분야 업무협약 |
− | * | + | * 2019년 01월 : 큐브리드 10, [[한국정보통신기술협회]](TTA) 우수 소프트웨어 인증 획득 |
− | * | + | * 2019년 03월 : 체커와 데이터베이스 도구 솔루션 개발을 위한 업무협약 체결 |
+ | * 2019년 06월 : [[와탭랩스]]와 IT 모니터링 분야 업무협약 | ||
+ | * 2019년 12월 : 큐브리드 10.2 출시 | ||
+ | * 2020년 02월 : 큐브리드 재단 설립(미국 산호세)<ref name="홈피"></ref> | ||
+ | {{글 보임 끝}} | ||
==특징== | ==특징== | ||
− | === | + | ===장점=== |
− | + | * '''트랜잭션 지원''' : 트랜잭션의 원자성(atomicity), 일관성(consistency), 격리성(isolation), 지속성(durability)을 완벽하게 보장하기 위해 트랜잭션 단위의 커밋, 롤백, 세이브 포인트를 지원하고 시스템이나 데이터베이스의 장애 시, 복제 간 트랜잭션의 일관성을 보장한다. 데이터베이스, [[테이블]], [[레코드]] 등 다중 단위 잠금을 지원하고 교착 상태를 자동으로 해결한다. | |
− | 트랜잭션의 원자성(atomicity), 일관성(consistency), 격리성(isolation), 지속성(durability)을 완벽하게 보장하기 위해 트랜잭션 단위의 커밋, 롤백, 세이브 포인트를 지원하고 시스템이나 데이터베이스의 장애 시, 복제 간 트랜잭션의 일관성을 보장한다. 데이터베이스, [[테이블]], [[레코드]] 등 다중 단위 잠금을 지원하고 교착 상태를 자동으로 해결한다. | + | * '''데이터베이스 백업 및 복구 기능''' : 데이터베이스 [[백업]]은 큐브리드 데이터베이스 볼륨, 제어 파일, 로그 파일을 저장하는 작업이고, 데이터베이스 복구는 백업 작업에 의해 생성된 백업 파일, 활성 로그, 보관 로그를 이용하여 특정 시점의 데이터베이스로 복구하는 작업이다. 이 때, 복구 환경은 백업 환경과 동일한 운영체제 및 동일 버전의 큐브리드가 설치되어야 한다. 큐브리드가 지원하는 백업 방식으로는 온라인 백업, 오프라인 백업, 증분 백업이 있고, 복구 방식으로는 증분 백업에 의한 복구, 부분 복구, 전체 복구가 있다. |
− | + | * '''테이블 분할 기법''' : 분할 기법(partitioning)은 하나의 테이블을 여러 개의 독립적인 논리적 단위로 분할하는 기법이다. 각 논리적 단위를 분할(partition)이라 부르며, 각 분할을 서로 다른 물리적 공간에 나누어 저장하도록 하여 레코드를 검색할 때 해당 분할만 접근할 수 있도록 하여 성능 향상을 기대할 수 있다. 큐브리드가 제공하는 분할 기법은 칼럼값의 범위를 기준으로 테이블을 분할하는 기법인 레인지 분할 기법, 칼럼의 해시값을 기준으로 분할하는 기법인 해시 분할 기법, 칼럼값의 목록을 기준으로 분할하는 기법인 리스트 분할 기법이 있다. | |
− | 데이터베이스 | + | * '''다양한 인덱스 기능 지원''' : 큐브리드는 다양한 조건 질의를 수행할 때 가급적 [[인덱스]]를 활용할 수 있도록 인덱스 기능을 지원하는데, 별도의 내림차순 인덱스를 생성하지 않아도 오름차순 인덱스만으로 내림차순 인덱스 스캔이 가능한 내림차순 인덱스 스캔(Descending Index Scan), SELECT 리스트의 칼럼이 인덱스에 포함된 경우 인덱스 스캔만으로 요구하는 데이터를 가져올 수 있는 커버링 인덱스(Covering Index), 요구하는 레코드의 정렬 순서가 인덱스의 순서와 같다면 별도의 정렬 작업이 필요 없는 ORDER BY 절 최적화, GROUP BY 절에 있는 모든 칼럼이 인덱스에 포함된다면 질의 수행 시 인덱스를 사용할 수 있어 별도의 정렬 작업이 필요 없는 GROUP BY 절 최적화 기능을 지원한다. |
− | + | * '''고가용성 기능''' : 큐브리드는 하드웨어, 소프트웨어, [[네트워크]] 등에 장애가 발생해도 지속적인 서비스가 가능하게 하는 고가용성 기능을 제공한다. 큐브리드의 고가용성 기능은 공유하지 않는 구조이며, 큐브리드 하트비트(Heartbeat)를 이용하여 시스템과 큐브리드의 상태를 실시간으로 감시하고 장애 발생 시 절체(failover)를 수행한다. 고가용성 환경에서 마스터 데이터베이스 서버로부터 슬레이브 데이터베이스 서버로의 데이터 동기화를 위해 마스터 데이터베이스 서버에서 생성되는 트랜잭션 로그를 실시간으로 다른 노드에 복제하는 트랜잭션 로그 다중화 단계와, 실시간으로 복제되는 트랜잭션 로그를 분석하여 슬레이브 데이터베이스 서버로 데이터를 반영하는 트랜잭션 로그 반영 단계를 수행한다. | |
− | 분할 기법(partitioning)은 하나의 테이블을 여러 개의 독립적인 논리적 단위로 분할하는 기법이다. 각 논리적 단위를 분할(partition)이라 부르며, 각 분할을 서로 다른 물리적 공간에 나누어 저장하도록 하여 레코드를 검색할 때 해당 분할만 접근할 수 있도록 하여 성능 향상을 기대할 수 있다. 큐브리드가 제공하는 분할 기법은 칼럼값의 범위를 기준으로 테이블을 분할하는 기법인 레인지 분할 기법, 칼럼의 해시값을 기준으로 분할하는 기법인 해시 분할 기법, 칼럼값의 목록을 기준으로 분할하는 기법인 리스트 분할 기법이 있다. | + | * '''자바 저장 프로시저''' : 저장 프로시저는 [[중간자]]에서 실행되는 로직과 데이터베이스에서 실행되는 로직을 분리하여 응용 프로그램의 복잡성을 줄이고, 재사용성, 보안성, 성능을 향상시킬 수 있는 기법이다. 큐브리드는 범용 언어인 자바로 작성되고, 자바 가상 머신(JVM, Java Virtual Machine)에서 구동되는 자바 저장 프로시저를 제공한다. 큐브리드에서 자바 저장 프로시저를 실행하기 위해서는 자바 가상 머신 설치 및 환경 설정, 자바 소스 파일 작성, 컴파일 및 자바 리소스 로딩, 로딩된 자바 클래스를 데이터베이스에서 호출할 수 있도록 등록, 자바 저장 프로시저 호출 절차가 수행되어야 한다. |
− | + | * '''클릭 카운터 기능''' : [[인터넷]] 환경에서 데이터 검색 시 보통 검색 이력을 남기기 위해 조회수와 같은 카운터를 데이터베이스에 유지한다. 일반적으로 시나리오는 SELECT 문을 이용하여 데이터를 검색하고, 검색한 질의에 대한 조회수를 증가 시키기 위해 다시 업데이트 문을 통해 구현하는 것이 일반적인 방식이었다. 이 방식은 한 데이터에 SELECT 가 집중될 때 업데이트 에 대한 잠금 경쟁이 가중되어 급격한 성능 저하가 발생하는 단점이 존재한다. 이에, 큐브리드는 인터넷 환경에서 사용자 편의성 및 성능 측면에서 최적화된 기능을 제공하기 위해 클릭 카운터(Click Counter) 라는 새로운 개념을 도입하고, INCR() 함수 및 WITH INCREMENT FOR 구문을 제공한다. | |
− | 큐브리드는 다양한 조건 질의를 수행할 때 가급적 [[인덱스]]를 활용할 수 있도록 인덱스 기능을 지원하는데, 별도의 내림차순 인덱스를 생성하지 않아도 오름차순 인덱스만으로 내림차순 인덱스 스캔이 가능한 내림차순 인덱스 스캔(Descending Index Scan), SELECT 리스트의 칼럼이 인덱스에 포함된 경우 인덱스 스캔만으로 요구하는 데이터를 가져올 수 있는 커버링 인덱스(Covering Index), 요구하는 레코드의 정렬 순서가 인덱스의 순서와 같다면 별도의 정렬 작업이 필요 없는 ORDER BY 절 최적화, GROUP BY 절에 있는 모든 칼럼이 인덱스에 포함된다면 질의 수행 시 인덱스를 사용할 수 있어 별도의 정렬 작업이 필요 없는 GROUP BY 절 최적화 기능을 지원한다. | + | * '''관계형 데이터 모델 확장''' : 컬렉션(collection) 면에서는 관계형 데이터베이스에서는 한 칼럼이 여러 개의 값을 가지는 것을 허용하지 않지만, 큐브리드는 한 칼럼이 여러 개의 값을 가지도록 정의할 수 있다. 이를 위해 컬렉션이라는 데이터 타입을 제공하는데, 컬렉션 타입은 컬렉션 원소의 중복 허용 여부와 순서 유지 여부에 따라 크게 세트(SET), 멀티셋(MULTISET), 리스트(LIST)의 세 종류로 구분할 수 있다. 세트는 각 원소의 중복을 허용하지 않는 집합으로서, 원소의 나열 순서와 무관하게 중복 없이 정렬되어 저장되며, 멀티셋은 각 원소의 중복을 허용하는 집합으로서, 원소의 나열 순서와 무관하다. 리스트는 각 원소의 중복을 허용하는 집합으로서 세트와 멀티셋과 달리 원소의 순서를 유지한다. 상속 면에서는 상위 클래스 테이블에서 생성된 칼럼과 메서드들을 하위 클래스에서 재사용할 수 있게 하는 개념으로, 큐브리드는 상속을 지원함으로써 재사용성을 제공한다. 큐브리드에서 제공하는 상속 기능을 이용하여 공통의 칼럼을 가지는 상위 클래스를 생성하고, 상위 클래스를 상속받아 고유한 칼럼을 추가한 하위 클래스를 생성함으로써, 필요한 칼럼 수를 최소화한 데이터베이스 모델링이 가능해진다.<ref name="큐">CUBRID 소개 큐브리드 - https://www.cubrid.org/manual/ko/9.3.0/intro.html</ref> |
− | |||
− | 큐브리드는 하드웨어, 소프트웨어, 네트워크 등에 장애가 발생해도 지속적인 서비스가 가능하게 하는 고가용성 기능을 제공한다. 큐브리드의 고가용성 기능은 공유하지 않는 구조이며, 큐브리드 하트비트(Heartbeat)를 이용하여 시스템과 큐브리드의 상태를 실시간으로 감시하고 장애 발생 시 절체(failover)를 수행한다. 고가용성 환경에서 마스터 데이터베이스 서버로부터 슬레이브 데이터베이스 서버로의 데이터 동기화를 위해 마스터 데이터베이스 서버에서 생성되는 트랜잭션 로그를 실시간으로 다른 노드에 복제하는 트랜잭션 로그 다중화 단계와, 실시간으로 복제되는 트랜잭션 로그를 분석하여 슬레이브 데이터베이스 서버로 데이터를 반영하는 트랜잭션 로그 반영 단계를 수행한다. | ||
− | |||
− | 저장 프로시저는 | ||
− | |||
− | 인터넷 환경에서 데이터 검색 시 보통 검색 이력을 남기기 위해 조회수와 같은 카운터를 데이터베이스에 유지한다. 일반적으로 시나리오는 SELECT 문을 이용하여 데이터를 검색하고, 검색한 질의에 대한 조회수를 증가 시키기 위해 다시 업데이트 문을 통해 구현하는 것이 일반적인 방식이었다. 이 방식은 한 데이터에 SELECT 가 집중될 때 업데이트 에 대한 잠금 경쟁이 가중되어 급격한 성능 저하가 발생하는 단점이 존재한다. 이에 큐브리드는 인터넷 환경에서 사용자 편의성 및 성능 측면에서 최적화된 기능을 제공하기 위해 클릭 카운터(Click Counter) 라는 새로운 개념을 도입하고, | ||
− | |||
− | '''컬렉션 | ||
− | |||
− | |||
− | |||
− | |||
===단점=== | ===단점=== | ||
− | 3계층 구조 중 하나인 브로커 | + | * '''브로커 사용''' : 3계층 구조 중 하나인 브로커 사용에는 단점이 있다. 가장 두드러지는 단점은 구조가 복잡해 보이는 것이다. 그 이유는 데이터베이스 서버와 브로커는 별개의 컴포넌트로 동작한다. 데이터베이스 서버 입장에서 커브 캐스(cub_cas)는 하나의 클라이언트이고, 브로커 입장에서 데이터베이스 서버는 드라이버 요청에 따라 선택적으로 연결해야 할 대상이다. 따라서, 큐브리드를 설정할 때 데이터베이스 서버를 따로 설정해야 한다. 데이터베이스 서버 및 클라이언트 라이브러리 동작은 cubrid.conf 파일로 설정하고, 브로커 동작은 cubrid.conf 파일로 설정한다. 예를 들어, 애플리케이션에서 사용할 연결 수를 설정했는데 연결이 부족하여 늘려야 하면 애플리케이션에서 필요한 연결 요청을 받을 커브 캐스가 구동되도록 브로커 설정을 변경하고, 늘어난 커브 캐스가 커브 서버(cub_server)에 접속할 수 있도록 커브 서버 설정도 변경해야 한다. 이처럼, 양쪽 모두 설정을 변경해야 한다는 점이 복잡하고 어려워 보인다. |
− | + | ||
− | + | * '''성능 저하''' : 처리 단계가 늘어나기 때문에 성능이 떨어질 수 있다. 성능은 응답 시간(response time)과 처리량(throughput)으로 측정할 수 있는데, 처리 단계가 늘어나면 응답 시간도 길어진다. 질의 하나를 수행할 때 응답 시간의 차이는 수 밀리초(ms) 정도지만 자바 데이터베이스 접속성(JDBC)을 이용해서 단일 스레드로 질의를 반복 수행하는 작업을 수행한다면 큰 차이가 생길 수 있다. 응답 시간이 길어지는 가장 큰 이유는 통신 횟수 증가인데, 단일 클라이언트가 아닌 멀티 클라이언트 환경에서는 통신 횟수 증가에 따른 시간 증가가 어느 정도 상쇄된다. 또한, 서버 부하가 극단적으로 심한 환경에서는 일반적으로 서버가 수행하는 기능의 일부를 클라이언트에서 수행하여 서버의 리소스를 확보할 수 있다. 서버의 리소스를 추가로 확보할 수 있다는 것은 서버의 처리량을 늘릴 수 있다는 것을 의미한다. 즉, 처리량은 크게 영향을 받지 않으며 오히려 처리량을 더 늘릴 수도 있다. | |
− | + | ||
+ | * '''장애 포인트 증가''' : 브로커라는 중간 레이어가 있기 때문에 장애 포인트가 늘어난다. 이에, 큐브리드는 장애를 대비하기 위해 고가용성 기능을 제공하며 브로커 이중화도 지원한다. 애플리케이션에서 큐브리드에 접속하는 연결 [[URL]]은 서버 주소, 포트 번호, 데이터베이스 이름, 데이터베이스 사용자 이름, 데이터베이스 사용자 비밀번호로 구성되는데, 해당 [[아이피]](IP)와 포트로 접속이 실패했을 때 연결을 시도할 접속 정보를 추가로 설정할 수 있다. 즉, 브로커를 이중화하여 하나의 브로커에 장애가 발생하면 다른 브로커를 통하여 연결하도록 설정하여 장애에 대비한다.<ref>강철규, 〈[https://d2.naver.com/helloworld/1197 CUBRID, 브로커 이야기]〉, 《네이버 디투》, 2011-12-23</ref> | ||
+ | |||
+ | ==활용== | ||
+ | ===㈜큐브리드=== | ||
+ | ;국가 기관 | ||
+ | 국가정보자원관리원은 50여 개 중앙행정기관의 정보 통신 기술 인프라를 위탁 운영하는 행정안전부 산하기관으로 대전에 위치한 1센터와 광주에 위치한 2센터에 1,500여 개의 업무 시스템이 운영하며, 2011년부터 G-클라우드 인프라를 구축하기 시작했다. G-클라우드 구축 이후 신규 시스템 개발 및 노후 대개체 전환 사업을 통해 700여 개 이상의 업무 시스템이 클라우드 기반으로 운영하며, 큐브리드는 G-클라우드의 표준 데이터베이스 관리 시스템으로 채택되어 800여 개 데이터베이스 인스턴스가 운영 중이다. 국방통합데이터센터는 국방부 및 육해공군의 전산소에서 운영되고 있던 정보시스템을 2014년 국방통합데이터센터 용인에 위치한 1센터와 계룡에 위치한 2센터로 통합 이전하는 사업을 진행하였으며, 국방 정보시스템의 효율적인 운영을 위하여 클라우드 인프라를 별도로 구축했다. 국방 클라우드 인프라의 표준 데이터베이스 관리 시스템으로 큐브리드가 선정되어 150여 개 이상의 시스템을 전환하여 운영하고 있으며, 육군본부의 부대별 홈페이지 및 응용체계업무와 국방부의 인터넷, 인트라넷 시스템 등도 큐브리드로 구축되어 운영하고 있다. 또한, 온나라 문서 2.0 및 기록물관리시스템은 정부 3.0 클라우드 구현의 일환으로 업무, 정책자료 등을 공유하고 활용하기 위하여 중앙행정기관의 핵심 업무 시스템인 온-나라 및 기록물 관리시스템을 부처별 단독 시스템 형태에서 클라우드 기반의 통합 환경으로 전환했다. 전환된 개방형 클라우드 업무관리시스템인 온나라 문서 2.0 및 기록물 관리시스템은 클라우드 기술과 오픈소스를 활용하였으며, 개방형 클라우드 시스템에 적용된 기능 및 오픈소스를 각 공공기관 및 지방자치단체에서도 단독형 온-나라 시스템과 기록물 관리시스템에 사용할 수 있다. | ||
+ | |||
+ | 퍼블릭 클라우드는 클라우드 서비스 제공자(CSP)들과 협업하여 한국교육학술정보원 디지털교과서, 학습커뮤니티인 위두랑, 한국어 능력검증, 계정관리(IM)/SSO, 한국방송통신전파진흥원 기금관리 및 사업관리, 전파관리플랫폼, 기획재정부 국민참여예산 제도, 정보통신산업진흥원 대표 홈페이지, WFK파견지원시스템, 농촌진흥청 사물인터넷 작물 정밀 관리기술 정보서비스, 한국인터넷진흥원 보호나라 서비스, 한국전력거래소 교육포털 등에서 큐브리드가 서비스된다.<ref name="홈피"></ref> | ||
+ | |||
+ | ;시스템 | ||
+ | 외교부 재외공관 통합업무관리시스템은 전자결재, 정보공유, 통합검색 등의 활용이 가능하고, 체계적인 외교문서 및 외교통상 정보 등의 관리를 통하여 효율적인 업무 인수인계가 가능한 시스템이다. 전체 183개의 재외공관 중 164개의 재외공관이 통합업무관리시스템을 큐브리드로 구축하여 운영한다. 문화체육관광부 공직자 통합 메일시스템은 69개 행정기관, 217개 지역자치단체, 12개 교육청 등의 기관에서 약 45만 명이 사용하고 있는 메일 시스템이다. 기존 메일 시스템의 노후화로 서비스의 장애가 자주 발생하였고, 이를 해결하기 위하여 고도화 사업 진행 시 대용량 처리가 가능하도록 시스템을 개선했다. 특징은 큐브리드 샤드(Shard) 기술을 적용하여 대용량 트랜잭션 및 데이터를 분산 처리한다. 또한, 공공기관은 국립국어원, 국립현대미술관, 국립역사박물관, 국민체육진흥공단, 국립환경과학원, 국사편찬위원회, 중앙선거관리위원회, 한국저작권위원회, 한국저작권보호원, 한국전력공사, 인천국제공항공사, 대한무역투자진흥공사, 국립중앙도서관, 한국고용정보원, 한국정보화진흥원, 정보통신산업진흥원, 공무원연금공단, 한국철도시설공단 등 다수의 공공기관 웹서비스 및 업무 시스템이 큐브리드로 운영한다. | ||
+ | |||
+ | 또한, 민간기업은 [[KBS]], 에쓰오일, 하나투어, [[세종텔레콤㈜]], 효성아이티엑스㈜, [[세틀뱅크㈜]], 신협중앙회, 한양대학교병원, 한컴엠디에스, 엑스소프트 등 다수의 민간기업 웹서비스와 업무 시스템이 큐브리드로 운영되고 있다.<ref name="홈피"></ref> | ||
+ | |||
+ | ;지역 | ||
+ | 광역시도는 인천시와 부산시 대표 홈페이지를 큐브리드로 전환하여 운영하며, 관광 콘텐츠에 특화된 강원도청은 스마트 관광 클라우드 시스템 및 관광 통합 홈페이지를 큐브리드로 운영한다. 서울시는 국산 [[정보통신기술]](ICT) 운영증명체계 구축사업을 통하여 국산 오픈소스 도입에 대한 검증을 진행했으며, 검증 완료 후 시정홍보물 관리시스템과 사회적기업 홈페이지, 운영실적증명 발급시스템 등의 내부시스템을 큐브리드로 전환하여 운영한다. 경기도청은 수사 정보시스템에 큐브리드를 사용한다. 대구광역시는 국가정보자원관리원의 G-클라우드를 모델로 하여, 광역시도로는 처음으로 하드웨어 및 소프트웨어까지 공동 활용하는 클라우드 컴퓨팅 시스템을 구축했다. D-클라우드는 정보 자원의 통합과 표준화로 정보시스템의 초기 구축 비용을 절감하고, 지역 [[정보기술]](IT) 발전을 선도하기 위하여 클라우드의 표준 시스템을 오픈소스로 선정했으며, 대구광역시 통합홈페이지, [[빅데이터]] 서비스 등을 운영한다. 또한, 지방자치단체는 청주시청, 중랑구청, 창원시청, 인천서구청, 인천경제자유구역청의 지자체 대표 홈페이지를 큐브리드로 전환하여 운영하며, 광명시청은 가상화 기술과 오픈소스인 큐브리드, [[제이보스]] 등을 도입하여 산재해 있는 홈페이지를 통합하는 웹 가상화 구축사업을 진행했다. 평택시청은 민원 콜센터시스템을 큐브리드로 운영한다.<ref name="홈피"></ref> | ||
+ | |||
+ | ===네이버㈜=== | ||
+ | [[파일:네이버㈜ 글자.png|썸네일|300픽셀|'''[[네이버]]'''(Naver)]] | ||
+ | |||
+ | 큐브리드는 2008년 소스코드 공개 이후 국내외 30만건 이상의 제품 다운로드 실적을 보유하고 있으며, 국가정보자원관리원, 국방통합데이터센터, 민간기업 등 서비스 계약 고객 기준으로 800개 이상의 시스템에서 1,200여개 데이터베이스 인스턴스가 서비스 중에 있다. 큐브리드는 대규모 트래픽을 신속히 처리하고, 편리한 사용을 돕는 여러 기능이 탑재된 큐브리드를 통해 비즈니스의 안정성을 높였다. 네이버 클라우드 플랫폼에서는 네이버㈜와 라인 서비스에서 검증된 큐브리드 9.2 버전을 제공한다. 또한, CLI(Command Line Interface) 형태의 모니터링 프로그램을 제공한다. 이는 큐브리드 데이터베이스 상태 변화를 보기 위한 프로그램으로, 1초 단위로 데이터베이스 상태를 화면에 출력하여 실시간에 가깝게 데이터베이스 상태의 변화를 모니터링할 수 있어 사용자가 안정적이고 빠른 데이터베이스 운영을 할 수 있도록 지원한다. 그래픽 유저 인터페이스 환경의 어드민/마이그레이션 툴도 제공하는데 큐브리드 매니저는 그래픽 유저 인터페이스 도구로 데이터베이스 모니터링 및 관리, 질의 기능이 가능한 큐브리드 데이터베이스 전용 관리 도구이다. 몇 번의 클릭으로 서버의 상태를 확인 할 수 있으며, 데이터베이스 생성, 구동/정지 및 설정을 변경할 수 있다. 응용 개발에 필요한 질의 편집기 도구도 제공해준다. 큐브리드 마이그레이션 툴킷은 그래픽 유저 인터페이스 환경 기반에서 스키마 객체 및 데이터를 마이그레이션 하는 도구로서, [[오라클]] 및 [[마이에스큐엘]] 데이터베이스를 큐브리드 데이터베이스로 마이그레이션 하는 기능을 제공한다. 원본 데이터베이스는 오라클 10g 이상, 마이에스큐엘 4.1.22 이상 버전을 지원한다.<ref>〈[https://www.gov-ncloud.com/product/database/cubrid CUBRID]〉, 《네이버 클라우드 플랫폼》</ref>{{자세히|네이버㈜}} | ||
+ | |||
+ | ===와탭랩스=== | ||
+ | 정보기술 모니터링 전문기업인 와탭랩스는 오픈소스 데이터베이스 관리 시스템 큐브리드 모니터링 솔루션 와탭 for 큐브리드를 출시했다. 와탭랩스와 큐브리드의 협력을 통해 2019년에 개발된 이번 제품은 큐브리드 데이터베이스 인스턴스가 다양한 환경에서 안정적으로 운영될 수 있도록 맞춤형 모니터링을 제공한다. 이 제품은 데이터베이스 성능을 실시간으로 감시하고 문제점을 진단, 분석하여 문제가 되는 에스큐엘을 튜닝하고 적용 후 문제점이 해결되었는지 즉각 확인할 수 있는 제품이다. 데이터베이스에 문제가 발생하는 경우, 알림을 전송하여 담당자가 상황을 빠르게 인지하고, 수집된 데이터를 통하여 데이터베이스 상황을 보다 정밀하게 분석하여 근본 원인을 파악하는 것이다. 또한, 모니터링 대상 데이터베이스 서버에 직접 에이전트를 설치하지 않고 쿼리 베이스로 데이터를 수집하여 운영체제에 무관하게 사용할 수 있다. 퍼블릭/프라이빗 클라우드 및 멀티 클라우드 환경에 대한 통합 모니터링을 지원하며, 서비스형 소프트웨어(SaaS) 방식과 설치형 방식 2가지로 이용할 수 있다. 서비스 환경이 점점 더 복잡해지고 데브옵스에 대한 필요성이 높아지고 있는 가운데 와탭 for 큐브리드 제품을 출시함으로써 국내외 다양한 사용자들이 안정적으로 정보기술 서비스를 운영할 수 있도록 지원한다.<ref>〈[https://www.newswire.co.kr/newsRead.php?no=893424 와탭랩스, 데이터베이스 모니터링 신제품 ‘WhaTap for CUBRID’ 출시]〉, 《뉴스와이어》, 2019-09-03</ref>{{자세히|와탭랩스}} | ||
==구조== | ==구조== | ||
− | |||
− | |||
===프로세스=== | ===프로세스=== | ||
− | 큐브리드는 객체 관계형 데이터베이스 관리 시스템으로서, 데이터베이스 서버, 브로커, 큐브리드 매니저로 구성된다. 데이터베이스 서버는 큐브리드 데이터베이스 관리 시스템의 핵심 구성 요소로 데이터 저장 및 관리 기능을 수행하며, 멀티스레드 기반 [[클라이언트]]/서버 방식으로 동작한다. 또, 사용자가 입력한 질의를 처리하고, 데이터베이스 내의 객체를 관리한다. 잠금 기법과 로깅 기법을 이용해 다수 사용자가 동시에 사용하는 환경에서도 완벽한 트랜잭션을 지원하며, 운영에 필요한 데이터베이스 백업과 복구 기능을 지원한다. 브로커는 서버와 외부 응용 프로그램 간의 통신을 중계하는 큐브리드 전용 | + | 큐브리드는 객체 관계형 데이터베이스 관리 시스템으로서, 데이터베이스 서버, 브로커, 큐브리드 매니저로 구성된다. 데이터베이스 서버는 큐브리드 데이터베이스 관리 시스템의 핵심 구성 요소로 데이터 저장 및 관리 기능을 수행하며, 멀티스레드 기반 [[클라이언트]]/서버 방식으로 동작한다. 또, 사용자가 입력한 질의를 처리하고, 데이터베이스 내의 객체를 관리한다. 잠금 기법과 로깅 기법을 이용해 다수 사용자가 동시에 사용하는 환경에서도 완벽한 트랜잭션을 지원하며, 운영에 필요한 데이터베이스 백업과 복구 기능을 지원한다. 브로커는 서버와 외부 응용 프로그램 간의 통신을 중계하는 큐브리드 전용 중간자로서, 커넥션 풀링, 모니터링, 로그 추적 및 분석 기능을 제공한다. 큐브리드 매니저는 데이터베이스와 브로커를 원격에서 관리할 수 있는 그래픽 유저 인터페이스 툴이다. 또한, 사용자가 데이터베이스 서버에 [[에스큐엘]] 질의를 수행할 수 있는 편리한 기능의 질의 편집기를 제공한다.<ref name="큐"></ref> |
===데이터베이스 볼륨=== | ===데이터베이스 볼륨=== | ||
− | 데이터베이스 | + | ; 영구적 볼륨 |
+ | 영구적 볼륨은 한번 생성되면 영구적으로 존재하는 데이터베이스 볼륨으로서, 볼륨 타입으로는 범용(Generic), 데이터(Data), 임시(Temp), 인덱스(Index), 제어(Control), 활성 로그(Active log), 보관 로그(Archive log)가 있다. 먼저, 범용 볼륨에서 사용자는 데이터베이스에 추가할 볼륨 타입을 데이터, 임시, 인덱스 중 하나의 용도로 지정하여 효율적으로 관리할 수 있다. 별도로 볼륨 타입을 지정하지 않는 경우에는 범용 볼륨으로 지정되며, 범용 볼륨은 데이터 혹은 인덱스를 저장한다. 단, [[스키마]]는 범용 볼륨에만 저장되며, 스키마 저장을 위한 별도의 볼륨 타입은 존재하지 않는다. 또한, 볼륨이 자동으로 증가하는 경우에도 범용 볼륨으로 지정된다. 데이터 볼륨은 인스턴스, 테이블, [[멀티미디어]] 데이터 등과 같은 데이터를 저장하기 위한 공간이다. 임시 볼륨은 질의 처리 및 정렬을 수행할 때 중간, 최종 결과를 임시로 저장하는 공간으로, 아래에서 설명할 일시적 임시 볼륨과 구분하기 위해 영구적 임시 볼륨이라고도 한다. 임시 볼륨은 영구적으로 확보한 공간으로, 해당 공간에 존재하는 데이터가 임시로 저장 및 소멸하는 것을 의미한다. 따라서, 큐브리드를 재시작하면 임시 볼륨 공간 내의 데이터는 초기화되고, 이에 관련된 로그 정보는 남지 않는다. 영구적 또는 일시적 임시 볼륨을 사용할 수 있는 질의를 예로들면, 셀렉트(SELECT)문 등 질의 결과가 생성되는 질의, 그룹별 검색(GROUP BY)이나 정렬 검색(ORDER BY)이 포함된 질의, 부질의(Subquery)가 포함된 질의, 정렬 병합(Sort-Merge) 조인이 수행되는 질의, 크리에이트 인덱스(CREATE INDEX)문이 포함된 질의 등이 있다. 이와 같은 질의를 수행할 때 셀렉트 결과를 저장하거나 데이터를 정렬하기 위해 지정한 [[메모리]] 공간을 소진하면 임시 볼륨 공간을 사용한다. | ||
− | + | 질의 처리 및 정렬 결과를 저장하기 위해 사용하는 저장 공간의 순서는 탬프(temp)_파일(file)_메모리(memory)_사이즈(size)_인(in)_페이지(pages) 시스템 피라미터에 의해 확보된 메모리, 영구적 임시 볼륨, 일시적 임시 볼륨이며, 사용 중인 저장 공간을 모두 소진하면 이 순서대로 저장 공간을 사용한다. 인덱스 볼륨은 신속한 질의 처리 또는 무결성 제약 조건(Integrity Constraints) 검증을 위한 인덱스 정보를 유지하는 공간이다. 제어 파일은 데이터베이스 안에 존재하는 볼륨의 정보, 백업 정보 및 로그의 정보를 저장하는 파일이다. 이때, 볼륨 정보는 데이터베이스 내 모든 볼륨의 이름과 위치, 내부 볼륨 식별자를 포함하는 정보로서, 데이터베이스가 재시작될 때 큐브리드는 볼륨 정보 제어 파일을 판독하며, 새로운 데이터베이스 볼륨이 추가될 때에 새로운 엔트리를 볼륨 정보 제어 파일에 기록한다. 백업 정보는 정보 볼륨에 대한 모든 백업의 위치는 백업 정보 제어 파일에 기록되고, 이 제어 파일은 로그 파일이 관리되는 곳에 유지된다. 로그 정보는 모든 활성 로그와 보관 로그의 이름을 포함하며, 사용자는 로그 정보 제어 파일을 통해 보관 로그의 정보를 확인할 수 있다. 이러한 로그 정보 제어 파일은 로그 파일과 동일한 위치에서 생성 및 관리된다. 이처럼 각각의 제어 파일은 데이터베이스 볼륨의 위치, 백업 정보, 로그 정보를 포함하며, 데이터베이스가 재시작하면서 읽는 파일이므로 사용자 임의로 변경하면 안 된다. | |
− | + | ||
+ | 활성 로그는 데이터베이스의 최근 변경 사항을 포함하는 로그이며, 데이터베이스에 문제가 발생하는 경우에는 활성 로그 및 보관 로그를 이용하여 고장 발생 전의 커밋된 시점으로 완전하게 데이터베이스를 복구할 수 있다. 보관 로그는 최근의 변경 사항을 포함하고 있는 활성 로그 공간이 모두 사용된 후에 지속해서 생성되는 로그를 보관하기 위한 볼륨이다. 시스템 파라미터 로그(log), 맥스(max), 아카이브(archives)의 값이 0보다 크게 설정된 경우에는 활성 로그 볼륨의 공간이 소진된 후에 보관 로그 볼륨이 추가된다. 제품 설치 시에는 0으로 설치되어 있고 로그, 맥스, 아카이브의 설정값만큼 볼륨 파일이 유지된다. 디스크 공간 확보를 위해 불필요한 보관 로그는 시스템의 설정에 의해 삭제되어야 하지만, 데이터베이스 복구에 사용하려면 이 값을 적절하게 설정해야 한다. 마지막으로, 백그라운드 보관 로그는 백그라운드에서 로그 보관 작업을 수행할 때 사용하는 볼륨이다.<ref name="큐"></ref> | ||
; 일시적 볼륨 | ; 일시적 볼륨 | ||
− | 일시적 볼륨은 영구적 볼륨과 반대되는 의미이다. 즉, 사용자가 영구적 볼륨으로 지정한 공간을 초과하여 데이터가 축적되는 경우에만 일시적으로 마련되는 저장 공간을 일시적 볼륨이라 하며, 이는 서버 프로세스가 종료됨에 따라 소멸한다. 이처럼 일시적으로 생성 및 소멸하는 볼륨으로 일시적 임시 볼륨(Temporary Temp Volume)이 있다. 영구적 볼륨에 속하는 임시 볼륨은 영구적으로 공간을 확보하는 볼륨인 데 비해, 일시적 임시 볼륨은 영구적 임시 볼륨으로 지정된 공간 외에 추가 공간이 필요한 | + | 일시적 볼륨은 영구적 볼륨과 반대되는 의미이다. 즉, 사용자가 영구적 볼륨으로 지정한 공간을 초과하여 데이터가 축적되는 경우에만 일시적으로 마련되는 저장 공간을 일시적 볼륨이라 하며, 이는 서버 프로세스가 종료됨에 따라 소멸한다. 이처럼 일시적으로 생성 및 소멸하는 볼륨으로 일시적 임시 볼륨(Temporary Temp Volume)이 있다. 영구적 볼륨에 속하는 임시 볼륨은 영구적으로 공간을 확보하는 볼륨인 데 비해, 일시적 임시 볼륨은 영구적 임시 볼륨으로 지정된 공간 외에 추가 공간이 필요한 경우에는 시스템이 일시적으로 생성하는 임시 볼륨이다. 일시적 임시 볼륨을 생성하는 비용은 상당히 크기 때문에 데이터베이스 관리자는 데이터베이스 운영 상황을 고려하여 적절한 크기의 영구적 임시 볼륨을 추가하는 것이 성능상 유리하다. 데이터베이스 생성 시에 관리자는 일시적 임시 볼륨이 생성될 수 있는 공간도 고려해야 한다. 일시적 임시 볼륨은 한 번 생성되면 데이터베이스를 재시작하기 전까지 유지되며, 한 번 늘어난 크기는 줄어들지 않는다. 일시적 임시 볼륨의 크기가 지나치게 커지면, 데이터베이스를 재시작하여 일시적 임시볼륨이 자동으로 삭제되도록 해야한다. 단, 일시적 임시 볼륨을 수동으로 삭제해서는 안 된다. 큐브리드의 일시적 임시 볼륨의 파일명은 db_name_tnum 형식의 이름을 갖는다. 여기서 db_name은 데이터베이스 이름이고, num은 볼륨 식별자이다. 볼륨 식별자는 32766에서부터 1씩 감소한다. 일시적 임시 볼륨이 생성되는 개수는 트랜잭션 처리에 필요한 공간의 크기에 따라 시스템이 결정한다. 그러나, 일시적 임시 볼륨의 크기는 사용자가 시스템 파라미터 설정 파일(cubrid.conf)의 탬프, 파일, 맥스, 사이즈, 인, 페이지 파라미터의 값을 설정함으로 제한될 수 있다. 이 파라미터의 기본값은 -1로, 여유 공간이 있는 한 최대한 생성한다. 0으로 설정되면 영구적 임시 볼륨이 소진되어도 일시적 임시 볼륨을 생성하지 않는다. 저장 위치 설정으로는 기본적으로 첫 번째 데이터베이스 볼륨이 생성된 위치에 만들어진다. 그러나, 사용자가 탬프, 볼륨(volume), 패스(path) 파라미터값을 설정하여 일시적 임시 볼륨이 저장될 다른 디렉터리를 지정할 수도 있다. 마지막으로, 일시적 임시 볼륨은 데이터베이스가 구동 중일 때만 일시적으로 존재하며, 서버가 운영 중일 때 일시적 임시 볼륨을 임의로 삭제하면 안 된다. 데이터베이스 서버가 정상적으로 종료되면 일시적 임시 볼륨이 삭제되고, 데이터베이스 서버가 비정상적으로 종료되면 서버가 재시작할 때 일시적 임시 볼륨이 삭제된다.<ref name="큐"></ref> |
; 백업 볼륨 | ; 백업 볼륨 | ||
− | 백업 볼륨은 데이터베이스에 대한 스냅샷으로서, 이러한 백업 볼륨과 로그 볼륨을 기반으로 특정 시점까지 발생한 트랜잭션을 복구할 수 있다. 사용자는 큐브리드 백업 데이터베이스 유틸리티를 통해 데이터베이스 복구를 위해 필요한 모든 데이터를 복사할 수 있으며, 데이터베이스 환경 설정 파일의 | + | 백업 볼륨은 데이터베이스에 대한 스냅샷으로서, 이러한 백업 볼륨과 로그 볼륨을 기반으로 특정 시점까지 발생한 트랜잭션을 복구할 수 있다. 사용자는 큐브리드 백업 데이터베이스 유틸리티를 통해 데이터베이스 복구를 위해 필요한 모든 데이터를 복사할 수 있으며, 데이터베이스 환경 설정 파일의 백업(backup), 볼륨, 맥스, 사이즈, 바이트(bytes) 파라미터값을 설정하여 백업 볼륨의 분할 크기를 조정할 수 있다.<ref name="큐"></ref> |
===데이터베이스 서버=== | ===데이터베이스 서버=== | ||
− | |||
− | |||
; 데이터베이스 서버 프로세스 | ; 데이터베이스 서버 프로세스 | ||
− | 데이터베이스 서버 프로세스는 각 데이터베이스에 한 개의 서버 프로세스가 존재한다. 서버 프로세스는 큐브리드 데이터베이스 서버를 구성하는 핵심 프로세스로 데이터베이스 파일과 로그 파일 등에 직접 접근하여, 사용자의 요청을 처리한다. 클라이언트 프로세스는 서버 프로세스와 [[TCP/IP]] 통신을 통해 접속하며, 하나의 서버 프로세스는 스레드를 생성해서 다수의 클라이언트 프로세스의 요청 작업을 처리한다. | + | 데이터베이스 서버 프로세스는 각 데이터베이스에 한 개의 서버 프로세스가 존재한다. 서버 프로세스는 큐브리드 데이터베이스 서버를 구성하는 핵심 프로세스로 데이터베이스 파일과 로그 파일 등에 직접 접근하여, 사용자의 요청을 처리한다. 클라이언트 프로세스는 서버 프로세스와 [[TCP/IP]] 통신을 통해 접속하며, 하나의 서버 프로세스는 스레드를 생성해서 다수의 클라이언트 프로세스의 요청 작업을 데이터베이스별로 처리한다. 즉, 서버 프로세스별로 시스템 파라미터 설정을 지정할 수 있으며 서버 프로세스는 맥스, [[클라이언트]](clients) 파라미터값으로 지정된 수만큼 클라이언트 프로세스의 접속이 가능하다.<ref name="큐"></ref> |
; 마스터 프로세스 | ; 마스터 프로세스 | ||
− | 마스터 프로세스는 클라이언트 프로세스가 서버 프로세스에 접속하여 통신할 수 있게 하는 중개 프로세스로서, 호스트별로 한 개씩 동작한다. | + | 마스터 프로세스는 클라이언트 프로세스가 서버 프로세스에 접속하여 통신할 수 있게 하는 중개 프로세스로서, 호스트별로 한 개씩 동작한다. 또한, 지정된 TCP/IP 포트에 대기하고 있고, 클라이언트 프로세스는 해당 TCP/IP 포트로 마스터 프로세스에 접속한 후 마스터 프로세스가 지정된 데이터베이스 이름에 따라 해당 서버 프로세스로 소켓 포트를 변경하여 접속을 처리한다.<ref name="큐"></ref> |
; 실행 모드 | ; 실행 모드 | ||
− | 실행 모드는 서버 프로세스를 제외한 큐브리드 프로그램들의 종류에 따라 두 가지 모드가 있다. 클라이언트 | + | 실행 모드는 서버 프로세스를 제외한 큐브리드 프로그램들의 종류에 따라 두 가지 모드가 있다. 클라이언트 및 서버 모드와 독립 모드로 나뉜다. 클라이언트/서버 모드는 해당 프로그램이 클라이언트 프로세스로서 동작하여 서버 프로세스에 접속하는 방식이고, 독립 모드는 해당 프로그램이 서버 프로세스의 기능을 포함하고 있어 직접 데이터베이스 파일에 접근하여 수행하는 방식이다. 예를 들어, 데이터베이스 생성 유틸리티나 복구 유틸리티 등은 다수 사용자가 데이터베이스에 접근하는 것을 막고 해당 프로그램만이 온전히 점유해서 작업할 수 있도록 독립 모드로 실행된다. 예를들어, C에스큐엘 인터프리터는 클라이언트 및 서버 모드로 동작하여 서버 프로세스에 접속할 수도 있고, 독립 모드로 동작하여 데이터베이스에 접근하여 에스큐엘 문을 실행할 수도 있다. 참고로, 하나의 데이터베이스에 서버 프로세스와 독립 모드로 실행되는 프로그램이 동시에 접근할 수는 없다.<ref name="큐"></ref> |
===브로커=== | ===브로커=== | ||
− | 브로커는 다양한 응용 클라이언트가 데이터베이스 서버에 연결할 수 있도록 중계하는 | + | 브로커는 다양한 응용 클라이언트가 데이터베이스 서버에 연결할 수 있도록 중계하는 중간자이다. 브로커를 포함하는 큐브리드 시스템은 응용 클라이언트, 커브 브로커(cub_broker), 커브 캐스, 데이터베이스 커브 서버(cub_server)를 포함한 다중 계층 구조를 가진다. 응용 클라이언트는 사용할 수 있는 인터페이스는 CCI-[[API]](CUBRID Call Inter face-Application Programming Interface), ODBC(Open DataBase Connectivity), 자바 데이터베이스 접속성(JDBC), [[PHP]], [[파이썬]], [[루비]], OLE 데이터베이스(Object Linking and Embedding), ADO.NET, Node.js 등이 있다. 커브 캐스는 연결을 요청하는 모든 종류의 응용 클라이언트가 사용하는 공용 응용 서버 역할을 한다. 또한, 데이터베이스 서버의 클라이언트로 동작하여 클라이언트의 요청으로 데이터베이스 서버와 연결을 제공한다. 서비스 풀(service pool) 내에서 구동되는 커브 캐스의 개수는 cubrid_broker.conf 설정 파일에 지정할 수 있으며, 커브 브로커에 의해 동적으로 조정된다. 커브 캐스는 큐브리드 데이터베이스 서버의 클라이언트 라이브러리와 링크되는 프로그램으로 데이터베이스 서버 프로세스에는 클라이언트 모듈로 동작하며, 쿼리 파싱이나 최적화, 실행 계획 생성 등의 작업이 클라이언트 모듈에서 수행된다. |
− | + | 커브 브로커는 응용 클라이언트와 커브 캐스 사이의 연결을 중계하는 기능을 수행한다. 즉, 응용 클라이언트가 접근을 요청하면 커브 브로커라는 공유 메모리(shared memory)를 통해 커브 캐스의 상태를 파악하여 접근 가능한 커브 캐스에게 요청을 전달하고, 해당 커브 캐스로부터 전달받은 요청에 대한 처리 결과를 응용 클라이언트에게 반환한다. 또한, 커브 브로커는 서비스 풀 내의 커브 캐스 개수를 조정하여 서버 부하를 관리하고, 커브 캐스의 구동 상태를 모니터링 및 관리한다. 만약, 응용 클라이언트의 요청을 커브 캐스 1에게 전달하였는데, 비정상적인 종료로 인해 커브 캐스 1과의 연결이 실패하면, 커브 브로커는 응용 클라이언트에게 연결 실패에 관한 에러 메시지를 전송하고 커브 캐스 1을 재구동한다. 새롭게 구동된 커브 캐스 1은 정상적인 대기 상태가 되어, 새로운 응용 클라이언트의 요청으로 재연결된다. 공유 메모리 | |
− | + | 공유 메모리에는 커브 캐스의 상태 정보가 저장되며, 커브 브로커는 공유 메모리에 저장된 커브 캐스의 상태 정보를 참조하여 응용 클라이언트와의 연결을 중계한다. 공유 메모리에 저장된 커브 캐스의 상태 정보를 통해 시스템 관리자는 어떤 커브 캐스가 현재 작업을 수행 중인지, 어떤 응용 클라이언트의 요청이 처리 중인지를 확인할 수 있다.<ref name="큐"></ref> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | 공유 메모리에는 | ||
===인터페이스 모듈=== | ===인터페이스 모듈=== | ||
− | + | 자바 데이터베이스 접속성은 자바 환경에서 데이터베이스 응용 프로그램을 작성하는 표준 API이고, ODBC는 윈도우 환경에서 데이터베이스 응용 프로그램을 작성하는 표준 API이며, ODBC 드라이버는 CCI 라이브러리를 기반으로 작성되었다. OLE DB는 윈도우 환경에서 COM 방식으로 데이터베이스 응용 프로그램을 작성하는 API. OLE DB 프로바이더는 CCI 라이브러리를 기반으로 작성되었고, PHP는 PHP 환경에서 데이터베이스 응용 프로그램을 작성하는 API이고, PHP 드라이버는 CCI 라이브러리를 기반으로 작성되었다. 마지막으로 CCI는 큐브리드에서 제공하는 C언어 인터페이스이다. C 라이브러리 형태로 제공된다. 각 인터페이스 모듈들은 모두 브로커를 통해서 데이터베이스 서버에 접근하게 된다. 브로커는 다양한 응용 클라이언트가 데이터베이스 서버에 연결할 수 있도록 중계하는 중간자로, 각 인터페이스 모듈의 요청을 받아서 데이터베이스 서버의 클라이언트 라이브러리에서 제공하는 native-C API를 호출하게 된다.<ref name="큐"></ref> | |
− | + | ==비교== | |
+ | 큐브리드는 2008년 11월 큐브리드 2008 R1.0을 출시한 이후 2014년 5월 큐브리드 9.3을 출시할 때까지 많은 기능을 추가했다. 그 결과 큐브리드는 기본적으로 안시 에스큐엘-92 표준을 따르는 것 외에 계층 질의, 머지(MERGE) 문, 분석 함수(Analytic Function) 등을 추가로 지원했다. 에스큐엘:2011 표준까지 나왔을 때 기준으로, 큐브리드를 포함한 주요 데이터베이스 관리 시스템에 특징적인 에스큐엘 기능 비교는 다음과 같다.<ref name="비교">이동현, 〈[https://d2.naver.com/helloworld/907716 주요 DBMS의 특징적인 SQL 기능 비교]〉, 《네이버 디투》, 2014-08-21</ref> | ||
+ | :{|class=wikitable width=700 style="background-color:#ffffee" | ||
+ | |+<big>'''프로그래밍 비교'''</big> | ||
+ | !align=center style="background-color:#ffeecc" width=40%|기능 | ||
+ | !align=center style="background-color:#ffeecc" width=15%|오라클 | ||
+ | !align=center style="background-color:#ffeecc" width=15%|에스큐엘 서버 | ||
+ | !align=center style="background-color:#ffeecc" width=15%|마이에스큐엘 | ||
+ | !align=center style="background-color:#ffeecc" width=15%|큐브리드 | ||
+ | |- | ||
+ | |align=center|저장 프로시저<br>(Stored Procedure) | ||
+ | |align=center|지원 | ||
+ | |align=center|지원 | ||
+ | |align=center|지원 | ||
+ | |align=center|일부 지원 | ||
+ | |- | ||
+ | |align=center|테이블 함수<br>(Table Function) | ||
+ | |align=center|지원 | ||
+ | |align=center|지원 | ||
+ | |align=center|미지원 | ||
+ | |align=center|미지원 | ||
+ | |- | ||
+ | |align=center|사용자 정의 집계<br>(Custom Aggregate) | ||
+ | |align=center|지원 | ||
+ | |align=center|지원 | ||
+ | |align=center|미지원 | ||
+ | |align=center|미지원 | ||
+ | |- | ||
+ | |align=center|문장 수준 트리거<br>(Statement Level Triggers) | ||
+ | |align=center|지원 | ||
+ | |align=center|지원 | ||
+ | |align=center|미지원원 | ||
+ | |align=center|지원 | ||
+ | |- | ||
+ | |align=center|행 수준 트리거<br>(Row Level Triggers) | ||
+ | |align=center|지원 | ||
+ | |align=center|미지원 | ||
+ | |align=center|지원 | ||
+ | |align=center|지원 | ||
+ | |- | ||
+ | |align=center|내장된 스케줄러<br>(Built-in Scheduler) | ||
+ | |align=center|지원 | ||
+ | |align=center|지원 | ||
+ | |align=center|지원 | ||
+ | |align=center|미지원 | ||
+ | |} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
:{|class=wikitable width=700 style="background-color:#ffffee" | :{|class=wikitable width=700 style="background-color:#ffffee" | ||
|+<big>'''질의문 비교'''</big> | |+<big>'''질의문 비교'''</big> | ||
153번째 줄: | 196번째 줄: | ||
!align=center style="background-color:#ffeecc" width=15%|큐브리드 | !align=center style="background-color:#ffeecc" width=15%|큐브리드 | ||
|- | |- | ||
− | + | |align=center|윈도우 함수<br>(Window function) | |
|align=center|지원 | |align=center|지원 | ||
|align=center|지원 | |align=center|지원 | ||
159번째 줄: | 202번째 줄: | ||
|align=center|일부 지원 | |align=center|일부 지원 | ||
|- | |- | ||
− | + | |align=center|CTE<br>(Common Table Expressions) | |
|align=center|지원 | |align=center|지원 | ||
|align=center|지원 | |align=center|지원 | ||
165번째 줄: | 208번째 줄: | ||
|align=center|미지원 | |align=center|미지원 | ||
|- | |- | ||
− | + | |align=center|계층적 질의<br>(Hierarchical Query) | |
|align=center|지원 | |align=center|지원 | ||
|align=center|미지원 | |align=center|미지원 | ||
171번째 줄: | 214번째 줄: | ||
|align=center|지원 | |align=center|지원 | ||
|- | |- | ||
− | + | |align=center|피벗 연산자 | |
|align=center|지원 | |align=center|지원 | ||
|align=center|지원 | |align=center|지원 | ||
177번째 줄: | 220번째 줄: | ||
|align=center|대체 가능 | |align=center|대체 가능 | ||
|- | |- | ||
− | + | |align=center|GROUP BY ROLLUP | |
|align=center|지원 | |align=center|지원 | ||
|align=center|지원 | |align=center|지원 | ||
183번째 줄: | 226번째 줄: | ||
|align=center|지원 | |align=center|지원 | ||
|- | |- | ||
− | + | |align=center|이력 데이터베이스 | |
|align=center|지원 | |align=center|지원 | ||
|align=center|미지원 | |align=center|미지원 | ||
189번째 줄: | 232번째 줄: | ||
|align=center|미지원 | |align=center|미지원 | ||
|- | |- | ||
− | + | |align=center|병렬 질의 처리 | |
|align=center|지원 | |align=center|지원 | ||
|align=center|지원 | |align=center|지원 | ||
195번째 줄: | 238번째 줄: | ||
|align=center|미지원 | |align=center|미지원 | ||
|- | |- | ||
− | + | |align=center|문자열 집계 | |
|align=center|일부 지원 | |align=center|일부 지원 | ||
|align=center|미지원 | |align=center|미지원 | ||
|align=center|지원 | |align=center|지원 | ||
|align=center|지원 | |align=center|지원 | ||
+ | |} | ||
+ | |||
+ | :{|class=wikitable width=700 style="background-color:#ffffee" | ||
+ | |+<big>'''인덱싱 비교'''</big> | ||
+ | !align=center style="background-color:#ffeecc" width=40%|기능 | ||
+ | !align=center style="background-color:#ffeecc" width=15%|오라클 | ||
+ | !align=center style="background-color:#ffeecc" width=15%|에스큐엘 서버 | ||
+ | !align=center style="background-color:#ffeecc" width=15%|마이에스큐엘 | ||
+ | !align=center style="background-color:#ffeecc" width=15%|큐브리드 | ||
+ | |- | ||
+ | |align=center|부분적 인덱스<br>(Partial Index) | ||
+ | |align=center|지원 | ||
+ | |align=center|지원 | ||
+ | |align=center|미지원 | ||
+ | |align=center|지원 | ||
+ | |- | ||
+ | |align=center|내림차순 인덱스<br>(Descending Index) | ||
+ | |align=center|지원 | ||
+ | |align=center|지원 | ||
+ | |align=center|대체 가능 | ||
+ | |align=center|지원 | ||
+ | |- | ||
+ | |align=center|키가 아닌 칼럼을 포함하는 인덱스 | ||
+ | |align=center|미지원 | ||
+ | |align=center|지원 | ||
+ | |align=center|미지원 | ||
+ | |align=center|미지원 | ||
+ | |- | ||
+ | |align=center|클러스터형 인덱스<br>(Clustered Index) | ||
+ | |align=center|일부 지원 | ||
+ | |align=center|지원 | ||
+ | |align=center|지원 | ||
+ | |align=center|미지원 | ||
|}<ref name="비교"></ref> | |}<ref name="비교"></ref> | ||
− | == | + | ==주의사항== |
− | + | * '''미지원 주의사항''' : 자동 형 변환을 지원하지 않아서 숫자형 데이터에 대해 따옴표를 처리할 수 없고, 문자 세트(Character set)를 지원하지 않아서 응용 프로그램에서 설정한 문자 세트를 그대로 저장하고 출력한다. 멀티바이트 문자를 지원하지 않아서 멀티바이트 문자인 경우에는 이를 고려하여 칼럼 사이즈를 충분히 정의하여야 하고 문자열 함수에서 길이 또는 위치값은 바이트 단위로 처리한다. 또, 데이터베이스 간 조인을 지원하지 않는다. | |
− | + | * '''고가용성 사용 시 주의사항''' : 프라이머리 키(Primary Key)가 필수여서 있는 경우에만 데이터가 동기화되고, 트리거(Trigger)에 사용 제한이 있어서 트리거를 사용할 경우, 슬레이브에서 중복 수행이 될 수 있다. 또한, 메소드(Method) 사용에 제한이 있어서 복제 로그를 생성하지 않는 메소드를 사용 시 동기화가 안 된다. 예를 들어 add_user()가 있다. | |
− | + | * '''JSP 사용 시 주의사항''' : [[JSP]](제이에스피)를 사용할 때 마스터 및 슬레이브의 모든 노드에 로드(Load)가 필요하다.<ref>DMBS개발랩, 〈[http://www.cubrid.com/?module=file&act=procFileDownload&file_srl=3793993&sid=747c7133573a1b098decec450670cf87&module_srl=3790689 CUBRID 활용(질의 튜닝 사례 중심)]〉, 《큐브리드》</ref> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{각주}} | {{각주}} | ||
== 참고자료== | == 참고자료== | ||
− | * | + | * 큐브리드 공식 홈페이지 - https://www.cubrid.com/ |
* CUBRID 소개 큐브리드 - https://www.cubrid.org/manual/ko/9.3.0/intro.html | * CUBRID 소개 큐브리드 - https://www.cubrid.org/manual/ko/9.3.0/intro.html | ||
* 〈[http://www.unioneinc.co.kr/upload/board/cubrid_product_intro.pdf 큐브리드 제품 소개]〉, 《유니원아이앤씨》 | * 〈[http://www.unioneinc.co.kr/upload/board/cubrid_product_intro.pdf 큐브리드 제품 소개]〉, 《유니원아이앤씨》 | ||
− | * DMBS개발랩, 〈[ | + | * DMBS개발랩, 〈[http://www.cubrid.com/?module=file&act=procFileDownload&file_srl=3793993&sid=747c7133573a1b098decec450670cf87&module_srl=3790689 CUBRID 활용(질의 튜닝 사례 중심)]〉, 《큐브리드》 |
− | |||
− | |||
* 강철규, 〈[https://d2.naver.com/helloworld/1197 CUBRID, 브로커 이야기]〉, 《네이버 디투》, 2011-12-23 | * 강철규, 〈[https://d2.naver.com/helloworld/1197 CUBRID, 브로커 이야기]〉, 《네이버 디투》, 2011-12-23 | ||
* 〈[https://www.gov-ncloud.com/product/database/cubrid CUBRID]〉, 《네이버 클라우드 플랫폼》 | * 〈[https://www.gov-ncloud.com/product/database/cubrid CUBRID]〉, 《네이버 클라우드 플랫폼》 | ||
* 〈[https://www.newswire.co.kr/newsRead.php?no=893424 와탭랩스, 데이터베이스 모니터링 신제품 ‘WhaTap for CUBRID’ 출시]〉, 《뉴스와이어》, 2019-09-03 | * 〈[https://www.newswire.co.kr/newsRead.php?no=893424 와탭랩스, 데이터베이스 모니터링 신제품 ‘WhaTap for CUBRID’ 출시]〉, 《뉴스와이어》, 2019-09-03 | ||
* 이동현, 〈[https://d2.naver.com/helloworld/907716 주요 DBMS의 특징적인 SQL 기능 비교]〉, 《네이버 디투》, 2014-08-21 | * 이동현, 〈[https://d2.naver.com/helloworld/907716 주요 DBMS의 특징적인 SQL 기능 비교]〉, 《네이버 디투》, 2014-08-21 | ||
+ | * 〈[https://cloud.kt.com/portal/ktcloudportal.epc.productintro.ucloud_server_image.CUBRIDDBMS.html Cubrid]〉, 《케이티 클라우드》 | ||
== 같이 보기 == | == 같이 보기 == | ||
+ | {{다단2| | ||
* [[데이터베이스 관리 시스템]](DBMS) | * [[데이터베이스 관리 시스템]](DBMS) | ||
* [[관계형 데이터베이스 관리 시스템]](RDBMS) | * [[관계형 데이터베이스 관리 시스템]](RDBMS) | ||
262번째 줄: | 314번째 줄: | ||
* [[클라이언트]] | * [[클라이언트]] | ||
* [[미들웨어]] | * [[미들웨어]] | ||
+ | | | ||
* [[에스큐엘]] | * [[에스큐엘]] | ||
* [[스키마]] | * [[스키마]] | ||
271번째 줄: | 324번째 줄: | ||
* [[파이썬]] | * [[파이썬]] | ||
* [[루비]] | * [[루비]] | ||
− | * [[ | + | * [[㈜아사달]] |
+ | * [[오라클]] | ||
+ | * [[마이에스큐엘]] | ||
+ | * [[정보기술]] | ||
+ | * [[제이보스]] | ||
+ | }} | ||
{{데이터베이스 관리 시스템|검토 필요}} | {{데이터베이스 관리 시스템|검토 필요}} |
2020년 8월 18일 (화) 14:41 기준 최신판
큐브리드(Cubrid)는 오픈소스 기반의 관계형 데이터베이스 관리 시스템(RDBMS)이다. 2006년 2월에 설립된 ㈜큐브리드가 개발하였고, 2008년 네이버㈜의 계열사로 편입되었다. 이후 기술 개발은 네이버㈜가 담당하고 있으며, 기술 지원은 2010년 12월 네이버㈜에서 분리 독립한 별도 회사인 ㈜큐브리드가 맡고 있다. 큐브리드는 2011년 11월 대한민국 정부 통합전산센터의 클라우드 구축 공식 데이터베이스 관리 시스템(DBMS)으로 선정되었다. 2014년 국방통합데이터센터의 표준 데이터베이스 관리 시스템(DBMS)으로 선정되었다.
목차
개요[편집]
큐브리드는 관계형 데이터베이스 관리 시스템(RDBMS)으로서 엔터프라이즈 시장에서 요구하는 대용량 데이터 처리 능력 및 성능, 안정성, 가용성, 관리 편의성을 제공한다. 안시 에스큐엘(Ansi SQL)을 준수하고 있으며, 고가용성(High Availability) 기능, 데이터베이스 관리 및 마이그레이션을 위한 그래픽 유저 인터페이스(GUI) 기반의 각종 도구를 제공하고 있다. 큐브리드는 3계층 구조를 이루는 응용(Application) - 브로커(Broker) - 서버(Server)로 구성되며, 유연하게 시스템을 구축할 수 있어 데이터가 급증하는 온라인 트랜잭션 처리(OLTP: On-line Transaction Processing) 서비스에 적합하다. 또한, 인터넷 데이터 서비스에 최적화된 데이터베이스 시스템이며, 사용자가 편리하게 사용할 수 있는 다양한 기능을 제공한다. 주요 기능으로는 관계형 데이터베이스 관리 시스템의 기본 기능 지원, 고성능 보장, 대용량 및 확장성 보장, 안정성 및 운영 편의성 제공, 개발 편의성 제공이 있다.[1]
큐브리드 데이터베이스 관리 시스템은 국내 유일의 오픈소스 데이터베이스 관리 시스템으로 온라인 트랜잭션 처리(OLTP) 업무에 최적화된 개방형 정보 플랫폼이며, GPL(엔진)과 비에스디(BSD) 라이선스가 합쳐진 유연한 오픈소스 라이선스 정책을 가지고 있다. 국내 누적 다운로드 수 25만 건이 넘었으며, 정부통합전산센터의 G-클라우드와 국방통합데이터센터 클라우드의 표준 데이터베이스 관리 시스템으로 사용한다. 네이버㈜, 에쓰오일, 하나투어, 한겨레신문, KBS 등에도 적용된다.[2]
연혁[편집]
이 글을 숨기려면 오른쪽 '접기' 버튼을 누르세요! |
---|
|
특징[편집]
장점[편집]
- 트랜잭션 지원 : 트랜잭션의 원자성(atomicity), 일관성(consistency), 격리성(isolation), 지속성(durability)을 완벽하게 보장하기 위해 트랜잭션 단위의 커밋, 롤백, 세이브 포인트를 지원하고 시스템이나 데이터베이스의 장애 시, 복제 간 트랜잭션의 일관성을 보장한다. 데이터베이스, 테이블, 레코드 등 다중 단위 잠금을 지원하고 교착 상태를 자동으로 해결한다.
- 데이터베이스 백업 및 복구 기능 : 데이터베이스 백업은 큐브리드 데이터베이스 볼륨, 제어 파일, 로그 파일을 저장하는 작업이고, 데이터베이스 복구는 백업 작업에 의해 생성된 백업 파일, 활성 로그, 보관 로그를 이용하여 특정 시점의 데이터베이스로 복구하는 작업이다. 이 때, 복구 환경은 백업 환경과 동일한 운영체제 및 동일 버전의 큐브리드가 설치되어야 한다. 큐브리드가 지원하는 백업 방식으로는 온라인 백업, 오프라인 백업, 증분 백업이 있고, 복구 방식으로는 증분 백업에 의한 복구, 부분 복구, 전체 복구가 있다.
- 테이블 분할 기법 : 분할 기법(partitioning)은 하나의 테이블을 여러 개의 독립적인 논리적 단위로 분할하는 기법이다. 각 논리적 단위를 분할(partition)이라 부르며, 각 분할을 서로 다른 물리적 공간에 나누어 저장하도록 하여 레코드를 검색할 때 해당 분할만 접근할 수 있도록 하여 성능 향상을 기대할 수 있다. 큐브리드가 제공하는 분할 기법은 칼럼값의 범위를 기준으로 테이블을 분할하는 기법인 레인지 분할 기법, 칼럼의 해시값을 기준으로 분할하는 기법인 해시 분할 기법, 칼럼값의 목록을 기준으로 분할하는 기법인 리스트 분할 기법이 있다.
- 다양한 인덱스 기능 지원 : 큐브리드는 다양한 조건 질의를 수행할 때 가급적 인덱스를 활용할 수 있도록 인덱스 기능을 지원하는데, 별도의 내림차순 인덱스를 생성하지 않아도 오름차순 인덱스만으로 내림차순 인덱스 스캔이 가능한 내림차순 인덱스 스캔(Descending Index Scan), SELECT 리스트의 칼럼이 인덱스에 포함된 경우 인덱스 스캔만으로 요구하는 데이터를 가져올 수 있는 커버링 인덱스(Covering Index), 요구하는 레코드의 정렬 순서가 인덱스의 순서와 같다면 별도의 정렬 작업이 필요 없는 ORDER BY 절 최적화, GROUP BY 절에 있는 모든 칼럼이 인덱스에 포함된다면 질의 수행 시 인덱스를 사용할 수 있어 별도의 정렬 작업이 필요 없는 GROUP BY 절 최적화 기능을 지원한다.
- 고가용성 기능 : 큐브리드는 하드웨어, 소프트웨어, 네트워크 등에 장애가 발생해도 지속적인 서비스가 가능하게 하는 고가용성 기능을 제공한다. 큐브리드의 고가용성 기능은 공유하지 않는 구조이며, 큐브리드 하트비트(Heartbeat)를 이용하여 시스템과 큐브리드의 상태를 실시간으로 감시하고 장애 발생 시 절체(failover)를 수행한다. 고가용성 환경에서 마스터 데이터베이스 서버로부터 슬레이브 데이터베이스 서버로의 데이터 동기화를 위해 마스터 데이터베이스 서버에서 생성되는 트랜잭션 로그를 실시간으로 다른 노드에 복제하는 트랜잭션 로그 다중화 단계와, 실시간으로 복제되는 트랜잭션 로그를 분석하여 슬레이브 데이터베이스 서버로 데이터를 반영하는 트랜잭션 로그 반영 단계를 수행한다.
- 자바 저장 프로시저 : 저장 프로시저는 중간자에서 실행되는 로직과 데이터베이스에서 실행되는 로직을 분리하여 응용 프로그램의 복잡성을 줄이고, 재사용성, 보안성, 성능을 향상시킬 수 있는 기법이다. 큐브리드는 범용 언어인 자바로 작성되고, 자바 가상 머신(JVM, Java Virtual Machine)에서 구동되는 자바 저장 프로시저를 제공한다. 큐브리드에서 자바 저장 프로시저를 실행하기 위해서는 자바 가상 머신 설치 및 환경 설정, 자바 소스 파일 작성, 컴파일 및 자바 리소스 로딩, 로딩된 자바 클래스를 데이터베이스에서 호출할 수 있도록 등록, 자바 저장 프로시저 호출 절차가 수행되어야 한다.
- 클릭 카운터 기능 : 인터넷 환경에서 데이터 검색 시 보통 검색 이력을 남기기 위해 조회수와 같은 카운터를 데이터베이스에 유지한다. 일반적으로 시나리오는 SELECT 문을 이용하여 데이터를 검색하고, 검색한 질의에 대한 조회수를 증가 시키기 위해 다시 업데이트 문을 통해 구현하는 것이 일반적인 방식이었다. 이 방식은 한 데이터에 SELECT 가 집중될 때 업데이트 에 대한 잠금 경쟁이 가중되어 급격한 성능 저하가 발생하는 단점이 존재한다. 이에, 큐브리드는 인터넷 환경에서 사용자 편의성 및 성능 측면에서 최적화된 기능을 제공하기 위해 클릭 카운터(Click Counter) 라는 새로운 개념을 도입하고, INCR() 함수 및 WITH INCREMENT FOR 구문을 제공한다.
- 관계형 데이터 모델 확장 : 컬렉션(collection) 면에서는 관계형 데이터베이스에서는 한 칼럼이 여러 개의 값을 가지는 것을 허용하지 않지만, 큐브리드는 한 칼럼이 여러 개의 값을 가지도록 정의할 수 있다. 이를 위해 컬렉션이라는 데이터 타입을 제공하는데, 컬렉션 타입은 컬렉션 원소의 중복 허용 여부와 순서 유지 여부에 따라 크게 세트(SET), 멀티셋(MULTISET), 리스트(LIST)의 세 종류로 구분할 수 있다. 세트는 각 원소의 중복을 허용하지 않는 집합으로서, 원소의 나열 순서와 무관하게 중복 없이 정렬되어 저장되며, 멀티셋은 각 원소의 중복을 허용하는 집합으로서, 원소의 나열 순서와 무관하다. 리스트는 각 원소의 중복을 허용하는 집합으로서 세트와 멀티셋과 달리 원소의 순서를 유지한다. 상속 면에서는 상위 클래스 테이블에서 생성된 칼럼과 메서드들을 하위 클래스에서 재사용할 수 있게 하는 개념으로, 큐브리드는 상속을 지원함으로써 재사용성을 제공한다. 큐브리드에서 제공하는 상속 기능을 이용하여 공통의 칼럼을 가지는 상위 클래스를 생성하고, 상위 클래스를 상속받아 고유한 칼럼을 추가한 하위 클래스를 생성함으로써, 필요한 칼럼 수를 최소화한 데이터베이스 모델링이 가능해진다.[4]
단점[편집]
- 브로커 사용 : 3계층 구조 중 하나인 브로커 사용에는 단점이 있다. 가장 두드러지는 단점은 구조가 복잡해 보이는 것이다. 그 이유는 데이터베이스 서버와 브로커는 별개의 컴포넌트로 동작한다. 데이터베이스 서버 입장에서 커브 캐스(cub_cas)는 하나의 클라이언트이고, 브로커 입장에서 데이터베이스 서버는 드라이버 요청에 따라 선택적으로 연결해야 할 대상이다. 따라서, 큐브리드를 설정할 때 데이터베이스 서버를 따로 설정해야 한다. 데이터베이스 서버 및 클라이언트 라이브러리 동작은 cubrid.conf 파일로 설정하고, 브로커 동작은 cubrid.conf 파일로 설정한다. 예를 들어, 애플리케이션에서 사용할 연결 수를 설정했는데 연결이 부족하여 늘려야 하면 애플리케이션에서 필요한 연결 요청을 받을 커브 캐스가 구동되도록 브로커 설정을 변경하고, 늘어난 커브 캐스가 커브 서버(cub_server)에 접속할 수 있도록 커브 서버 설정도 변경해야 한다. 이처럼, 양쪽 모두 설정을 변경해야 한다는 점이 복잡하고 어려워 보인다.
- 성능 저하 : 처리 단계가 늘어나기 때문에 성능이 떨어질 수 있다. 성능은 응답 시간(response time)과 처리량(throughput)으로 측정할 수 있는데, 처리 단계가 늘어나면 응답 시간도 길어진다. 질의 하나를 수행할 때 응답 시간의 차이는 수 밀리초(ms) 정도지만 자바 데이터베이스 접속성(JDBC)을 이용해서 단일 스레드로 질의를 반복 수행하는 작업을 수행한다면 큰 차이가 생길 수 있다. 응답 시간이 길어지는 가장 큰 이유는 통신 횟수 증가인데, 단일 클라이언트가 아닌 멀티 클라이언트 환경에서는 통신 횟수 증가에 따른 시간 증가가 어느 정도 상쇄된다. 또한, 서버 부하가 극단적으로 심한 환경에서는 일반적으로 서버가 수행하는 기능의 일부를 클라이언트에서 수행하여 서버의 리소스를 확보할 수 있다. 서버의 리소스를 추가로 확보할 수 있다는 것은 서버의 처리량을 늘릴 수 있다는 것을 의미한다. 즉, 처리량은 크게 영향을 받지 않으며 오히려 처리량을 더 늘릴 수도 있다.
- 장애 포인트 증가 : 브로커라는 중간 레이어가 있기 때문에 장애 포인트가 늘어난다. 이에, 큐브리드는 장애를 대비하기 위해 고가용성 기능을 제공하며 브로커 이중화도 지원한다. 애플리케이션에서 큐브리드에 접속하는 연결 URL은 서버 주소, 포트 번호, 데이터베이스 이름, 데이터베이스 사용자 이름, 데이터베이스 사용자 비밀번호로 구성되는데, 해당 아이피(IP)와 포트로 접속이 실패했을 때 연결을 시도할 접속 정보를 추가로 설정할 수 있다. 즉, 브로커를 이중화하여 하나의 브로커에 장애가 발생하면 다른 브로커를 통하여 연결하도록 설정하여 장애에 대비한다.[5]
활용[편집]
㈜큐브리드[편집]
- 국가 기관
국가정보자원관리원은 50여 개 중앙행정기관의 정보 통신 기술 인프라를 위탁 운영하는 행정안전부 산하기관으로 대전에 위치한 1센터와 광주에 위치한 2센터에 1,500여 개의 업무 시스템이 운영하며, 2011년부터 G-클라우드 인프라를 구축하기 시작했다. G-클라우드 구축 이후 신규 시스템 개발 및 노후 대개체 전환 사업을 통해 700여 개 이상의 업무 시스템이 클라우드 기반으로 운영하며, 큐브리드는 G-클라우드의 표준 데이터베이스 관리 시스템으로 채택되어 800여 개 데이터베이스 인스턴스가 운영 중이다. 국방통합데이터센터는 국방부 및 육해공군의 전산소에서 운영되고 있던 정보시스템을 2014년 국방통합데이터센터 용인에 위치한 1센터와 계룡에 위치한 2센터로 통합 이전하는 사업을 진행하였으며, 국방 정보시스템의 효율적인 운영을 위하여 클라우드 인프라를 별도로 구축했다. 국방 클라우드 인프라의 표준 데이터베이스 관리 시스템으로 큐브리드가 선정되어 150여 개 이상의 시스템을 전환하여 운영하고 있으며, 육군본부의 부대별 홈페이지 및 응용체계업무와 국방부의 인터넷, 인트라넷 시스템 등도 큐브리드로 구축되어 운영하고 있다. 또한, 온나라 문서 2.0 및 기록물관리시스템은 정부 3.0 클라우드 구현의 일환으로 업무, 정책자료 등을 공유하고 활용하기 위하여 중앙행정기관의 핵심 업무 시스템인 온-나라 및 기록물 관리시스템을 부처별 단독 시스템 형태에서 클라우드 기반의 통합 환경으로 전환했다. 전환된 개방형 클라우드 업무관리시스템인 온나라 문서 2.0 및 기록물 관리시스템은 클라우드 기술과 오픈소스를 활용하였으며, 개방형 클라우드 시스템에 적용된 기능 및 오픈소스를 각 공공기관 및 지방자치단체에서도 단독형 온-나라 시스템과 기록물 관리시스템에 사용할 수 있다.
퍼블릭 클라우드는 클라우드 서비스 제공자(CSP)들과 협업하여 한국교육학술정보원 디지털교과서, 학습커뮤니티인 위두랑, 한국어 능력검증, 계정관리(IM)/SSO, 한국방송통신전파진흥원 기금관리 및 사업관리, 전파관리플랫폼, 기획재정부 국민참여예산 제도, 정보통신산업진흥원 대표 홈페이지, WFK파견지원시스템, 농촌진흥청 사물인터넷 작물 정밀 관리기술 정보서비스, 한국인터넷진흥원 보호나라 서비스, 한국전력거래소 교육포털 등에서 큐브리드가 서비스된다.[1]
- 시스템
외교부 재외공관 통합업무관리시스템은 전자결재, 정보공유, 통합검색 등의 활용이 가능하고, 체계적인 외교문서 및 외교통상 정보 등의 관리를 통하여 효율적인 업무 인수인계가 가능한 시스템이다. 전체 183개의 재외공관 중 164개의 재외공관이 통합업무관리시스템을 큐브리드로 구축하여 운영한다. 문화체육관광부 공직자 통합 메일시스템은 69개 행정기관, 217개 지역자치단체, 12개 교육청 등의 기관에서 약 45만 명이 사용하고 있는 메일 시스템이다. 기존 메일 시스템의 노후화로 서비스의 장애가 자주 발생하였고, 이를 해결하기 위하여 고도화 사업 진행 시 대용량 처리가 가능하도록 시스템을 개선했다. 특징은 큐브리드 샤드(Shard) 기술을 적용하여 대용량 트랜잭션 및 데이터를 분산 처리한다. 또한, 공공기관은 국립국어원, 국립현대미술관, 국립역사박물관, 국민체육진흥공단, 국립환경과학원, 국사편찬위원회, 중앙선거관리위원회, 한국저작권위원회, 한국저작권보호원, 한국전력공사, 인천국제공항공사, 대한무역투자진흥공사, 국립중앙도서관, 한국고용정보원, 한국정보화진흥원, 정보통신산업진흥원, 공무원연금공단, 한국철도시설공단 등 다수의 공공기관 웹서비스 및 업무 시스템이 큐브리드로 운영한다.
또한, 민간기업은 KBS, 에쓰오일, 하나투어, 세종텔레콤㈜, 효성아이티엑스㈜, 세틀뱅크㈜, 신협중앙회, 한양대학교병원, 한컴엠디에스, 엑스소프트 등 다수의 민간기업 웹서비스와 업무 시스템이 큐브리드로 운영되고 있다.[1]
- 지역
광역시도는 인천시와 부산시 대표 홈페이지를 큐브리드로 전환하여 운영하며, 관광 콘텐츠에 특화된 강원도청은 스마트 관광 클라우드 시스템 및 관광 통합 홈페이지를 큐브리드로 운영한다. 서울시는 국산 정보통신기술(ICT) 운영증명체계 구축사업을 통하여 국산 오픈소스 도입에 대한 검증을 진행했으며, 검증 완료 후 시정홍보물 관리시스템과 사회적기업 홈페이지, 운영실적증명 발급시스템 등의 내부시스템을 큐브리드로 전환하여 운영한다. 경기도청은 수사 정보시스템에 큐브리드를 사용한다. 대구광역시는 국가정보자원관리원의 G-클라우드를 모델로 하여, 광역시도로는 처음으로 하드웨어 및 소프트웨어까지 공동 활용하는 클라우드 컴퓨팅 시스템을 구축했다. D-클라우드는 정보 자원의 통합과 표준화로 정보시스템의 초기 구축 비용을 절감하고, 지역 정보기술(IT) 발전을 선도하기 위하여 클라우드의 표준 시스템을 오픈소스로 선정했으며, 대구광역시 통합홈페이지, 빅데이터 서비스 등을 운영한다. 또한, 지방자치단체는 청주시청, 중랑구청, 창원시청, 인천서구청, 인천경제자유구역청의 지자체 대표 홈페이지를 큐브리드로 전환하여 운영하며, 광명시청은 가상화 기술과 오픈소스인 큐브리드, 제이보스 등을 도입하여 산재해 있는 홈페이지를 통합하는 웹 가상화 구축사업을 진행했다. 평택시청은 민원 콜센터시스템을 큐브리드로 운영한다.[1]
네이버㈜[편집]
큐브리드는 2008년 소스코드 공개 이후 국내외 30만건 이상의 제품 다운로드 실적을 보유하고 있으며, 국가정보자원관리원, 국방통합데이터센터, 민간기업 등 서비스 계약 고객 기준으로 800개 이상의 시스템에서 1,200여개 데이터베이스 인스턴스가 서비스 중에 있다. 큐브리드는 대규모 트래픽을 신속히 처리하고, 편리한 사용을 돕는 여러 기능이 탑재된 큐브리드를 통해 비즈니스의 안정성을 높였다. 네이버 클라우드 플랫폼에서는 네이버㈜와 라인 서비스에서 검증된 큐브리드 9.2 버전을 제공한다. 또한, CLI(Command Line Interface) 형태의 모니터링 프로그램을 제공한다. 이는 큐브리드 데이터베이스 상태 변화를 보기 위한 프로그램으로, 1초 단위로 데이터베이스 상태를 화면에 출력하여 실시간에 가깝게 데이터베이스 상태의 변화를 모니터링할 수 있어 사용자가 안정적이고 빠른 데이터베이스 운영을 할 수 있도록 지원한다. 그래픽 유저 인터페이스 환경의 어드민/마이그레이션 툴도 제공하는데 큐브리드 매니저는 그래픽 유저 인터페이스 도구로 데이터베이스 모니터링 및 관리, 질의 기능이 가능한 큐브리드 데이터베이스 전용 관리 도구이다. 몇 번의 클릭으로 서버의 상태를 확인 할 수 있으며, 데이터베이스 생성, 구동/정지 및 설정을 변경할 수 있다. 응용 개발에 필요한 질의 편집기 도구도 제공해준다. 큐브리드 마이그레이션 툴킷은 그래픽 유저 인터페이스 환경 기반에서 스키마 객체 및 데이터를 마이그레이션 하는 도구로서, 오라클 및 마이에스큐엘 데이터베이스를 큐브리드 데이터베이스로 마이그레이션 하는 기능을 제공한다. 원본 데이터베이스는 오라클 10g 이상, 마이에스큐엘 4.1.22 이상 버전을 지원한다.[6] 네이버㈜에 대해 자세히 보기
와탭랩스[편집]
정보기술 모니터링 전문기업인 와탭랩스는 오픈소스 데이터베이스 관리 시스템 큐브리드 모니터링 솔루션 와탭 for 큐브리드를 출시했다. 와탭랩스와 큐브리드의 협력을 통해 2019년에 개발된 이번 제품은 큐브리드 데이터베이스 인스턴스가 다양한 환경에서 안정적으로 운영될 수 있도록 맞춤형 모니터링을 제공한다. 이 제품은 데이터베이스 성능을 실시간으로 감시하고 문제점을 진단, 분석하여 문제가 되는 에스큐엘을 튜닝하고 적용 후 문제점이 해결되었는지 즉각 확인할 수 있는 제품이다. 데이터베이스에 문제가 발생하는 경우, 알림을 전송하여 담당자가 상황을 빠르게 인지하고, 수집된 데이터를 통하여 데이터베이스 상황을 보다 정밀하게 분석하여 근본 원인을 파악하는 것이다. 또한, 모니터링 대상 데이터베이스 서버에 직접 에이전트를 설치하지 않고 쿼리 베이스로 데이터를 수집하여 운영체제에 무관하게 사용할 수 있다. 퍼블릭/프라이빗 클라우드 및 멀티 클라우드 환경에 대한 통합 모니터링을 지원하며, 서비스형 소프트웨어(SaaS) 방식과 설치형 방식 2가지로 이용할 수 있다. 서비스 환경이 점점 더 복잡해지고 데브옵스에 대한 필요성이 높아지고 있는 가운데 와탭 for 큐브리드 제품을 출시함으로써 국내외 다양한 사용자들이 안정적으로 정보기술 서비스를 운영할 수 있도록 지원한다.[7] 와탭랩스에 대해 자세히 보기
구조[편집]
프로세스[편집]
큐브리드는 객체 관계형 데이터베이스 관리 시스템으로서, 데이터베이스 서버, 브로커, 큐브리드 매니저로 구성된다. 데이터베이스 서버는 큐브리드 데이터베이스 관리 시스템의 핵심 구성 요소로 데이터 저장 및 관리 기능을 수행하며, 멀티스레드 기반 클라이언트/서버 방식으로 동작한다. 또, 사용자가 입력한 질의를 처리하고, 데이터베이스 내의 객체를 관리한다. 잠금 기법과 로깅 기법을 이용해 다수 사용자가 동시에 사용하는 환경에서도 완벽한 트랜잭션을 지원하며, 운영에 필요한 데이터베이스 백업과 복구 기능을 지원한다. 브로커는 서버와 외부 응용 프로그램 간의 통신을 중계하는 큐브리드 전용 중간자로서, 커넥션 풀링, 모니터링, 로그 추적 및 분석 기능을 제공한다. 큐브리드 매니저는 데이터베이스와 브로커를 원격에서 관리할 수 있는 그래픽 유저 인터페이스 툴이다. 또한, 사용자가 데이터베이스 서버에 에스큐엘 질의를 수행할 수 있는 편리한 기능의 질의 편집기를 제공한다.[4]
데이터베이스 볼륨[편집]
- 영구적 볼륨
영구적 볼륨은 한번 생성되면 영구적으로 존재하는 데이터베이스 볼륨으로서, 볼륨 타입으로는 범용(Generic), 데이터(Data), 임시(Temp), 인덱스(Index), 제어(Control), 활성 로그(Active log), 보관 로그(Archive log)가 있다. 먼저, 범용 볼륨에서 사용자는 데이터베이스에 추가할 볼륨 타입을 데이터, 임시, 인덱스 중 하나의 용도로 지정하여 효율적으로 관리할 수 있다. 별도로 볼륨 타입을 지정하지 않는 경우에는 범용 볼륨으로 지정되며, 범용 볼륨은 데이터 혹은 인덱스를 저장한다. 단, 스키마는 범용 볼륨에만 저장되며, 스키마 저장을 위한 별도의 볼륨 타입은 존재하지 않는다. 또한, 볼륨이 자동으로 증가하는 경우에도 범용 볼륨으로 지정된다. 데이터 볼륨은 인스턴스, 테이블, 멀티미디어 데이터 등과 같은 데이터를 저장하기 위한 공간이다. 임시 볼륨은 질의 처리 및 정렬을 수행할 때 중간, 최종 결과를 임시로 저장하는 공간으로, 아래에서 설명할 일시적 임시 볼륨과 구분하기 위해 영구적 임시 볼륨이라고도 한다. 임시 볼륨은 영구적으로 확보한 공간으로, 해당 공간에 존재하는 데이터가 임시로 저장 및 소멸하는 것을 의미한다. 따라서, 큐브리드를 재시작하면 임시 볼륨 공간 내의 데이터는 초기화되고, 이에 관련된 로그 정보는 남지 않는다. 영구적 또는 일시적 임시 볼륨을 사용할 수 있는 질의를 예로들면, 셀렉트(SELECT)문 등 질의 결과가 생성되는 질의, 그룹별 검색(GROUP BY)이나 정렬 검색(ORDER BY)이 포함된 질의, 부질의(Subquery)가 포함된 질의, 정렬 병합(Sort-Merge) 조인이 수행되는 질의, 크리에이트 인덱스(CREATE INDEX)문이 포함된 질의 등이 있다. 이와 같은 질의를 수행할 때 셀렉트 결과를 저장하거나 데이터를 정렬하기 위해 지정한 메모리 공간을 소진하면 임시 볼륨 공간을 사용한다.
질의 처리 및 정렬 결과를 저장하기 위해 사용하는 저장 공간의 순서는 탬프(temp)_파일(file)_메모리(memory)_사이즈(size)_인(in)_페이지(pages) 시스템 피라미터에 의해 확보된 메모리, 영구적 임시 볼륨, 일시적 임시 볼륨이며, 사용 중인 저장 공간을 모두 소진하면 이 순서대로 저장 공간을 사용한다. 인덱스 볼륨은 신속한 질의 처리 또는 무결성 제약 조건(Integrity Constraints) 검증을 위한 인덱스 정보를 유지하는 공간이다. 제어 파일은 데이터베이스 안에 존재하는 볼륨의 정보, 백업 정보 및 로그의 정보를 저장하는 파일이다. 이때, 볼륨 정보는 데이터베이스 내 모든 볼륨의 이름과 위치, 내부 볼륨 식별자를 포함하는 정보로서, 데이터베이스가 재시작될 때 큐브리드는 볼륨 정보 제어 파일을 판독하며, 새로운 데이터베이스 볼륨이 추가될 때에 새로운 엔트리를 볼륨 정보 제어 파일에 기록한다. 백업 정보는 정보 볼륨에 대한 모든 백업의 위치는 백업 정보 제어 파일에 기록되고, 이 제어 파일은 로그 파일이 관리되는 곳에 유지된다. 로그 정보는 모든 활성 로그와 보관 로그의 이름을 포함하며, 사용자는 로그 정보 제어 파일을 통해 보관 로그의 정보를 확인할 수 있다. 이러한 로그 정보 제어 파일은 로그 파일과 동일한 위치에서 생성 및 관리된다. 이처럼 각각의 제어 파일은 데이터베이스 볼륨의 위치, 백업 정보, 로그 정보를 포함하며, 데이터베이스가 재시작하면서 읽는 파일이므로 사용자 임의로 변경하면 안 된다.
활성 로그는 데이터베이스의 최근 변경 사항을 포함하는 로그이며, 데이터베이스에 문제가 발생하는 경우에는 활성 로그 및 보관 로그를 이용하여 고장 발생 전의 커밋된 시점으로 완전하게 데이터베이스를 복구할 수 있다. 보관 로그는 최근의 변경 사항을 포함하고 있는 활성 로그 공간이 모두 사용된 후에 지속해서 생성되는 로그를 보관하기 위한 볼륨이다. 시스템 파라미터 로그(log), 맥스(max), 아카이브(archives)의 값이 0보다 크게 설정된 경우에는 활성 로그 볼륨의 공간이 소진된 후에 보관 로그 볼륨이 추가된다. 제품 설치 시에는 0으로 설치되어 있고 로그, 맥스, 아카이브의 설정값만큼 볼륨 파일이 유지된다. 디스크 공간 확보를 위해 불필요한 보관 로그는 시스템의 설정에 의해 삭제되어야 하지만, 데이터베이스 복구에 사용하려면 이 값을 적절하게 설정해야 한다. 마지막으로, 백그라운드 보관 로그는 백그라운드에서 로그 보관 작업을 수행할 때 사용하는 볼륨이다.[4]
- 일시적 볼륨
일시적 볼륨은 영구적 볼륨과 반대되는 의미이다. 즉, 사용자가 영구적 볼륨으로 지정한 공간을 초과하여 데이터가 축적되는 경우에만 일시적으로 마련되는 저장 공간을 일시적 볼륨이라 하며, 이는 서버 프로세스가 종료됨에 따라 소멸한다. 이처럼 일시적으로 생성 및 소멸하는 볼륨으로 일시적 임시 볼륨(Temporary Temp Volume)이 있다. 영구적 볼륨에 속하는 임시 볼륨은 영구적으로 공간을 확보하는 볼륨인 데 비해, 일시적 임시 볼륨은 영구적 임시 볼륨으로 지정된 공간 외에 추가 공간이 필요한 경우에는 시스템이 일시적으로 생성하는 임시 볼륨이다. 일시적 임시 볼륨을 생성하는 비용은 상당히 크기 때문에 데이터베이스 관리자는 데이터베이스 운영 상황을 고려하여 적절한 크기의 영구적 임시 볼륨을 추가하는 것이 성능상 유리하다. 데이터베이스 생성 시에 관리자는 일시적 임시 볼륨이 생성될 수 있는 공간도 고려해야 한다. 일시적 임시 볼륨은 한 번 생성되면 데이터베이스를 재시작하기 전까지 유지되며, 한 번 늘어난 크기는 줄어들지 않는다. 일시적 임시 볼륨의 크기가 지나치게 커지면, 데이터베이스를 재시작하여 일시적 임시볼륨이 자동으로 삭제되도록 해야한다. 단, 일시적 임시 볼륨을 수동으로 삭제해서는 안 된다. 큐브리드의 일시적 임시 볼륨의 파일명은 db_name_tnum 형식의 이름을 갖는다. 여기서 db_name은 데이터베이스 이름이고, num은 볼륨 식별자이다. 볼륨 식별자는 32766에서부터 1씩 감소한다. 일시적 임시 볼륨이 생성되는 개수는 트랜잭션 처리에 필요한 공간의 크기에 따라 시스템이 결정한다. 그러나, 일시적 임시 볼륨의 크기는 사용자가 시스템 파라미터 설정 파일(cubrid.conf)의 탬프, 파일, 맥스, 사이즈, 인, 페이지 파라미터의 값을 설정함으로 제한될 수 있다. 이 파라미터의 기본값은 -1로, 여유 공간이 있는 한 최대한 생성한다. 0으로 설정되면 영구적 임시 볼륨이 소진되어도 일시적 임시 볼륨을 생성하지 않는다. 저장 위치 설정으로는 기본적으로 첫 번째 데이터베이스 볼륨이 생성된 위치에 만들어진다. 그러나, 사용자가 탬프, 볼륨(volume), 패스(path) 파라미터값을 설정하여 일시적 임시 볼륨이 저장될 다른 디렉터리를 지정할 수도 있다. 마지막으로, 일시적 임시 볼륨은 데이터베이스가 구동 중일 때만 일시적으로 존재하며, 서버가 운영 중일 때 일시적 임시 볼륨을 임의로 삭제하면 안 된다. 데이터베이스 서버가 정상적으로 종료되면 일시적 임시 볼륨이 삭제되고, 데이터베이스 서버가 비정상적으로 종료되면 서버가 재시작할 때 일시적 임시 볼륨이 삭제된다.[4]
- 백업 볼륨
백업 볼륨은 데이터베이스에 대한 스냅샷으로서, 이러한 백업 볼륨과 로그 볼륨을 기반으로 특정 시점까지 발생한 트랜잭션을 복구할 수 있다. 사용자는 큐브리드 백업 데이터베이스 유틸리티를 통해 데이터베이스 복구를 위해 필요한 모든 데이터를 복사할 수 있으며, 데이터베이스 환경 설정 파일의 백업(backup), 볼륨, 맥스, 사이즈, 바이트(bytes) 파라미터값을 설정하여 백업 볼륨의 분할 크기를 조정할 수 있다.[4]
데이터베이스 서버[편집]
- 데이터베이스 서버 프로세스
데이터베이스 서버 프로세스는 각 데이터베이스에 한 개의 서버 프로세스가 존재한다. 서버 프로세스는 큐브리드 데이터베이스 서버를 구성하는 핵심 프로세스로 데이터베이스 파일과 로그 파일 등에 직접 접근하여, 사용자의 요청을 처리한다. 클라이언트 프로세스는 서버 프로세스와 TCP/IP 통신을 통해 접속하며, 하나의 서버 프로세스는 스레드를 생성해서 다수의 클라이언트 프로세스의 요청 작업을 데이터베이스별로 처리한다. 즉, 서버 프로세스별로 시스템 파라미터 설정을 지정할 수 있으며 서버 프로세스는 맥스, 클라이언트(clients) 파라미터값으로 지정된 수만큼 클라이언트 프로세스의 접속이 가능하다.[4]
- 마스터 프로세스
마스터 프로세스는 클라이언트 프로세스가 서버 프로세스에 접속하여 통신할 수 있게 하는 중개 프로세스로서, 호스트별로 한 개씩 동작한다. 또한, 지정된 TCP/IP 포트에 대기하고 있고, 클라이언트 프로세스는 해당 TCP/IP 포트로 마스터 프로세스에 접속한 후 마스터 프로세스가 지정된 데이터베이스 이름에 따라 해당 서버 프로세스로 소켓 포트를 변경하여 접속을 처리한다.[4]
- 실행 모드
실행 모드는 서버 프로세스를 제외한 큐브리드 프로그램들의 종류에 따라 두 가지 모드가 있다. 클라이언트 및 서버 모드와 독립 모드로 나뉜다. 클라이언트/서버 모드는 해당 프로그램이 클라이언트 프로세스로서 동작하여 서버 프로세스에 접속하는 방식이고, 독립 모드는 해당 프로그램이 서버 프로세스의 기능을 포함하고 있어 직접 데이터베이스 파일에 접근하여 수행하는 방식이다. 예를 들어, 데이터베이스 생성 유틸리티나 복구 유틸리티 등은 다수 사용자가 데이터베이스에 접근하는 것을 막고 해당 프로그램만이 온전히 점유해서 작업할 수 있도록 독립 모드로 실행된다. 예를들어, C에스큐엘 인터프리터는 클라이언트 및 서버 모드로 동작하여 서버 프로세스에 접속할 수도 있고, 독립 모드로 동작하여 데이터베이스에 접근하여 에스큐엘 문을 실행할 수도 있다. 참고로, 하나의 데이터베이스에 서버 프로세스와 독립 모드로 실행되는 프로그램이 동시에 접근할 수는 없다.[4]
브로커[편집]
브로커는 다양한 응용 클라이언트가 데이터베이스 서버에 연결할 수 있도록 중계하는 중간자이다. 브로커를 포함하는 큐브리드 시스템은 응용 클라이언트, 커브 브로커(cub_broker), 커브 캐스, 데이터베이스 커브 서버(cub_server)를 포함한 다중 계층 구조를 가진다. 응용 클라이언트는 사용할 수 있는 인터페이스는 CCI-API(CUBRID Call Inter face-Application Programming Interface), ODBC(Open DataBase Connectivity), 자바 데이터베이스 접속성(JDBC), PHP, 파이썬, 루비, OLE 데이터베이스(Object Linking and Embedding), ADO.NET, Node.js 등이 있다. 커브 캐스는 연결을 요청하는 모든 종류의 응용 클라이언트가 사용하는 공용 응용 서버 역할을 한다. 또한, 데이터베이스 서버의 클라이언트로 동작하여 클라이언트의 요청으로 데이터베이스 서버와 연결을 제공한다. 서비스 풀(service pool) 내에서 구동되는 커브 캐스의 개수는 cubrid_broker.conf 설정 파일에 지정할 수 있으며, 커브 브로커에 의해 동적으로 조정된다. 커브 캐스는 큐브리드 데이터베이스 서버의 클라이언트 라이브러리와 링크되는 프로그램으로 데이터베이스 서버 프로세스에는 클라이언트 모듈로 동작하며, 쿼리 파싱이나 최적화, 실행 계획 생성 등의 작업이 클라이언트 모듈에서 수행된다.
커브 브로커는 응용 클라이언트와 커브 캐스 사이의 연결을 중계하는 기능을 수행한다. 즉, 응용 클라이언트가 접근을 요청하면 커브 브로커라는 공유 메모리(shared memory)를 통해 커브 캐스의 상태를 파악하여 접근 가능한 커브 캐스에게 요청을 전달하고, 해당 커브 캐스로부터 전달받은 요청에 대한 처리 결과를 응용 클라이언트에게 반환한다. 또한, 커브 브로커는 서비스 풀 내의 커브 캐스 개수를 조정하여 서버 부하를 관리하고, 커브 캐스의 구동 상태를 모니터링 및 관리한다. 만약, 응용 클라이언트의 요청을 커브 캐스 1에게 전달하였는데, 비정상적인 종료로 인해 커브 캐스 1과의 연결이 실패하면, 커브 브로커는 응용 클라이언트에게 연결 실패에 관한 에러 메시지를 전송하고 커브 캐스 1을 재구동한다. 새롭게 구동된 커브 캐스 1은 정상적인 대기 상태가 되어, 새로운 응용 클라이언트의 요청으로 재연결된다. 공유 메모리 공유 메모리에는 커브 캐스의 상태 정보가 저장되며, 커브 브로커는 공유 메모리에 저장된 커브 캐스의 상태 정보를 참조하여 응용 클라이언트와의 연결을 중계한다. 공유 메모리에 저장된 커브 캐스의 상태 정보를 통해 시스템 관리자는 어떤 커브 캐스가 현재 작업을 수행 중인지, 어떤 응용 클라이언트의 요청이 처리 중인지를 확인할 수 있다.[4]
인터페이스 모듈[편집]
자바 데이터베이스 접속성은 자바 환경에서 데이터베이스 응용 프로그램을 작성하는 표준 API이고, ODBC는 윈도우 환경에서 데이터베이스 응용 프로그램을 작성하는 표준 API이며, ODBC 드라이버는 CCI 라이브러리를 기반으로 작성되었다. OLE DB는 윈도우 환경에서 COM 방식으로 데이터베이스 응용 프로그램을 작성하는 API. OLE DB 프로바이더는 CCI 라이브러리를 기반으로 작성되었고, PHP는 PHP 환경에서 데이터베이스 응용 프로그램을 작성하는 API이고, PHP 드라이버는 CCI 라이브러리를 기반으로 작성되었다. 마지막으로 CCI는 큐브리드에서 제공하는 C언어 인터페이스이다. C 라이브러리 형태로 제공된다. 각 인터페이스 모듈들은 모두 브로커를 통해서 데이터베이스 서버에 접근하게 된다. 브로커는 다양한 응용 클라이언트가 데이터베이스 서버에 연결할 수 있도록 중계하는 중간자로, 각 인터페이스 모듈의 요청을 받아서 데이터베이스 서버의 클라이언트 라이브러리에서 제공하는 native-C API를 호출하게 된다.[4]
비교[편집]
큐브리드는 2008년 11월 큐브리드 2008 R1.0을 출시한 이후 2014년 5월 큐브리드 9.3을 출시할 때까지 많은 기능을 추가했다. 그 결과 큐브리드는 기본적으로 안시 에스큐엘-92 표준을 따르는 것 외에 계층 질의, 머지(MERGE) 문, 분석 함수(Analytic Function) 등을 추가로 지원했다. 에스큐엘:2011 표준까지 나왔을 때 기준으로, 큐브리드를 포함한 주요 데이터베이스 관리 시스템에 특징적인 에스큐엘 기능 비교는 다음과 같다.[8]
프로그래밍 비교 기능 오라클 에스큐엘 서버 마이에스큐엘 큐브리드 저장 프로시저
(Stored Procedure)지원 지원 지원 일부 지원 테이블 함수
(Table Function)지원 지원 미지원 미지원 사용자 정의 집계
(Custom Aggregate)지원 지원 미지원 미지원 문장 수준 트리거
(Statement Level Triggers)지원 지원 미지원원 지원 행 수준 트리거
(Row Level Triggers)지원 미지원 지원 지원 내장된 스케줄러
(Built-in Scheduler)지원 지원 지원 미지원
질의문 비교 기능 오라클 에스큐엘 서버 마이에스큐엘 큐브리드 윈도우 함수
(Window function)지원 지원 미지원 일부 지원 CTE
(Common Table Expressions)지원 지원 미지원 미지원 계층적 질의
(Hierarchical Query)지원 미지원 미지원 지원 피벗 연산자 지원 지원 미지원 대체 가능 GROUP BY ROLLUP 지원 지원 지원 지원 이력 데이터베이스 지원 미지원 미지원 미지원 병렬 질의 처리 지원 지원 미지원 미지원 문자열 집계 일부 지원 미지원 지원 지원
인덱싱 비교 기능 오라클 에스큐엘 서버 마이에스큐엘 큐브리드 부분적 인덱스
(Partial Index)지원 지원 미지원 지원 내림차순 인덱스
(Descending Index)지원 지원 대체 가능 지원 키가 아닌 칼럼을 포함하는 인덱스 미지원 지원 미지원 미지원 클러스터형 인덱스
(Clustered Index)일부 지원 지원 지원 미지원
주의사항[편집]
- 미지원 주의사항 : 자동 형 변환을 지원하지 않아서 숫자형 데이터에 대해 따옴표를 처리할 수 없고, 문자 세트(Character set)를 지원하지 않아서 응용 프로그램에서 설정한 문자 세트를 그대로 저장하고 출력한다. 멀티바이트 문자를 지원하지 않아서 멀티바이트 문자인 경우에는 이를 고려하여 칼럼 사이즈를 충분히 정의하여야 하고 문자열 함수에서 길이 또는 위치값은 바이트 단위로 처리한다. 또, 데이터베이스 간 조인을 지원하지 않는다.
- 고가용성 사용 시 주의사항 : 프라이머리 키(Primary Key)가 필수여서 있는 경우에만 데이터가 동기화되고, 트리거(Trigger)에 사용 제한이 있어서 트리거를 사용할 경우, 슬레이브에서 중복 수행이 될 수 있다. 또한, 메소드(Method) 사용에 제한이 있어서 복제 로그를 생성하지 않는 메소드를 사용 시 동기화가 안 된다. 예를 들어 add_user()가 있다.
- JSP 사용 시 주의사항 : JSP(제이에스피)를 사용할 때 마스터 및 슬레이브의 모든 노드에 로드(Load)가 필요하다.[9]
각주[편집]
- ↑ 1.0 1.1 1.2 1.3 1.4 큐브리드 공식 홈페이지 - https://www.cubrid.com/
- ↑ 〈Cubrid〉, 《케이티 클라우드》
- ↑ 〈큐브리드 제품 소개〉, 《유니원아이앤씨》
- ↑ 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 CUBRID 소개 큐브리드 - https://www.cubrid.org/manual/ko/9.3.0/intro.html
- ↑ 강철규, 〈CUBRID, 브로커 이야기〉, 《네이버 디투》, 2011-12-23
- ↑ 〈CUBRID〉, 《네이버 클라우드 플랫폼》
- ↑ 〈와탭랩스, 데이터베이스 모니터링 신제품 ‘WhaTap for CUBRID’ 출시〉, 《뉴스와이어》, 2019-09-03
- ↑ 8.0 8.1 이동현, 〈주요 DBMS의 특징적인 SQL 기능 비교〉, 《네이버 디투》, 2014-08-21
- ↑ DMBS개발랩, 〈CUBRID 활용(질의 튜닝 사례 중심)〉, 《큐브리드》
참고자료[편집]
- 큐브리드 공식 홈페이지 - https://www.cubrid.com/
- CUBRID 소개 큐브리드 - https://www.cubrid.org/manual/ko/9.3.0/intro.html
- 〈큐브리드 제품 소개〉, 《유니원아이앤씨》
- DMBS개발랩, 〈CUBRID 활용(질의 튜닝 사례 중심)〉, 《큐브리드》
- 강철규, 〈CUBRID, 브로커 이야기〉, 《네이버 디투》, 2011-12-23
- 〈CUBRID〉, 《네이버 클라우드 플랫폼》
- 〈와탭랩스, 데이터베이스 모니터링 신제품 ‘WhaTap for CUBRID’ 출시〉, 《뉴스와이어》, 2019-09-03
- 이동현, 〈주요 DBMS의 특징적인 SQL 기능 비교〉, 《네이버 디투》, 2014-08-21
- 〈Cubrid〉, 《케이티 클라우드》
같이 보기[편집]