[database] 개요
Updated:
정의
- 여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합
역사
- 1950년대에 군비의 집중적·효율적 관리를 위해 컴퓨터를 활용한 도서관 개념을 개발하면서 이를 ‘데이터의 기지’라는 뜻의 데이터베이스로 부름
- 이후 1965년 시스템 디벨로프사가 2차로 개최한 ‘컴퓨터 중심 데이터베이스 시스템’이라는 심포지엄에서 처음 사용
설명
- 데이터베이스만으로는 할 수 있는게 거의 없고 관리 시스템(DBMS)과 통합되어 제공
특징
- 동시 공유
- 계속적인 변화
- 중복 최소화
- 실시간 접근성
- 내용에 의한 참조
보안
- 3요소
- 무결성(integrity)
- 가용성(availability)
- 기밀성(confidentiality)
- 접근제어, 암호화 등을 통해 3요소를 만족시켜야 함
설계
- 요구 조건 분석
- 어떤 데이터베이스를 만들지 결정
- 개념적 설계
- ERD 설계
- 논리적 설계
- 스키마 설계
- 물리적 설계
- 저장 알고리즘 등 물리적 장치와 연관된 부분을 설계
- 구현
- 데이터 삽입
- 운영 및 개선
종류
- 관계형(Relational)
- 데이터의 종속성을 관계로 표현
- 데이터를 행과 열이라는 표 형태로 저장
- 컬럼의 구조와 데이터의 관계가 스키마로 사전 정의
- SQL을 이용하여 데이터 질의
- 단점
- 스키마 수정이 어려움
- 2차원 표 형태이기에 트리 구조의 객체 형태를 표현하기에는 맞지 않음
- 객체형(Object)
- 객체지향 프로그래밍 언어처럼 데이터베이스에 객체 개념을 구현
- 쿼리 사용법이 복잡
- NoSQL
- 집합-지향(Aggregate-oriented) 모델
- 키-값형(Key-value)
- 데이터를 키(Key)와 값(Value)의 쌍으로 매핑
- value에 어떠한 형태든 데이터를 넣을 수 있음
- RDBMS에 비해 가볍고, 빠르고, 다루기 쉬움
- 데이터의 그룹화나 정렬 기능은 부족
- 값에 대한 쿼리 불가능
- Memcached, Riak, Redis, Amazon Dynamo DB, LevelDB 등
- 문서형(Document)
- 계층 형태의 문서를 저장하는 데이터베이스
- 관계형과 달리 하나의 객체를 여러 개의 테이블에 나누어서 저장하지 않고 하나로 저장 가능
- 문서에 대해 쿼리 가능
- 2차원 초과 데이터 입력 시
- 관계형은 정규화가 필요
- 문서형은 인덱스의 하위 구조로 입력 가능
- 문서 구조 표현 여부
- 키-값형은 표현 불가능
- 문서형은 표현 가능
- 구조 강제 여부
- 객체형은 강제(타입에 맞게 데이터를 삽입해야 함)
- 문서형은 다른 구조 입력 가능
- MongoDB, CouchDB, MarkLogic 등
- 컬럼 패밀리형(Column Family)
- 컬럼들의 묶음을 지원하는 데이터베이스
- HBase, Cassandra, Hypertable 등
- 키-값형(Key-value)
- 그래프(Graph)
- 실제 세계의 데이터를 관계와 함께 표현하기 위해 디자인된 데이터베이스
- 집합-지향(Aggregate-oriented) 모델
RDBMS와 NoSQL
- 어느 한쪽을 대체하기 위한 것이 아닌 상호 보완할 수 있는 데이터베이스이므로 목적에 맞게 사용하는 것이 중요
- 수정할 일이 거의 없는 경우에는 ACID 지원이 필요하지 않으므로 꼭 RDBMS를 사용할 필요가 없음
- 데이터의 일관성이 보장되어야 하거나 여러번의 수정 혹은 조인 연산이 필요한 데이터라면 RDBMS