데이터베이스 관리 시스템(DataBase Management System, DBMS)은 다수의 사용자들이 데이터베이스 내의 데이터에 접근하고 사용할 수 있도록 해주는 소프트웨어 도구의 집합이다. DBMS는 사용자 또는 다른 프로그램의 요구를 처리하고 적절히 응답하여 데이터를 사용할 수 있도록 해준다.
DBMS의 발전과정
과거에는 각각의 업무마다 그에 필요한 데이터 파일을 독립적으로 구성하여 사용하였다. 그로 인해 서로 다른 업무의 파일에서 중복 저장되어 관리되는 데이터의 중복성과, 응용 프로그램과 데이터 간의 상호 의존 관계에 따른 데이터 종속성을 초래하는 단점이 있었다.
응용 프로그램과 데이터가 1:1 대응 관계를 이루면서 데이터의 접근 방식을 변경할 때 응용 프로그램도 함께 변경해야 한다는 이유로 데이터의 중속성이 단점으로 평가받는다.
또한 데이터가 각각의 업무마다 구성되어있기 때문에 아래와 같은 네 가지 문제점이 발생하게 된다.
중복성으로 인한 문제점
- 일관성
중복된 데이터 간에 내용이 일치하지 않는 상황이 발생하여 일관성이 없다. - 보안성
중복되어 있는 모든 데이터에 동등한 보안수준을 유지하기 어렵다. - 경제성
저장공간의 낭비와 동일한 데이터의 반복 작업으로 비용이 증가한다. - 무결성
제어의 분산으로 데이터의 정확성을 유지할 수 없다.
DBMS의 필수기능
- 정의(Definition) 기능
응용 프로그램들이 요구하는 데이터에 대한 형식, 구조, 제약조건들을 명세하는 기능이다. - 조작(Mainipulation) 기능
특정한 데이터를 검색하거나 데이터베이스의 갱신과 삭제 그리고 보고서 생성 기능 등을 포함한다. - 제어(Control) 기능
데이터베이스에 접근하여 이루어지는 갱신, 삽입, 삭제 작업이 정확하게 수행되어 데이터의 무결성이 유지되도록 한다.
사용자별로 접근할 수 있는 데이터의 권한을 분리하여 보안을 유지하고 권한을 검사할 수 있어야 한다.
데이터베이스의 활용
앞서 DBMS를 다수의 사용자들이 데이터베이스 내의 데이터에 접근하고 사용할 수 있도록 해주는 소프트웨어 도구의 집합이라고 소개하였다.
그렇다면 이러한 데이터베이스는 어떻게 활용되어 사용되는 것일까? 대표적인 활용 사례 몇 가지를 소개하면서 다시 한번 데이터베이스가 갖추어야 하는 필수 기능에 대하여 알아보자.
은행의 고객 정보
일반적으로 은행에서 계좌를 개설할 경우 은행 창구에서 뿐만 아니라 인터넷뱅킹, 폰뱅킹, 스마트폰 앱 등을 통해 계좌를 조회하거나 돈을 이체할 수 있다. 이는 각 응용 프로그램별로 별도의 데이터베이스를 운용하고 있다면 절대 불가능할 것이다.게시판의 게시글 정보
게시글이 모여있는 웹사이트를 살펴보면 각 게시글들은 ‘게시글ID’,’작성자’,’게시글제목’,’게시글내용’ 등의 정보를 담고 있다. 이 중 게시글ID는 절대로 중복될 수 없으므로 DBMS를 통해 중복성을 최소화할 수 있다.대학교의 학생 정보
대학교에서 학생을 나타내는 정보는 크게 학생의 신상정보와 성적 정보로 나뉠 것이다.- 학생의 신상정보를 구성하는 세부 데이터에는 ‘학번’, ‘성명’, ‘학과’, ‘생년월일’, ‘연락처’ 등이 있다.
- 학생의 성적 정보를 구성하는 세부 데이터에는 ‘학번’, ‘평점’, ‘과목별 점수’ 등이 있다.
성적 정보 데이터베이스에 입력되는 값은 신상정보에 존재하는 ‘학번’에 대해서만 성적을 입력할 수 있어야 하는데, 이 기능 또한 DBMS에서 제공하는 외래 키(Foreign Key) 기능을 이용하여 구현할 수 있다.
마무리하며
이번 게시글을 통하여 DBMS의 정의와 특징에 대해서 알아봤다. 지극히 이론적인 내용이기 때문에 여기까지 읽어오면서 머릿속에 남아있는 것이 별로 없을 것이다.
이번에는 이와 관련된 내용을 적으면서 이 글을 마무리하고자 한다.
프로그래밍 관련 기술을 공부할 때에는 대부분의 사람들이 글이나 동영상으로 구성된 강의를 통해 공부를 할 것이다. 하지만 이러한 강의를 고등학교 시절에 배웠던 수학/과탐/사탐 등의 과목과 같이 단순히 이론을 읽고 복습을 하는 학습의 경우 그렇게 도움되지 않는다.
그렇다면 어떻게 학습을 해야 좋은가?라는 의문에 대한 나의 구체적 답변은 내용이 길어질 수 있기에 핵심만 짚어보고, 추후에 별도의 게시글로 작성해보겠다.
- 프로그래밍 공식문서를 통해 학습하라
- 배움에는 동기가 필요하다
- 이 기술을 어떻게 활용할 수 있을지 생각해볼 것