1. 데이터베이스란?
DataBase 혹은 DB라고 부르며, 여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합을 말합니다.
특정 다수의 이용자들에게 필요한 정보를 제공한다든지, 조직 내에서 필요로 하는 정보를 체계적으로 축적하여 그 조직 내의 이용자에게 필요한 정보를 제공하는 정보 서비스 기관의 심장부에 해당됩니다.
일반적으로 응용 프로그램과는 별개의 미들웨어를 통해서 관리되는데 이는 데이터베이스 자체만으로는 거의 아무것도 못하기 때문에 그걸 관리하는 시스템과 통합돼 제공되며 따라서 정확한 명칭은 데이터베이스 관리 시스템(DBMS)이라고 합니다.
데이터베이스 자체는 데이터를 저장할 수 있는 창고 그 자체의 역할만 수행하고, 데이터를 저장하거나 저장된 데이터를 처리할 수 있는 능력은 없습니다. 이 때문에 DBMS라는 관리자들을 통하여 데이터를 저장하거나 이동시키는 등 여러 가지 업무를 수행하도록 하는 것입니다.
관계형 데이터베이스(RDBMS)가 가장 널리 쓰이고 있습니다. 그리고 이 관계형 데이터베이스를 이용하기 위한 표준 언어가 만들어져 있는데 그것이 구조화 질의 언어(Structured Query Language)의 약자인 SQL입니다.
컴퓨터로 하는 일에서 대부분을 차지하는 작업은 바로 정렬과 탐색인데 이 두 작업을 가장 전문적으로 처리하는 건 데이터베이스입니다.
기업들에서는 비형식적 데이터도 관리하기 위해 데이터 웨어하우스(DW)를 구축하는 경우가 많아졌습니다.
2. 데이터베이스의 특징
- 자기기술성
- 파일 시스템과 구별되는 특징이 있습니다. DBMS가 데이터의 삽입 및 삭제를 데이터/구조적 종속 없이 가능케 해줍니다. - 프로그램과 데이터의 격리
- 단일한 응용 프로그램 내에서 데이터를 개별적으로 관리하는 방식은 데이터 저장 구조 등이 변경되면 응용 프로그램도 수정되어야 합니다. 하지만 데이터베이스는 자기 기술성을 가지므로 저장 구조 등을 수정하는 것이 응용 프로그램에 영향을 미치지 않습니다. - 추상화
- 복잡한 데이터베이스의 구조에 대한 정보를 감추고, 각 사용자에게 뷰를 제공합니다. - 동시성 제어
- 특정 적용 업무나 응용 시스템이 아닌 동시에 복수의 적용 업무나 응용 시스템에 대한 데이터의 공급 기지로서 공유할 필요가 있는 데이터를 보관, 관리합니다. 즉, 다수의 사용자에게 동시 접근을 허용합니다. - 개념적인 구조에 따라서 편성된 데이터의 집합
- 데이터의 특성, 실체 상호 간의 의미 관계와 형식 관계를 기술한 개념적인 구조에 따라서 편성된 데이터의 집합입니다. - 동일한 내용의 데이터가 중복되어 있지 않아야 하고, 다양한 접근 방식이 마련되어 있어야 하며, 검색이나 갱신이 효율적으로 이루어질 수 있도록 해야 합니다.
- RAM, ROM 같은 주기억장치가 아닌 컴퓨터에서 사용할 수 있는 보조기억장치에 저장됩니다.
3. 데이터베이스의 분류
- 관계형(Relational)
데이터베이스계의 주류입니다. 데이터를 로우(Row: 행, 줄)와 컬럼(Column: 열, 칸)이라는 일종의 표 형태로 저장합니다. 데이터의 종속성은 관계(Relation)로 표현합니다.
한 테이블에 있는 모든 로우는 같은 길이의 컬럼을 가지고 있으며 이 컬럼의 구조와 데이터의 관계가 테이블 스키마(Schema)로 사전 정의됩니다.
역사가 오래된 만큼 가장 신뢰성이 높고 데이터의 분류, 정렬, 탐색 속도가 빠릅니다. SQL은 고도로 정교한 검색 쿼리를 제공하며 거의 모든 방식으로 데이터를 다룰 수 있게 해 줍니다. 또한 트랜젝션(Transaction) 지원이 매우 강력하여 신경만 제대로 써주면 데이터가 안 들어가는 경우는 있어도 잘못 들어가는 경우는 없습니다. 예를 들어 금융거래시 구매자 통장에서 돈이 빠져나가고 뒤이어 판매자 통장에 돈이 들어와야 거래가 정상적으로 끝나게 되는데 만약 판매자 통장을 관리하던 컴퓨터가 맛이 갔다고 한다면 RDBMS는 트랜젝션 롤백을 통해 구매자 통장의 잔금을 원상복구 시키면서 거래를 취소하게 됩니다. 이 외의 비정상적인 상황을 고려해서 그 어떤 상황에서도 데이터 무결성을 '보장'하는 게 RDBMS의 특징입니다. 다른 타입의 DBMS는 이정도의 데이터 무결성을 보장하지 못합니다.
그러나 DBMS가 부하분산이 잘 안되고, 스키마를 수정하기가 어렵고, 데이터가 2차원 표형태로만 출력되기 때문에 트리 구조로 조직화되는 '객체'들과 궁합이 잘 안 맞는 문제가 있습니다. - 키-값형(KV store)
모든 데이터를 키(Key)와 값(Value)의 쌍으로 매핑합니다. Key를 어떻게 인덱싱 했느냐에 따라 다르지만 보통 특정 값 하나를 찾아내는 데에는 가장 뛰어난 성능을 보이는 데이터베이스입니다. 하지만 데이터를 그룹화하고 정렬하는 기능은 거의 없다시피 합니다. 대신 RDBMS에 비해 가볍고, 빠르고, 다루기 쉽습니다.
웹 캐시나 세션 데이터, 쇼핑몰의 장바구니 데이터 등을 담는 데에 최적인 DB여서 이쪽으로 활용을 많이 합니다. 그 외에 KV store는 데이터베이스의 크기가 상대적으로 작아 메모리에 통째로 올려놓고 구동하는 것도 쉽기 때문에 인-메모리 데이터베이스로 많이 사용되고 있습니다. 인-메모리 데이터베이스는 그 특성상 매우 고속으로 동작하는 대신 데이터의 안정성을 전혀 보장하지 않는데 장바구니 같은 건 날아가도 상관없는 데이터이면서 반응이 즉시 와야 하는 성격이라 주로 선택되고 있습니다. KV store로 세션을 처리하는 웹 서버도 하드디스크에 부담을 상당히 덜어주면서 반응이 아주 빠릅니다. 즉, 일종의 '임시 데이터' 저장소로서의 입지를 굳게 다지고 있습니다. - 객체형(Object)
프로그래밍 언어에서 객체지향의 개념이 포함되었듯이, 관계형 데이터베이스 이후, 데이터베이스에서도 객체지향을 구현한 것이 바로 객체형 데이터베이스입니다. 이러한 DBMS를 ODBMS라고 합니다.
다만, 데이터베이스 분야에서는 ODBMS가 주류가 되지는 못했는데, 이유는 쿼리 사용이 복잡해지기 때문입니다. 때문에 아직까지도 RDBMS 방식이 널리 사용되고 있습니다. - 문서형(Document)
MongoDB의 방식이며, 위의 객체형과 비슷합니다. 문서의 구조를 나타내는 스키마가 필수가 아닌 것이 특징입니다.
스키마가 없기 때문에 인덱스 필드를 제외하고 필드를 마음대로 넣거나 뺄 수 있다는 특징을 가집니다. 기존 데이터에 해당 필드가 있든 없든 상관없이 그런 데이터를 상대로도 조회, 그룹핑 등의 작업이 가능합니다.
객체 지향 프로그래밍이 주류인 현재, 데이터를 따로 매핑할 필요 없이 그냥 집어넣으면 알아서 잘 저장되는 객체형, 문서형 데이터베이스가 주목받고 있습니다.
그러나 저장한 상태 그대로의 문서를 뽑아내는 게 아니라 뭔가 데이터를 가공하려고 하면 잘 되지 않는 단점이있습니다. 또한 데이터를 지속적으로 '쌓아 올리는' 응용(예를 들어 금융거래 기록 저장)에서는 성능이 상당히 떨어집니다. 이런 건 RDBMS가 가장 잘하는 분야입니다.
데이터의 스키마가 자주 바뀌고 데이터가 다계층의 객체 형태이면서 대부분의 업무가 갱신, 삽입(문서단위), 조회에 집중돼있고 통계 연산에 쓰일 일이 많지 않은 곳에서 사용하기 좋습니다. 통계 연산이 가끔 필요한 곳에서는 필요한 데이터를 추출해 RDBMS에 옮기고 SQL로 처리하고 있습니다. 아니면 DBMS에서 자체 제공하는 map/reduce 연산을 사용합니다.
한마디로 바인더 서류철과 비슷한 성격을 가졌습니다. 바인더철에 추가로 종이를 꽂거나(삽입), 꽂힌 종이를 다른 걸로 갈아 넣거나(갱신), 종이를 찾거나(조회) 하는 일에는 뛰어나지만 한 종이 안에 적힌 데이터가 계속 늘어나거나(추가), 여러 종이에 걸쳐 있는 어떤 값을 다 더하거나(통계) 하는 일에는 취약하다는 단점이 있습니다. - 컬럼 패밀리형(Column Family)
컬럼 패밀리는 컬럼들의 집합입니다. 해쉬 테이블을 생각하면 되는데, 하나의 테이블에 식별하기 위한 Key와 여러 개의 컬럼이 달려 있는 형태의 컬럼 패밀리입니다.
관계형은 하나의 테이블에 식별이 가능한 기본키와 어러개의 컬럼을 가질 수 있지만 기본키는 필수가 아니고 같은 종류의 컬럼을 가져야 합니다.
컬럼 패밀리형은 관계형 데이터베이스에 비해 데이터를 검색, 분석을 빠르게 할 수 있도록 다양한 서버와 네트워크 시스템을 이해하고 구축해야 합니다.
4. 대표적인 데이터베이스
- 오라클 데이터베이스
- 오라클 데이터베이스(Oracle Database 또는 Oracle RDBMS)는 미국 오라클(Oracle)사에서 판매하는 관계형 데이터베이스 관리 시스템입니다. 은행 등 대다수의 대기업체에서 많이 사용되고 있습니다. - MSSQL(Microsoft SQL Server)
- 마이크로소프트에서 만든 DBMS입니다. 이 때문에 윈도우 서버와 궁합이 잘 맞습니다. 주로 ASP, ASP.NET과 연동해서 사용합니다. 전통적으로 윈도우 기반인 경우가 많은 게임 업계에서도 많이 쓰입니다. - MySQL
- 한때 오라클 데이터베이스의 대항마로 군림한 데다 오픈 소스로 공개되어 무료 버전이 많이 쓰이고 있고, 유료 버전도 비용이 그리 비싸지 않아서 각종 기업에서도 많이 애용되는 DBMS입니다. 특히 PHP를 쓴다면 필수요소입니다. - MariaDB
- MySQL이 오라클에 인수된 이후, MySQL의 기술진이 오라클을 나와서 만든 것입니다. MySQL 5.5 버전의 소스 코드를 기반으로 개발하고 있어서 호환이 됩니다. - SQLite
- SQL를 사용하여 DB를 파일로 저장하는 DBMS입니다. 주로 소프트웨어에 내장하기 위하여 설계되었습니다. SQL 문법을 지원하기 때문에 사용이 편리하며, 파일 입출력을 구현하는 시간도 크게 단축하여 데이터 관리를 효율적으로 할 수 있습니다. 안드로이드나 iOS에서 DB엔진으로 사용하고 있습니다. - MongoDB
- NoSQL DBMS의 한 종류입니다. MongoDB는 NoSQL로 분류되는 크로스 플랫폼 도큐먼트 지향 데이터베이스 시스템입니다. MySQL처럼 전통적인 테이블-관계 기반의 RDBMS가 아니며 SQL을 사용하지 않습니다. 이름의 mongo는 humongous를 줄인 표현입니다. 즉 '엄청 큰 DB'라는 뜻입니다.
반응형
'DB & SQL' 카테고리의 다른 글
자동값 증가(Oracle, MSSQL, MySQL) (4) | 2021.11.16 |
---|---|
문자열 병합 CONCAT 함수 사용하기 (0) | 2021.10.14 |
[MySQL] SYSDATE()와 NOW() 의 차이 (2) | 2021.10.14 |
[MySQL] CAST와 CONVERT (0) | 2021.10.14 |
SQL 이란? (0) | 2021.10.13 |
댓글