객체 지향 데이터베이스

섬네일|320px|객체 지향 모델의 예시

**객체 데이터베이스**(object database) 또는 **객체 지향 데이터베이스**(object-oriented database)는 객체 지향 프로그래밍에서 사용하는 객체의 형태로 정보를 표현하는 데이터베이스 관리 시스템이다. 객체 데이터베이스는 테이블 지향적인 관계형 데이터베이스와는 다르다. 세 번째 유형인 객체 관계 데이터베이스는 두 접근 방식의 하이브리드 형태다.
객체 데이터베이스는 1980년대 초반부터 고려되어 왔다.

## 개요
ODBMS(Object Database Management System)라고도 불리는 객체 지향 데이터베이스 관리 시스템은 데이터베이스의 기능과 객체 지향 프로그래밍 언어의 기능을 결합한다.
OODBMS를 통해 객체 지향 프로그래머는 제품을 개발하고, 이를 객체로 저장하며, 기존 객체를 복제하거나 수정하여 OODBMS 내에서 새로운 객체를 만들 수 있다. 데이터베이스가 프로그래밍 언어와 통합되어 있기 때문에, OODBMS와 프로그래밍 언어 모두 동일한 표현 모델을 사용하게 되므로 프로그래머는 하나의 환경 내에서 일관성을 유지할 수 있다. 반면, 관계형 DBMS 프로젝트는 데이터베이스 모델과 애플리케이션 사이를 더 명확하게 구분한다.

인트라넷과 엑스트라넷의 구현으로 웹 기반 기술의 사용이 증가함에 따라, 기업들은 복잡한 데이터를 표시하기 위해 OODBMS에 기득권적 관심을 갖게 되었다. 데이터를 객체로 저장하도록 특별히 설계된 DBMS를 사용하는 것은 멀티미디어 프레젠테이션을 지향하는 기업이나 컴퓨터 지원 설계(CAD)를 활용하는 조직에 이점을 제공한다.

일부 객체 지향 데이터베이스는 델파이, 루비, 파이썬, 자바스크립트, 펄, 자바, C 샤프, 비주얼 베이직 .NET, C++, 오브젝티브-C, 스몰토크와 같은 객체 지향 프로그래밍 언어와 잘 작동하도록 설계되어 있다. JADE와 같은 다른 것들은 자체 프로그래밍 언어를 가지고 있다. OODBMS는 객체 지향 프로그래밍 언어와 정확히 동일한 모델을 사용한다.

## 역사
객체 데이터베이스 관리 시스템은 1970년대 초중반 그래프 구조의 객체에 대한 고유한 데이터베이스 관리 지원을 갖추려는 연구에서 비롯되었다. "객체 지향 데이터베이스 시스템"이라는 용어는 1985년경에 처음 등장했다. 주목할만한 연구 프로젝트로는 Encore-Ob/Server(브라운 대학교), EXODUS(위스콘신 대학교 매디슨), IRIS(휴렛 팩커드), ODE(벨 연구소), ORION(Microelectronics and Computer Technology Corporation 또는 MCC), Vodak(GMD-IPSI), Zeitgeist(텍사스 인스트루먼트) 등이 있다. ORION 프로젝트는 다른 어떤 노력보다 더 많은 논문을 발표했다. MCC의 윈 킴(Won Kim)은 그 논문들 중 가장 뛰어난 것들을 모아 MIT 출판사에서 책으로 펴냈다.

초기 상용 제품으로는 Gemstone(Servio Logic, 이후 GemStone Systems로 사명 변경), Gbase(Graphael), Vbase(Ontologic) 등이 있었다. 1980년대 후반부터 1990년대 중반까지 추가적인 상용 제품들이 시장에 진입했다. 여기에는 ITASCA(Itasca Systems), Jasmine(후지쯔, 컴퓨터 어소시에이츠에서 마케팅), Matisse(Matisse Software), Objectivity/DB(Objectivity, Inc.), 오브젝트스토어(Progress Software, 원래 Object Design, Incorporated였던 eXcelon으로부터 인수), ONTOS(Ontos, Inc., Ontologic에서 사명 변경), O2(O2 Technology, 여러 회사와 합병 후 인포믹스에 인수되었으며 이후 IBM에 인수됨), POET(현재 Poet Software를 인수한 Versant의 FastObjects), Versant Object Database(Versant Corporation), VOSS(Logic Arts) 및 JADE(Jade Software Corporation)가 포함된다. 이 제품들 중 일부는 여전히 시장에 남아 있으며, InterSystems Caché와 같은 새로운 오픈 소스 및 상용 제품들이 합류했다.

객체 데이터베이스 관리 시스템은 객체 프로그래밍 언어에 지속성 (컴퓨터 과학)의 개념을 추가했다. 초기 상용 제품들은 다양한 언어와 통합되었다: GemStone(스몰토크), Gbase(LISP 프로그래밍 언어), Vbase(COP), VOSS(스몰토크용 Virtual Object Storage System). 1990년대 대부분 동안 C++이 상용 객체 데이터베이스 관리 시장을 지배했다. 벤더들은 1990년대 후반에 자바를 추가했고, 최근에는 C 샤프를 추가했다.

2004년부터 객체 데이터베이스는 제2의 성장기를 맞이했는데, 이는 Versant의 db4o(db4objects), Obsidian Dynamics의 DTS/S1, Perst(McObject)와 같이 스몰토크, 자바, C# 등 OOP 언어로 완전히 작성되어 널리 보급 가능하고 사용하기 쉬운 오픈 소스 객체 데이터베이스가 등장했기 때문이다. 이들은 이중 오픈 소스 및 상용 라이선스로 제공된다.

## 타임라인
* 1966년
** MUMPS
* 1979년
** InterSystems M
* 1980년
** TORNADO – CAD/CAM용 객체 데이터베이스
* 1982년
** Gemstone 시작 (Servio Logic으로서 집합론적 모델 데이터베이스 머신 구축 목적)
* 1985년 – 객체 데이터베이스 용어 처음 소개됨
* 1986년
** Servio Logic (Gemstone Systems)이 Gemstone 1.0 출시
* 1988년
** Object Design, Incorporated 설립, 오브젝트스토어 개발 시작
** Versant Corporation 시작 (Object Sciences Corp로서)
** Objectivity, Inc. 설립
* 1990년대 초반
** Servio Logic이 Gemstone Systems로 사명 변경
** Gemstone (스몰토크)-(C++)-(자바)
** GBase (LISP)
** VBase (O2- ONTOS – INFORMIX)
** Objectivity/DB
* 1990년대 중반
** InterSystems Caché
** Versant Object Database
** ODABA
** ZODB
** Poet
** JADE
** Matisse
** Illustra 인포믹스
* 2000년대
** lambda-DB: 레오니다스 페가라스(Leonidas Fegaras), 찬드라세카르 스리니바산(Chandrasekhar Srinivasan), 아르빈드 라젠드란(Arvind Rajendran), 데이비드 마이어(David Maier)에 의한 ODMG 기반 객체 지향 DBMS
** 카를 로젠베르거(Carl Rosenberger)에 의해 db4o 프로젝트 시작
** ObjectDB
* 2001년 IBM이 인포믹스 인수
* 2003년 odbpp 공개 출시
* 2004년 db4o가 db4objects, Inc.로서 상업적 런칭
* 2008년 db4o가 Versant Corporation에 인수됨
* 2010년 VM웨어가 GemStone 인수
* 2011년 db4o 개발 중단
* 2012년 Wakanda 오픈 소스 및 상용 라이선스로 첫 프로덕션 버전 출시
* 2012년 Actian이 Versant Corporation 인수
* 2013년 GemTalk Systems가 VM웨어로부터 Gemstone 제품군 인수
* 2014년 db4o의 상업적 제공이 Actian(Versant를 인수한 회사)에 의해 공식적으로 중단됨
* 2014년 Realm
* 2017년 ObjectBox

## 객체 데이터베이스의 채택
지속적 프로그래밍에 기반한 객체 데이터베이스는 엔지니어링 및 공간 데이터베이스, 전기 통신, 그리고 고에너지 물리학 및 분자생물학과 같은 과학 분야의 애플리케이션 영역에서 틈새 시장을 확보했다.

또 다른 객체 데이터베이스 그룹은 기기, 패키지 소프트웨어 및 실시간 컴퓨팅 시스템에서의 임베디드 사용에 초점을 맞추고 있다.

## 기술적 특징
대부분의 객체 데이터베이스는 어떤 종류의 질의 언어를 제공하여 선언형 프로그래밍 접근 방식을 사용하여 객체를 찾을 수 있도록 한다. 제품 간의 가장 큰 차이점은 객체 질의 언어 분야와 질의 및 내비게이션 인터페이스의 통합 부분에서 나타난다. 객체 데이터 관리 그룹(ODMG)은 객체 질의 언어인 OQL을 통해 표준화를 시도했다.

데이터 액세스는 포인터를 따라감으로써 검색 없이 객체를 직접 회수할 수 있기 때문에 더 빠를 수 있다.

제품 간의 또 다른 차이점은 데이터베이스의 스키마를 정의하는 방식에 있다. 그러나 일반적인 특징은 프로그래밍 언어와 데이터베이스 스키마가 동일한 유형 정의를 사용한다는 점이다.

데이터와 관련된 클래스 메서드가 데이터의 올바른 해석을 담당하기 때문에 멀티미디어 애플리케이션이 용이해진다.

많은 객체 데이터베이스(예: Gemstone 또는 VOSS)는 버전 관리 기능을 제공한다. 객체는 모든 버전의 집합으로 간주될 수 있다. 또한 객체 버전은 그 자체로 객체로 취급될 수 있다. 일부 객체 데이터베이스는 이력 데이터베이스의 기초가 되는 데이터베이스 트리거 및 제약 조건에 대한 체계적인 지원도 제공한다.

이러한 데이터베이스의 효율성은 한 항목에 대해 방대한 양의 데이터가 요구되는 분야에서도 크게 향상된다. 예를 들어, 금융 기관은 사용자의 계좌 정보를 가져와서 거래 내역, 계좌 정보 항목 등과 같은 광범위한 정보를 효율적으로 제공할 수 있다.

## 표준
객체 데이터 관리 그룹(ODMG)은 객체 데이터베이스 및 객체 관계 매핑 벤더, 학계 인사 및 이해관계자들로 구성된 컨소시엄이었다. 그 목표는 데이터베이스 관리 시스템에 객체를 저장하는 이식 가능한 애플리케이션을 가능하게 하는 사양 세트를 만드는 것이었다. 이들은 여러 버전의 사양을 발표했다. 마지막 릴리스는 ODMG 3.0이었다. 2001년까지 대부분의 주요 객체 데이터베이스 및 객체 관계 매핑 벤더들은 ODMG Java Language Binding을 준수한다고 주장했다. 사양의 다른 구성 요소에 대한 준수 여부는 엇갈렸다. 2001년에 ODMG Java Language Binding은 자바 데이터 객체 사양의 기초로서 자바 커뮤니티 프로세스에 제출되었다. 그 후 ODMG 회원사들은 자바 데이터 객체 사양에 노력을 집중하기로 결정했다. 그 결과 ODMG는 2001년에 해체되었다.

많은 객체 데이터베이스 아이디어는 에도 흡수되었으며 객체 관계 데이터베이스 제품에 다양한 정도로 구현되었다.

2005년에 쿡(Cook), 라이(Rai), 로젠베르거(Rosenberger)는 추가적인 객체 지향 질의 API를 도입하려는 모든 표준화 노력을 중단하고 대신 자바나 .NET과 같은 OO 프로그래밍 언어 자체를 사용하여 질의를 표현하자고 제안했다. 그 결과 네이티브 쿼리(Native Queries)가 등장했다. 마찬가지로 마이크로소프트는 2005년 9월에 C# 및 VB.NET 9 프로그래밍 언어와 긴밀하게 통합된 데이터베이스 질의 기능을 제공하기 위해 LINQ(Language Integrated Query) 및 LINQ의 구현체인 DLINQ를 발표했다.

2006년 2월, 객체 관리 그룹(OMG)은 ODMG 3.0 사양을 기반으로 새로운 사양을 개발할 권리를 부여받았다고 발표하고 객체 데이터베이스 기술 작업 그룹(ODBT WG)을 결성했다. ODBT WG는 객체 데이터베이스 기술의 발전(예: 복제), 데이터 관리(예: 공간 인덱싱), 데이터 형식(예: XML)을 통합하고, 객체 데이터베이스가 채택되고 있는 영역(예: 실시간 시스템)을 지원하는 새로운 기능을 이러한 표준에 포함할 계획이었다. ODBT WG의 작업은 2008년 말의 경제적 혼란 이후 이 노력에 참여한 ODB 벤더들이 자원을 다른 곳에 집중하기로 결정함에 따라 2009년 3월에 중단되었다.

2007년 1월, 월드 와이드 웹 컨소시엄은 XQuery 언어에 최종 권고 상태를 부여했다. XQuery는 XML을 데이터 모델로 사용한다. 원래 객체 데이터베이스를 위해 개발된 일부 아이디어들이 XQuery에 반영되었으나, XQuery 자체가 본질적으로 객체 지향적인 것은 아니다. XML의 인기 덕분에 XQuery 엔진은 관계형 데이터베이스에 담기에는 너무 복잡하거나 가변적인 데이터를 저장하기 위한 수단으로서 객체 데이터베이스와 경쟁하고 있다. 또한 XQuery를 사용하면 객체 지향 시스템에서 제공해 온 캡슐화 기능을 제공하는 모듈을 작성할 수 있다.

XQuery v1 및 XPath v2와 그 이후 버전은 강력하며 오픈 소스 및 자유 소프트웨어(FOSS)뿐만 아니라 상용 시스템에서도 사용할 수 있다. 이들은 배우고 사용하기 쉬우며 매우 강력하고 빠르다. 이들은 관계형이 아니며 XQuery는 SQL에 기반하지 않는다(XQuery를 설계한 사람 중 한 명이 SQL을 공동 발명했음에도 불구하고). 하지만 프로그래밍적 의미에서 객체 지향적이지도 않다. XQuery는 은닉을 통한 캡슐화, 암시적 디스패치, 클래스와 메서드를 사용하지 않는다. XQuery 데이터베이스는 다른 형식도 사용되지만 일반적으로 교환 형식으로 XML과 JSON을 사용한다.

2000년대 초반부터 JSON은 개발자가 데이터 형식을 제어하는 애플리케이션에서 커뮤니티의 채택과 인기를 얻었다. JSON을 위한 XQuery의 질의 아날로그인 JSONiq(XQuery의 핵심 표현식 및 연산을 공유함)는 데이터 중심 정보에 대한 JSON과 XML 형식의 기능적 동등성을 입증했다. 이러한 맥락에서 OODBMS 유지 관리자의 주요 전략은 JSON을 데이터베이스에 소급 적용하는 것(내부 데이터 유형으로 사용함으로써)이었다.

2016년 1월, PostgreSQL 9.5 릴리스는 모든 기본적인 관계형 및 비관계형 조작을 위한 완전한 함수 및 연산 세트를 갖춘 효율적인 JSON 내부 데이터 유형(JSONB)을 제공하는 최초의 FOSS OODBMS가 되었다.

## RDBMS와의 비교
객체 데이터베이스는 관계형 로우 및 컬럼으로 매핑하지 않고 복잡한 데이터와 데이터 간의 관계를 직접 저장하므로, 매우 복잡한 데이터를 다루는 애플리케이션에 적합하다. 객체는 다대다 관계를 가지며 포인터를 사용하여 액세스된다. 포인터는 관계를 설정하기 위해 객체에 연결된다. OODBMS의 또 다른 이점은 전체 시스템에 영향을 주지 않고 작은 절차적 차이만으로 프로그래밍할 수 있다는 점이다.

## 같이 보기
* 관계형 모델

## 각주


분류:데이터베이스 관리 시스템
분류:데이터베이스 모델