DBMS

덤프버전 :




DataBase Management System

1. 개요
2. 기능
3. 종류
3.1. 엔진 종류
4. 관리 도구
5. 한계


1. 개요[편집]


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

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


2. 기능[편집]


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

다만 NoSQL의 경우 제한적으로 중복 제어나 무결성이 무시되기도 한다.

3. 종류[편집]


  • dBASE: 초창기의 DBMS. 애시턴-테이트(Ashton-Tate)사에서 개발.
  • 오라클 데이터베이스: DBMS 시장의 지배자 오라클이 만든 DBMS이다. 가장 앞선 기술과 안정성을 가지고 있다는 사실에 이의를 달 사람은 없을 것이다. 그리고 그거 팔아서 벌어들인 돈으로 썬 마이크로시스템즈를 인수해 망쳐버렸다.
  • MySQL: 한때 오라클 데이터베이스의 대항마로 군림한데다 오픈 소스로 공개되어 무료 버전이 많이 쓰이고 있고, 유료 버전도 비용이 그리 비싸지 않아서 각종 기업에서도 많이 애용되는 DBMS이다.[1] 특히 PHP를 쓴다면 필수요소.
  • MariaDB : MySQL이 오라클에 인수된 이후, MySQL의 기술진이 오라클을 나와서 만든 것. MySQL 5.5 버전의 소스 코드를 기반으로 개발하고 있어서 호환이 된다.
  • SAP ASE: (구)Sybase SQL Server→Sybase ASE(Adaptive Server Enterprise). Microsoft SQL Server의 전신격인 RDBMS. 따라서 같은 T-SQL을 사용하는 등 어느 정도 유사한 부분이 있으나, 1994년 전후로 협업을 종료하고 서로 별개의 제품이 되었기에 다른 부분도 많다. 2010년에 SAP에 인수되었고, 2014년부터 이름에서 Sybase를 제거했다.
  • SAP IQ: (구)Sybase IQ(Intelligent Query). 데이터 웨어하우스 등을 위한 열 기반 RDBMS. 2010년에 SAP에 인수되었고, 2014년부터 이름에서 Sybase를 제거했다.
  • SAP HANA: 빠른 속도를 기반으로 OLTP와 OLAP를 함께 제공하는 열 기반 인 메모리 데이터베이스.
  • Microsoft Access: MS 오피스에 포함된 개별 응용 프로그램 형태의 DBMS. 서버가 아닌 개인용 PC에서 작동하고 DB를 개인용 컴퓨터에 저장하는 방식을 고수한다. 개인용 컴퓨터(PC)에서 사용할 목적으로 데이터베이스를 관리한다면 액세스를 좀 배워놓는 것만으로 충분하다. SQL 언어를 지원하긴 하지만 GUI 환경으로 모든 SQL 설정을 클릭 몇 번으로 대체할 수 있는 건 엄청난 장점. VBA를 통해 프로그래밍을 하여 응용할 수 있다. 엑셀로 만드는 게임처럼 액세스로 게임까지 만들기도 한다. 애석하게도 한국에서는 엑셀로 DB 관리하는 회사가 많아서 액세스를 표준으로 지정한 업계에서만 액세스를 사용하는 척박한 환경이다. 미국, 프랑스, 스페인, 이탈리아에서는 액세스를 많이 활용한다. 영국/독일은 액세스를 쓰기보다는 자기네들 프로그램이 따로 있어서 그걸 쓴다.
  • Microsoft SQL Server: 마이크로소프트에서 만든 Access의 상위호환격 DBMS. 이 때문에 윈도우 서버와 궁합이 잘 맞는다. 주로 ASP, ASP.NET과 연동해서 사용한다. 전통적으로 윈도우 기반인 경우가 많은 게임 업계에서도 많이 쓰인다. 원래는 UNIX용이었던 Sybase의 SQL Server를 OS/2Windows NT용으로 포팅한 것으로 시작했다. 그래서 Sybase ASE와 어느 정도 유사한 면이 있다. 그러나 Microsoft SQL Server 6.0부터 MS가 모든 라이센스를 사들이고 독자 개발로 전환했기 때문에 현재의 Sybase ASE와는 다소 차이가 있다. 최근에는 Linux용도 출시되었다.
  • 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엔진으로 사용한다. 다만, 현재로써는 직접 SQL을 날리기보다는 Room(안드로이드)이나 CoreData(iOS)와 같은 프레임워크를 사용하는 중.
  • XDM/RD: 히타치에서 제작한 상용 DBMS.
  • AIM: 후지쯔에서 제작한 DBMS.
  • Firebird: 오픈 소스 DBMS. 볼랜드의 Interbase를 오픈 소스화해서 만든 것이다.
  • MACHBASE: 산업 IoT 시장에 특화된 목적으로 출시된 국산 상용 시계열(Time series) DBMS.[3] 수만가지 센서가 뿜어내는 데이터를 저장해야 하는 스마트 팩토리나 빅 데이터 로그 수집에 특화되어 고속 입력/조회를 지원한다.
  • 블룸버그 터미널: 블룸버그에서 판매하는 금융 터미널 프로그램 자체에 DBMS가 내장되어 있다. 물론 일반용으로 쓸건 아니고 주식시장, 채권시장, 외환시장, 원자재시장 등 금융시장 데이터를 처리하기 위해 자체적으로 보유하는 것이다. 다른 용도로는 사용할 수 없다. 해당 데이터는 블룸버그마이크로소프트 간에 협약이 있어서 엑셀이나 액세스로만 변환해서 저장할 수 있다. 그래서 액세스나 엑셀로 블룸버그 터미널 데이터를 실시간 가져와서 응용할 수도 있다.
  • MongoDB
  • Microsoft Excel: 원래는 스프레드시트지만 레코드가 작다면 DBMS로도 훌륭하게 사용할 수 있다. 엑셀에서는 SQL 언어 대신 엑셀 함수로 DB를 관리할 수 있는데, 지원하지 않는 기능도 많아서 VBA를 통한 매크로 작성이 필수. 보통 사용자 함수를 정의해서 사용한다. 다만 어디까지나 레코드가 많지 않은 경우에만 DBMS 대용으로 사용가능한 것이지, 정식 DBMS와는 많은 차이가 있다. 결정적인 차이는 소화 가능한 레코드의 양. 엑셀의 레코드 한계치는 DBMS와 비교하면 매우 작기 때문에 자칫 잘못하면 데이터가 누락되어버릴 수 있다. 실제로 영국에서 코로나19 확진자 숫자를 관리하는데 정식 DBMS를 안쓰고 엑셀을 써버리는 바람에 데이터를 날려먹은 사례가 발생하기도 했다. 애초에 이 한계치에 도달하지 않아도 엑셀은 레코드가 3만 개를 넘는 순간 연산량 초과로 인해 프로그램이 죽는 경우가 많다.


3.1. 엔진 종류[편집]


위에서 말한 '관계 표현'을 위한 구체적인 방식을 엔진이라고 칭한다. DBMS 종류, 용도, 사양에 따라 구성이 다르다.
  • MyISAM: 예전에 MySQL에서 많이 쓰였던 엔진으로, 쓰기 쉽고 가볍지만 트랜젝션 불가, 내용이 변경/삭제될 경우 찌꺼기(Overhead)를 남김, 과부하가 걸리면 테이블이 와장창 깨짐[4] 등의 문제 때문에 MySQL 최신버전에서는 거의 쓰지 않는다.
    • Aria: MariaDB에서 MyISAM의 단점을 보완한 엔진. 찌꺼기 문제가 없고 제한적으로나마 트랜젝션 구현이 가능하다.
  • InnoDB: 대부분의 DBMS에서 사실상 표준으로 쓰이는 엔진. 다만 조금 무거운 편.
  • MEMORY: RAM에 DB 데이터를 바로 올려서 쓰는 엔진. 가장 빠른 속도를 자랑하지만 서버가 꺼지면 데이터가 증발되는 문제가 있으며, MyISAM를 따위로 만들 정도로 찌꺼기를 엄청나게 많이 만들어내는 단점이 있다.
  • ARCHIVE: 로그 기록 전용 엔진. 높은 압축률로 데이터 대비 용량은 가장 작다. 단 쓰는 것은 마음대로지만 수정/삭제하는 것은 아니다.
  • CSV: 이름 그대로 CSV 형식으로 저장한다.
  • connect: pivot을 하려고 사용한다.


4. 관리 도구[편집]


DBMS를 전문적으로 관리하는 프로그램이다.
  • DataGrip: IntelliJ IDEA로 유명한 JetBrains의 프로그램이다.
  • DBeaver
  • Tableplus
  • HeidiSQL
  • phpMyAdmin: 웹(PHP) 기반의 관리 프로그램.
  • Adminer: 이 쪽도 phpMyAdmin처럼 PHP 웹 기반 관리 프로그램인데, PHP 파일 단 한 장만으로 모든 것이 구현되어 있어 설치 및 유지관리가 편하다.
  • SQL Server Management Studio: MS SQL Server용 관리 프로그램.


5. 한계[편집]


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

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

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

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

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


파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-10-23 08:32:30에 나무위키 DBMS 문서에서 가져왔습니다.

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