최근 수정 시각 : 2020-03-17 14:32:51

DBMS

파일:dbengines.png
DBMS 인기도 추이(2019년 3월 기준)

DataBase Management System.

1. 개요2. 기능3. 종류4. 한계

1. 개요

데이터베이스라는 데이터의 집합을 만들고, 저장 및 관리할 수 있는 기능들을 제공하는 응용 프로그램이다. 즉, 데이터의 관리에 특화된 프로그램이라고 생각하면 편하다. 종류에 따라 DataBase Server까지 지원하기도 한다.

주로 서버에 사용하는 용도만 DBMS라고 생각하는 오개념이 많다. 그러나 Microsoft Access라는 개인용 컴퓨터에 저장하는 용도의 프로그램도 훌륭한 DBMS이다. 블룸버그 터미널같은 경우는 자체적으로 DBMS를 내장하고 있다.

2. 기능

  • 중복 제어 : 동일한 데이터가 여러 위치에 중복 저장되는 현상을 방지한다. 데이터가 중복되면, 저장 공간이 낭비되고 데이터의 일관성이 깨질 수 있다.
  • 접근 통제 : DBMS는 사용자마다 다양한 권한을 부여할 수 있으며, 권한에 따라 데이터에 대한 접근을 제어할 수 있다.
  • 인터페이스 제공 : DBMS는 사용자에게 SQLCLI, GUI 등 다양한 인터페이스를 제공한다.
  • 관계 표현 : 서로 다른 데이터간의 다양한 관계를 표현할 수 있는 기능을 제공한다.
    • 샤딩/파티셔닝 : 구조 최적화를 위해 작은 단위로 쪼개는 기능을 제공한다.
  • 무결성 제약 조건 : 무결성에 관한 제약 조건을 정의/검사하는 기능을 제공한다. 데이터베이스는 반드시 무결성 제약조건을 통과한 데이터만을 저장하고 있어야 한다.
  • 백업: 백업 항목 참고.

3. 종류

  • dBASE: 초창기의 DBMS. 애시턴-테이트(Ashton-Tate)사에서 개발.
  • 오라클 데이터베이스: DBMS 시장의 지배자 오라클이 만든 DBMS이다. 가장 앞선 기술과 안정성을 가지고 있다는 사실에 이의를 달 사람은 없을 것이다. 그리고 그거 팔아서 벌어들인 돈으로 썬 마이크로시스템즈를 인수해 망쳐버렸다.
  • MySQL: 한때 오라클 데이터베이스의 대항마로 군림한데다 물론 오라클에게 먹힌 이후로는... 그래도 인수 전 못지않게 쌩쌩하게 돌아간다 오픈 소스로 공개되어 무료 버전이 많이 쓰이고 있고, 유료 버전도 비용이 그리 비싸지 않아서 각종 기업에서도 많이 애용되는 DBMS이다.[1] 특히 PHP를 쓴다면 필수요소.
  • MariaDB : MySQL이 오라클에 인수된 이후, MySQL의 기술진이 오라클을 나와서 만든 것. MySQL 5.5 버전의 소스 코드를 기반으로 개발하고 있어서 호환이 된다.
  • Microsoft Access: MS 오피스에 포함된 개별 응용 프로그램 형태의 DBMS. 서버가 아닌 개인용 PC에서 작동하고 DB를 개인용 컴퓨터에 저장하는 방식을 고수한다. 나무위키에는 놀랍게도 이 항목만 2019년 5월 1일까지 작성되지 않았다. 개인용 컴퓨터(PC)에서 사용할 목적으로 데이터베이스를 관리한다면 액세스를 좀 배워놓는 것만으로 충분하다. SQL 언어를 지원하긴 하지만 GUI 환경으로 모든 SQL 설정을 클릭 몇 번으로 대체할 수 있는 건 엄청난 장점. VBA를 통해 프로그래밍을 하여 응용할 수 있다. 엑셀로 만드는 게임처럼 액세스로 게임까지 만들기도 한다. 애석하게도 한국에서는 엑셀로 DB 관리하는 회사가 많아서 액세스를 표준으로 지정한 업계에서만 액세스를 사용하는 척박한 환경이다. 미국, 프랑스, 스페인, 이탈리아에서는 액세스를 많이 활용한다. 영국/독일은 액세스를 쓰기보다는 자기네들 프로그램이 따로 있어서 그걸 쓴다.
  • Microsoft Excel: 원래는 스프레드시트지만 레코드가 작다면 DBMS로도 훌륭하게 사용할 수 있다. 엑셀에서는 SQL 언어 대신 엑셀 함수로 DB를 관리할 수 있는데, 지원하지 않는 기능도 많아서 VBA를 통한 매크로 작성이 필수. 보통 사용자 함수를 정의해서 사용한다. 정 모르겠거나 레코드가 좀 많다 싶으면 액세스를 하는게 더 낫다. 엑셀은 레코드가 3만 개를 넘는 순간 연산량 초과로 인해 프로그램이 죽는 경우가 많다.
  • Microsoft SQL Server: 마이크로소프트에서 만든 DBMS. 이 때문에 윈도우 서버와 궁합이 잘 맞는다. 주로 ASP, ASP.NET과 연동해서 사용한다. 전통적으로 윈도우 기반인 경우가 많은 온라인게임 업계에서도 많이 쓰인다. 최근에는 리눅스용도 출시되었다.
  • PostgreSQL: 오픈 소스 DBMS. 2016년 현재 MySQL과 함께 오픈 소스 관계형 DBMS 시장의 쌍두마차. MySQL에 비해서 더 엄격한 타입체크 및 트랜잭션 등 풍부한 기능들을 가지고 있다. 자세한 것은 문서 참조.
  • DB2: IBM에서 만든 DBMS. 보통 사용하는 기업에 와서야 이런 DB가 있는지 알게 되는 우리나라에서는 듣보잡 수준에 머물러 있는 DBMS로 성능이나 기능에선 오라클에게 밀리고, 가격에선 MS SQL에게 밀리고 있는 안습한 존재이지만, 금융권, 특히 은행권에서는 중요한 DBMS. Unix를 사용하는 금융권은 오라클이나 INFORMIX를 사용하지만, IBM 메인프레임을 사용할 경우에는 보통 DB2를 선택하는 경우가 많다.[2]
  • 티베로: 국산 소프트웨어 회사인 티맥스소프트에서 개발한 국산 DBMS로 오라클 데이터베이스와 매우 유사한 아키텍쳐를 가졌다. 저가 시장에서 나름 바람을 기대했으나 모기업인 티맥스소프트가 힘든 상황이 되면서 같이 안습인 상황. 법인을 티베로로 분리하여 살 길을 모색하는 듯하다.
  • Cubrid: 국산 소프트웨어 회사 CUBRID에서 개발한 DBMS. CUBRID는 원래 NHN(현재는 네이버)의 자회사인 서치솔루션이 지분을 보유하고 있었으나 2010년에 법인독립했다.
  • INFORMIX: IBM에서 만드는 상용 DB이다. 원래 인포믹스라는 별도의 회사였으나 UNIX용 RDB가 약한 IBM이 인수했다. 주로 그룹웨어 같은 엔터프라이즈 시장에서 쓰이고 있다.
  • ALTIBASE HDB: 인-메모리 DBMS인 ALTIBASE를 시작으로, 최근 v6인 Zeta를 발표한 알티베이스 사의 메인 제품. 본래는 기존의 DBMS보다 빠르다는 장점으로 메인메모리 DBMS를 주력으로 밀었으나 v4부터는 용량한계를 극복하기 위해 디스크를 함께 활용한 하이브리드 형태의 DBMS를 출시하고 제품명도 ALTIBASE HDB로 변경했다,
  • SQLite: SQL를 사용하여 DB를 파일로 저장하는 DBMS이다. 주로 소프트웨어에 내장하기 위하여 설계되었다. SQL 문법을 지원하기 때문에 사용이 편리하며, 파일 입출력을 구현하는 시간도 크게 단축하여 데이터 관리를 효율적으로 할 수 있다. 안드로이드iOS에서 DB엔진으로 사용한다.
  • XDM/RD: 히타치에서 제작한 상용 DBMS.
  • AIM: 후지쯔에서 제작한 DBMS.
  • Firebird: 오픈 소스 DBMS. 볼랜드의 Interbase를 오픈 소스화해서 만든 것이다.
  • MACHBASE: 산업 IoT 시장에 특화된 목적으로 출시된 국산 상용 시계열(Time series) DBMS.[3] 수만가지 센서가 뿜어내는 데이터를 저장해야 하는 스마트 팩토리나 빅 데이터 로그 수집에 특화되어 고속 입력/조회를 지원한다.
  • 블룸버그 터미널: 블룸버그에서 판매하는 금융 터미널 프로그램 자체에 DBMS가 내장되어 있다. 물론 일반용으로 쓸건 아니고 주식시장, 채권시장, 외환시장, 원자재시장 등 금융시장 데이터를 처리하기 위해 자체적으로 보유하는 것이다. 다른 용도로는 사용할 수 없다. 해당 데이터는 블룸버그마이크로소프트 간에 협약이 있어서 엑셀이나 액세스로만 변환해서 저장할 수 있다. 그래서 액세스나 엑셀로 블룸버그 터미널 데이터를 실시간 가져와서 응용할 수도 있다.

4. 한계

DBMS는 모든 종류의 데이터를 관리하는 최선의 방법이 아니다.

복잡한 DBMS일수록 트랜잭션, ACID 등의 많은 컨셉을 지원하기 위한 오버헤드가 발생한다. 때문에 휴대폰 등의 임베디드 기기 같은 단순한 데이터베이스(예를 들어 전화번호부 등)의 경우는 다중사용자나 회복 기능 등을 뺀 가벼운 DBMS를 만들어 사용하기도 한다.

대다수의 DBMS는 비교적 크기가 작은 레코드를 수백만개씩 저장하는 것에 특화되어있다. 반대로 하나의 레코드가 몇십MB에서 GB급인 경우 데이터를 DB에 저장하면 쿼리 시 오버헤드가 클 수 있다. 이 경우 원래 파일은 파일 시스템에 직접 저장하거나 파일시스템 스타일의 클라우드(Amazon S3 등)를 이용하고 그 경로만 DB에 저장하는게 바람직하다.

실시간 데이터 처리가 필요한 경우(예를 들어 군용, 항공/우주용 등)에도 일반적으로 복잡한 기능을 제공하는 DBMS가 적합하지 않다. 다만 통신망, 금융권 등에서의 실시간 데이터 처리 개념[4]에서는 오라클의 타임스텐이나 알티베이스의 ALTIBASE HDB와 같은 인 메모리 데이터베이스[5]를 실시간 데이터 처리가 요구되는 구간에 사용하고, 이력 데이터와 같은 안정성이 중요시되는 데이터는 back-end 구간에 전통적인 디스크 기반 DBMS를 사용하는 방식으로 시스템을 구성하기도 한다.[6]

검색 엔진 등 극단적으로 데이터가 크며, READ/WRITE 간의 격차가 큰 경우에도 일반적인 DBMS를 사용하지 않는다. 이러한 경우는 MM DBMS와 NoSQL 기술을 혼용하여 서비스를 구축한다. NoSQL 기술이 응용된 사례가 페이스북의 쪽지 기능이다.

[1] Sparc 서버군과 Java를 가졌지만 DBMS가 없던 썬 마이크로시스템즈가 인수했으나, 이후 썬 자체가 오라클에 인수되었다.[2] 애당초 IBM 메인프레임 시장을 겨냥해서 IBM이 직접 개발한 것이다.[3] 온도 변화, 전력 사용량 변화 등 시간대별로 변화하는 데이터를 저장하고 추출하기 위한 DBMS이다. 해외에서는 Amazon Timestream, InfluxDB 등이 유명하다.[4] 예를 들자면 SMS 전송 시스템 또는 금융권에서 계좌 이체와 같은 실시간으로 처리되어야 하는 업무단위.[5] 메모리에 데이터베이스의 모든 자료를 올려놓고 insert, update, select와 같은 연산을 처리한다. 당연히 엄청나게 빠르다! 다만, 갑작스런 시스템의 종료, 예를 들자면 전원이 갑자기 나가버리는 상황에서 최대한 데이터의 유실을 막을 수 있어야 한다. IMDB의 선택 기준은 이와 같은 유사시 안정성이다. 물론 디스크 기반 DBMS도 마찬가지이지만 메모리에 자료를 몽땅 올려놓고 사용하는 것 자체가 디스크를 기반으로 작동하는 것보다 안정성이 훨씬 더 떨어질 수 밖에 없다.[6] 예를 들자면 SMS 전송 자체는 매우 빠르게 이루어져야 하므로 Main Memory를 사용하는 DBMS가 전송관련 자료처리를 담당하고 전송이 완료(길어봐야 24시간이다.)된 후 속도가 크게 중요하지 않은 이력을 남기는 작업은 디스크 기반 DBMS가 설치된 구간에서 이루어 지도록 Data Flow를 설계한다.