치춘짱베리굿나이스
DBMS 본문
DBMS
설명
Database Management System
데이터베이스 관리 시스템으로, 데이터의 집합을 만들고 저장 및 관리를 도와주는 툴이다
DBMS를 통해 데이터베이스를 효율적으로 관리할 수 있고, 응용 프로그램들이 쿼리문을 통해 데이터베이스에 접근할 수 있게 된다
DBMS의 종류에 따라 ANSI SQL에 추가 문법들이 더해지거나 기능이 더해져 데이터베이스를 조금 더 구체적으로 다룰 수 있기도 한다
관계형 데이터베이스에서 가장 많이 사용되는 DBMS는 오라클에서 만든 Oracle Database이고, MySQL, Microsoft SQL, PostgreSQL 등도 많이 사용된다
특징이 조금씩 다르기 때문에 사용하기 전에 구체적으로 알아보는 것이 좋겠다
장단점
장점
- 데이터를 보기좋게 보여준다
- CLI 환경에서 문자열로 표현하거나, GUI 인터페이스를 제공하기도 한다
- 사용자가 보기 편한 형태로 데이터베이스를 보여준다
- 데이터가 중복되지 않도록 한다
- 데이터가 중복되어 버리면, 저장공간이 낭비된다 (경제성)
- 중복된 데이터간 서로 다른 값을 가질 수도 있고, (같은 학생 데이터가 서로 다른 나이값을 가지는 등… → 일관성) 이 때문에 데이터의 정확도가 낮아지므로 무결성도 자연히 보장되지 않는 셈이다
- 중복된 데이터가 너무 많아지다 보면 관심사가 분산되면서 모든 데이터에 대해 같은 정도의 보안을 유지하기도 어려워진다 (보안성)
- 데이터에 접근할 수 있는 권한을 제어할 수 있다
- 모든 사용자가 모든 데이터를 수정하거나 삭제할 수 있게 된다면 데이터의 보안이 꽝이 되어버린다
- 특정 사용자는 특정 조작만 수행할 수 있도록 제한할 수 있다
- 데이터 종속성을 해결한다
- 종속성은 응용 프로그램과 데이터 간 상호의존 관계를 의미하는데, 데이터가 변경될 때마다 데이터의 접근 방법이나 사용 방법이 같이 변경되면 응용 프로그램이 데이터를 사용하지 못하는 참사가 날 수 있다
- 데이터에 독립성을 제공함으로써 데이터 접근 방법이 바뀔 때마다 응용 프로그램이 해메지 않도록 도와주는 것
단점
- 비용이 추가로 더 든다
- 많은 DBMS가 유료 결제 후 사용해야 하기 때문에 그에 따른 추가적인 비용이 들 수밖에 없다
- 시간당 사용량으로 요금을 책정하기 때문에 1달에도 몇백에서 몇천 정도의 지출이 발생할 수 있다
- 또한 메모리 용량을 더 차지하고, 추가적인 CPU 연산을 필요로 하므로 시스템 자원을 많이 소비한다
- 많은 연산량 때문에 실시간 데이터 처리 (군사, 항공, 우주 등) 에는 적합하지 않다
- DBMS 시스템 자체가 보안에 취약할 경우 데이터베이스 전체가 위협받을 수 있다
- 은행 등 보안에 취약한 기업일수록 돈을 조금 더 내더라도 안정적인 DBMS를 찾는 이유이기도 하다
- 백업과 복원이 복잡하다
- DBMS 시스템에 복잡한 데이터베이스까지 엮여 있을 경우 백업이 어려워진다
DBMS 종류
Oracle Database
이름에서 알 수 있듯 오라클이 만들었다
역사도 길고 (1979년에 첫 출시를 했다고 한다) 덕분에 쌓인 역사와 노하우로 점유율 1위를 차지할 수 있었다
아무래도 역사가 길다 보니 그만큼 안정적이고 유지보수가 확실하며, 높은 신뢰도를 요구하는 서비스 (미션크리티컬 환경) 와 대용량의 데이터를 처리해야 하는 경우에 적합하다
예산이 충분하고, 복잡하고 안전한 데이터베이스를 설계해야 하는 서비스 (은행 등) 에서 오라클 DB를 매우 선호한다 (DBMS 서버 이용 비용이 크면 몇천, 몇억대가 깨진다고 한다)
거의 모든 추가 문법 (윈도우 함수, GROUP BY, 계층 쿼리 등) 과 정규식 및 인덱싱 등을 지원한다
다만 기능이 많은 만큼 초보자가 선뜻 손대기 어렵기도 하고, 비용의 부담이 만만치 않으며 높은 CPU 사양을 요구하므로 대체로 대기업에서 선호한다
MySQL
이곳에 코드가 공개되어 있다
오라클 데이터베이스 다음으로 많이 쓰이는 DBMS로, 간단한 게시판이나 커뮤니티 서비스, 블로그 등에서 많이 채용한 덕에 점유율을 높일 수 있었다
스웨덴의 MySQL AB에서 만들었지만 지금은 썬 마이크로시스템즈를 거쳐 오라클에 인수되었고, 이로써 오라클은 점유율 1위, 2위 DBMS를 모두 소유한 기업이 되었다 (ㄷㄷ)
MySQL은 오픈 소스이며, GPL을 따르고, 무료 버전과 유료 버전이 나뉘어져 있어 (지원 기능이 살짝 다르다) 기업의 규모에 따라 선택하면 되지만 간단한 프로젝트 수준에서는 무료 버전으로 충분히 가능하다
오라클에서 인수한 뒤로 시스템의 규모도 커지고 묵직해지면서 오픈 소스에 인색한 오라클이 무슨 짓을 할 지 모른다고 한다.. 다른 DBMS로 갈아탄 케이스도 꽤 있나보다
시스템이 차지하는 용량이 상당히 적고, 그에 비해 속도는 상당히 빠른 것이 강점이다
많은 프로그래밍 언어들과 운영체제들이 라이브러리로 MySQL을 지원하며, 오픈소스라 접근성이 좋기도 하고 확장 또한 용이하다
다만 트랜젝션 지원이 살짝 미흡하고, 쿼리가 복잡할수록 성능 저하가 두드러진다는 단점이 있다
사용자가 많고 오픈소스에 무료 버전이 있는 만큼 얻을 수 있는 정보도 많을 테니 나같은 데이터베이스 뉴비가 입문하기엔 나쁘지 않은 시스템인 듯하다?
Microsoft SQL Server
이름에서도 알 수 있듯이 222
윈도우 기반의 서버 및 MS에서 개발한 언어들과 호환이 매우 잘 된다
윈도우만 지원했지만, 최근에 리눅스용도 출시되었고 맥용은 지원하지 않아 별개의 툴을 설치해야 (ㅋㅋ) 한다
게임 업계에서 많이 사용한다고 한다 (아무래도 게임계가 윈도우 PC 사용이 압도적이긴 하다)
PostgreSQL
https://git.postgresql.org/gitweb/?p=postgresql.git
MySQL과 같은 오픈소스 RDBMS로, 오픈소스 DBMS계의 쌍두마차라 할 정도로 가장 많이 사용된다
MySQL이 오라클 때문에라도 오픈소스와는 거리가 멀어지며 점유율이 주춤하는 중에 PostgreSQL의 점유율은 꾸준히 올라가고 있다고 한다
MySQL과 다르게 쿼리가 복잡할 수록 성능 최적화가 잘 되어 있지만, 반대로 기본적인 쿼리에서는 성능이 떨어지는 듯 하다
오픈소스임에도 기능이 상당히 많고, 표준 SQL (ANSI SQL) 을 최대한 준수하였기 때문에 어지간한 ANSI SQL 문법은 다 사용가능하다고 보면 된다
많은 컨퍼런스와 세미나도 꾸준히 개최되어 개발자들이 선호하는 DBMS중 하나이고, MySQL과 다르게 라이선스 분쟁에 걸릴 확률이 낮아 큰 기업에서도 간간히 사용된다
MariaDB
MySQL이 오라클의 아래로~~ 들어가면서 라이선스 문제를 해결하기 위해 등장한 오픈 소스 DBMS이다
MySQL AB (MySQL을 개발한 바로 그 곳) 팀 출신의 개발자들이 재단을 세워 지속적으로 개발하고 있으며, MySQL의 소스 코드를 기반으로 짜여졌기 때문에 호환이 잘 된다… 아니 명령어와 사용방법 일체가 동일하고, 추가적인 기능이 더 들어간 형태다
마리아라는 이름은 MySQL과 MariaDB를 개발한 핀란드 개발자 몬티 비데니우스의 둘째 딸 이름에서 따왔다고 한다 (MySQL의 My는 첫째딸 이름이라고 한다)
완전한 오픈소스 프로젝트이므로 라이선스만 따른다면 쉽게 설치하여 사용할 수 있다
Sqlite
안드로이드, IOS, macOS에 기본으로 내장된 DBMS로, 이름에서 알 수 있듯 매우 경량화된 DBMS이다
인코딩이나 동시 접속 등을 지원하지 않고, 성능이 썩 좋지도 않지만 데이터베이스를 파일 하나에 저장하고 복잡한 외부 라이브러리를 사용할 필요가 없다
JSON이나 CSV로는 무리가 있지만, 그렇다고 묵직한 데이터베이스까지는 필요 없는 정말 가벼운 사용에 최적화되어 있는 DBMS라고 할 수 있다
NoSQL?
이름에서 뭔가 유추되는 SQL 안돼요~ SQL 싫어요~ 가 아니라, Not Only SQL 이라는 의미라고 한다
기존의 RDBMS가 갖고 있는 특성에 부가적인 특성을 추가한 DBMS로, 특정 상황에서의 최적화나 성능을 위해 RDBMS의 성능, 또는 SQL 문법의 일부를 과감히 제외하기도 한다
관계형 데이터베이스 (RDBMS) 는 하나의 장치 안에서만 저장할 것을 전제로 설계되어 있는데, SNS나 빅데이터 계열 등 데이터가 짧은 시간동안 수백 수천 기가 ~ 테라 단위가 움직이는 경우에는 성능 확장에 한계가 있다
하나의 장치만을 사용하므로, 성능을 올리려면 수직적 확장이 필요한데, 장비의 성능을 올리는 데에도 한계가 있으며 비용이 훨씬 많이 들어가게 된다
이를 수평적 확장 (장치 여러 개를 도입하는 방식) 으로 해결하기 위해 일관성을 살짝 포기한 대신 분산 저장 시스템을 도입하였다고 생각하면 된다
또한 데이터 형식을 정형화하지 않으므로 스키마가 필요 없다는 특징이 있다
NoSQL 데이터베이스 형식으로 키-값 DB, 문서형 DB, 그래프 DB 등이 있다
유명한 NoSQL DBMS로 MongoDB가 있다
MongoDB
테이블 기반의 RDBMS가 아니며 SQL 문법을 전혀 사용하지 않는다
JSON과 비슷한 형태의 데이터베이스 문서를 사용하며, 이를 BSON이라고 부른다
RDBMS에서의 레코드와 비슷한 데이터 개념을 MongoDB에서는 도큐먼트라고 하고, RDBMS에서의 테이블과 같은 데이터의 집합을 MongoDB에서는 콜렉션이라고 한다
참고자료
[DBMS] SQLite vs MySQL vs PostgreSql: 관계형 DB 시스템의 비교. - (2) MySQL
'ServerSide > Database' 카테고리의 다른 글
ERD 그려보기 with ERDCloud (0) | 2022.09.27 |
---|---|
Identifying / Non-Identifying Relationship (0) | 2022.09.27 |
ERD (0) | 2022.09.27 |
MySQL (Express와 함께) (0) | 2022.09.14 |
SQL 기본 오브 기본 다뤄보기 (0) | 2022.09.10 |