분류
1. 개요
데이터베이스라는 데이터의 집합을 만들고, 저장 및 관리할 수 있는 기능들을 제공하는 응용 프로그램이다. 즉, 데이터의 관리에 특화된 프로그램이라고 생각하면 편하다. 종류에 따라 DataBase Server까지 지원하기도 한다.
주로 서버에 사용하는 용도만 DBMS라고 생각하는 오개념이 많다. 그러나 Microsoft Access라는 개인용 컴퓨터에 저장하는 용도의 프로그램도 훌륭한 DBMS이다. 블룸버그 터미널같은 경우는 자체적으로 DBMS를 내장하고 있다.
주로 서버에 사용하는 용도만 DBMS라고 생각하는 오개념이 많다. 그러나 Microsoft Access라는 개인용 컴퓨터에 저장하는 용도의 프로그램도 훌륭한 DBMS이다. 블룸버그 터미널같은 경우는 자체적으로 DBMS를 내장하고 있다.
2. 기능
- 중복 제어: 동일한 데이터가 여러 위치에 중복 저장되는 현상을 방지한다. 데이터가 중복되면, 저장 공간이 낭비되고 데이터의 일관성이 깨질 수 있다.
- 접근 통제: DBMS는 사용자마다 다양한 권한을 부여할 수 있으며, 권한에 따라 데이터에 대한 접근을 제어할 수 있다.
- 관계 표현: 서로 다른 데이터간의 다양한 관계를 표현할 수 있는 기능을 제공한다.
- 샤딩/파티셔닝: 구조 최적화를 위해 작은 단위로 쪼개는 기능을 제공한다.
- 무결성 제약 조건: 무결성에 관한 제약 조건을 정의/검사하는 기능을 제공한다. 데이터베이스는 반드시 무결성 제약조건을 통과한 데이터만을 저장하고 있어야 한다.
3. 종류
- dBASE: 초창기의 DBMS. 애시턴-테이트(Ashton-Tate)사에서 개발.
- 오라클 데이터베이스: DBMS 시장의 지배자 오라클이 만든 DBMS이다. 가장 앞선 기술과 안정성을 가지고 있다는 사실에 이의를 달 사람은 없을 것이다.
그리고 그거 팔아서 벌어들인 돈으로 썬 마이크로시스템즈를 인수해 망쳐버렸다. - MariaDB : MySQL이 오라클에 인수된 이후, MySQL의 기술진이 오라클을 나와서 만든 것. MySQL 5.5 버전의 소스 코드를 기반으로 개발하고 있어서 호환이 된다.
- Microsoft Access: MS 오피스에 포함된 개별 응용 프로그램 형태의 DBMS. 서버가 아닌 개인용 PC에서 작동하고 DB를 개인용 컴퓨터에 저장하는 방식을 고수한다. 나무위키에는 놀랍게도 이 항목만 2019년 5월 1일까지 작성되지 않았다. 개인용 컴퓨터(PC)에서 사용할 목적으로 데이터베이스를 관리한다면 액세스를 좀 배워놓는 것만으로 충분하다. SQL 언어를 지원하긴 하지만 GUI 환경으로 모든 SQL 설정을 클릭 몇 번으로 대체할 수 있는 건 엄청난 장점. VBA를 통해 프로그래밍을 하여 응용할 수 있다. 엑셀로 만드는 게임처럼 액세스로 게임까지 만들기도 한다. 애석하게도 한국에서는 엑셀로 DB 관리하는 회사가 많아서 액세스를 표준으로 지정한 업계에서만 액세스를 사용하는 척박한 환경이다. 미국, 프랑스, 스페인, 이탈리아에서는 액세스를 많이 활용한다. 영국/독일은 액세스를 쓰기보다는 자기네들 프로그램이 따로 있어서 그걸 쓴다.
- PostgreSQL: 오픈 소스 DBMS. 2016년 현재 MySQL과 함께 오픈 소스 관계형 DBMS 시장의 쌍두마차. MySQL에 비해서 더 엄격한 타입체크 및 트랜잭션 등 풍부한 기능들을 가지고 있다. 자세한 것은 문서 참조.
- INFORMIX: IBM에서 만드는 상용 DB이다. 원래 인포믹스라는 별도의 회사였으나 UNIX용 RDB가 약한 IBM이 인수했다. 주로 그룹웨어 같은 엔터프라이즈 시장에서 쓰이고 있다.
- ALTIBASE HDB: 인-메모리 DBMS인 ALTIBASE를 시작으로, 최근 v6인 Zeta를 발표한 알티베이스 사의 메인 제품. 본래는 기존의 DBMS보다 빠르다는 장점으로 메인메모리 DBMS를 주력으로 밀었으나 v4부터는 용량한계를 극복하기 위해 디스크를 함께 활용한 하이브리드 형태의 DBMS를 출시하고 제품명도 ALTIBASE HDB로 변경했다,
- XDM/RD: 히타치에서 제작한 상용 DBMS.
- Firebird: 오픈 소스 DBMS. 볼랜드의 Interbase를 오픈 소스화해서 만든 것이다.
- Microsoft Excel: 원래는 스프레드시트지만 레코드가 작다면 DBMS로도 훌륭하게 사용할 수 있다. 엑셀에서는 SQL 언어 대신 엑셀 함수로 DB를 관리할 수 있는데, 지원하지 않는 기능도 많아서 VBA를 통한 매크로 작성이 필수. 보통 사용자 함수를 정의해서 사용한다.
다만 어디까지나 레코드가 많지 않은 경우에만 DBMS 대용으로 사용가능한 것이지, 정식 DBMS와는 많은 차이가 있다. 결정적인 차이는 소화 가능한 레코드의 양. 엑셀의 레코드 한계치는 DBMS와 비교하면 매우 작기 때문에 자칫 잘못하면 데이터가 누락되어버릴 수 있다. 실제로 영국에서 코로나19 확진자 숫자를 관리하는데 정식 DBMS를 안쓰고 엑셀을 써버리는 바람에 데이터를 날려먹은 사례가 발생하기도 했다. 애초에 이 한계치에 도달하지 않아도 엑셀은 레코드가 3만 개를 넘는 순간 연산량 초과로 인해 프로그램이 죽는 경우가 많다.
4. 한계
DBMS는 모든 종류의 데이터를 관리하는 최선의 방법이 아니다.
복잡한 DBMS일수록 트랜잭션, ACID 등의 많은 컨셉을 지원하기 위한 오버헤드가 발생한다. 때문에 휴대폰 등의 임베디드 기기 같은 단순한 데이터베이스(예를 들어 전화번호부 등)의 경우는 다중사용자나 회복 기능 등을 뺀 가벼운 DBMS를 만들어 사용하기도 한다.
대다수의 DBMS는 비교적 크기가 작은 레코드를 수백만개씩 저장하는 것에 특화되어있다. 반대로 하나의 레코드가 몇십MB에서 GB급인 경우 데이터를 DB에 저장하면 쿼리 시 오버헤드가 클 수 있다. 이 경우 원래 파일은 파일 시스템에 직접 저장하거나 파일시스템 스타일의 클라우드(Amazon S3 등)를 이용하고 그 경로만 DB에 저장하는게 바람직하다.
실시간 데이터 처리가 필요한 경우(예를 들어 군용, 항공/우주용 등)에도 일반적으로 복잡한 기능을 제공하는 DBMS가 적합하지 않다. 다만 통신망, 금융권 등에서의 실시간 데이터 처리 개념[7]에서는 오라클의 타임스텐이나 알티베이스의 ALTIBASE HDB와 같은 인 메모리 데이터베이스[8]를 실시간 데이터 처리가 요구되는 구간에 사용하고, 이력 데이터와 같은 안정성이 중요시되는 데이터는 back-end 구간에 전통적인 디스크 기반 DBMS를 사용하는 방식으로 시스템을 구성하기도 한다.[9]
검색 엔진 등 극단적으로 데이터가 크며, READ/WRITE 간의 격차가 큰 경우에도 일반적인 DBMS를 사용하지 않는다. 이러한 경우는 MM DBMS와 NoSQL 기술을 혼용하여 서비스를 구축한다. NoSQL 기술이 응용된 사례가 페이스북의 쪽지 기능이다.
복잡한 DBMS일수록 트랜잭션, ACID 등의 많은 컨셉을 지원하기 위한 오버헤드가 발생한다. 때문에 휴대폰 등의 임베디드 기기 같은 단순한 데이터베이스(예를 들어 전화번호부 등)의 경우는 다중사용자나 회복 기능 등을 뺀 가벼운 DBMS를 만들어 사용하기도 한다.
대다수의 DBMS는 비교적 크기가 작은 레코드를 수백만개씩 저장하는 것에 특화되어있다. 반대로 하나의 레코드가 몇십MB에서 GB급인 경우 데이터를 DB에 저장하면 쿼리 시 오버헤드가 클 수 있다. 이 경우 원래 파일은 파일 시스템에 직접 저장하거나 파일시스템 스타일의 클라우드(Amazon S3 등)를 이용하고 그 경로만 DB에 저장하는게 바람직하다.
실시간 데이터 처리가 필요한 경우(예를 들어 군용, 항공/우주용 등)에도 일반적으로 복잡한 기능을 제공하는 DBMS가 적합하지 않다. 다만 통신망, 금융권 등에서의 실시간 데이터 처리 개념[7]에서는 오라클의 타임스텐이나 알티베이스의 ALTIBASE HDB와 같은 인 메모리 데이터베이스[8]를 실시간 데이터 처리가 요구되는 구간에 사용하고, 이력 데이터와 같은 안정성이 중요시되는 데이터는 back-end 구간에 전통적인 디스크 기반 DBMS를 사용하는 방식으로 시스템을 구성하기도 한다.[9]
검색 엔진 등 극단적으로 데이터가 크며, READ/WRITE 간의 격차가 큰 경우에도 일반적인 DBMS를 사용하지 않는다. 이러한 경우는 MM DBMS와 NoSQL 기술을 혼용하여 서비스를 구축한다. NoSQL 기술이 응용된 사례가 페이스북의 쪽지 기능이다.
[1] Sparc 서버군과 Java를 가졌지만 DBMS가 없던 썬 마이크로시스템즈가 인수했으나, 이후 썬 자체가 오라클에 인수되었다.[2] 애당초 IBM 메인프레임 시장을 겨냥해서 IBM이 직접 개발한 것이다.[3] 온도 변화, 전력 사용량 변화 등 시간대별로 변화하는 데이터를 저장하고 추출하기 위한 DBMS이다. 해외에서는 Amazon Timestream, InfluxDB 등이 유명하다.[4] Sparc 서버군과 Java를 가졌지만 DBMS가 없던 썬 마이크로시스템즈가 인수했으나, 이후 썬 자체가 오라클에 인수되었다.[5] 애당초 IBM 메인프레임 시장을 겨냥해서 IBM이 직접 개발한 것이다.[6] 온도 변화, 전력 사용량 변화 등 시간대별로 변화하는 데이터를 저장하고 추출하기 위한 DBMS이다. 해외에서는 Amazon Timestream, InfluxDB 등이 유명하다.[7] 예를 들자면 SMS 전송 시스템 또는 금융권에서 계좌 이체와 같은 실시간으로 처리되어야 하는 업무단위.[8] 메모리에 데이터베이스의 모든 자료를 올려놓고 insert, update, select와 같은 연산을 처리한다. 당연히 엄청나게 빠르다! 다만, 갑작스런 시스템의 종료, 예를 들자면 전원이 갑자기 나가버리는 상황에서 최대한 데이터의 유실을 막을 수 있어야 한다. IMDB의 선택 기준은 이와 같은 유사시 안정성이다. 물론 디스크 기반 DBMS도 마찬가지이지만 메모리에 자료를 몽땅 올려놓고 사용하는 것 자체가 디스크를 기반으로 작동하는 것보다 안정성이 훨씬 더 떨어질 수 밖에 없다.[9] 예를 들자면 SMS 전송 자체는 매우 빠르게 이루어져야 하므로 Main Memory를 사용하는 DBMS가 전송관련 자료처리를 담당하고 전송이 완료(길어봐야 24시간이다.)된 후 속도가 크게 중요하지 않은 이력을 남기는 작업은 디스크 기반 DBMS가 설치된 구간에서 이루어 지도록 Data Flow를 설계한다.