데이터베이스(DB, Database)는 서로
연관성있는 데이터들의 모임
을 이야기한다. 일반적으로 우리가 관심 있는 데이터베이스는 컴퓨터에 저장되어 있는 데이터이며, 또한데이터 용량이 방대하며
주기억장치에는 저장이 불가능하여2차저장장치인 하드디스크 또는 플래시 메모리에 저장되는 데이터
다.
말그대로 데이터베이스 분야는 대용량 데이터 처리 기술을 연구 및 개발하는 것이 목적이다. 관심있는 데이터 베이스분야는 모두 대용량 데이터이며 정형화 데이터 및 비정형 데이터를 모두 포함하고 있다. 참고적으로 비교적 작은 데이터 처리를 다루는 분야는 자료구조(data structure)이다.
위에 적힌 것처럼 데이터베이스는 연관성있는 데이터들의 모임이다. 데이터베이스는 컴퓨터에 저장되는 데이터의 모임으로 자료량이 어마무시해서 HDD나 SSD에 저장되곤 한다. 컴퓨터에 데이터베이스를 넣어놓기만 하면 어디에 쓸 수 있을까? 데이터를 처리하고 관리하기 위해서 사용되는 소프트웨어를 DBMS(Database Management System)라고 부른다. 한국어로 데이터베이스 관리 시스템이다. DBMS에는 다양한 종류가 있는데, DBMS 혹은 DBS라고 부르기도 한다.
DBMS
DBMS는 사용자에게 데이터를 관리하는데에 필요한 기능들을 제공한다. 기본적으로 데이터를 정의한다던지, 생성한다던지 변경하고 삭제하고 접근하고
조작에 필요한 모든 기본 연산 기능
을 제공한다. 또 DBMS는 데이터 추상화(간편하게 부르기!), 데이터 독립성(데이터는 독립되어 저장), 데이터 보호 등의 관리차원에서 필요한 것들도 모두 제공해준다. DBMS는데이터베이스와 데이터베이스 관리시스템을 통칭하는 말
에 가깝다.
일단 데이터베이스를 왜 쓰는건지 생각해봐야한다. 예를 들어 20~30명 정도의 데이터를 보관하고 관리한다면 간단한 자료구조들로도 충분히 가능하다. 연결리스트, 해시테이블, 스택, 큐 같은 것들이다. 하지만 수백만에 달한다고하면 단순한 데이터 자료구조만으로는 감당하기 힘들다. 우리나라 국민 전체의 신상데이터를 보관한다고 하면 전체 데이터 용량이 엄청나고, 일반적인 조회방식이나 관리방식으로는 데이터를 관리하기가 현실적으로 어렵다. 그러면 왜 쓰면 좋을까?
데이터를 추상화할 수 있게 도와준다. 추상화
라는 의미가 되게 어렵게 다가오는데 기본적으로 중심적인 개념을 가지고 전체 큰 부분을 간략하게 나타낼 수 있도록 하는 것이다.
예를 들어
밥을 먹다.
라는 간단한 행동이지만, 세부적으로 따져보면숟가락을 든다. 숟가락을 밥 위로 이동시킨다. 숟가락으로 밥을 푼다. 숟가락을 그대로 들어올린다. 숟가락을 입으로 이동시킨다. 입을 연다. 숟가락을 입속으로 넣는다.
와 같은 어이없이 긴 이야기가 될 수 있다.
밥을 먹는다는 작은 행동을 표현하기 위해 이만큼의 설명이 필요한데, 밥을 먹다
라는 두 단어로도 저 과정을 충분히 연상할 수 있다. 데이터도 한 사람에 대한 의료정보라고하면 수많은 내역들이 있는데 이를 응집해서 OOO님의 의료정보
식으로 간략하게 추상화시킬 수 있다. 내가 이해하는 추상화는 정보를 하나로 표현할 수 있도록 간략화하는 것에 가깝다. 이후에 추상화에 대한 이야기를 좀 더 적어보겠지만, 우선은 내가 이해한대로 이해하는 것이 좋겠다.
데이터베이스 시스템은 데이터 접근을 위한 언어를 제공하고 편리한 사용자 인터페이스를 제공한다. 만약에 node의 기본 모듈인 fs을 이용해서 데이터에 접근한다고하면 수많은 코드들이 엉기어 읽기 힘들어질 것이다. 파일을 열고, 파일을 연 상태에서 내부 파일에 들어있는 데이터를 받아서 이를 가공하고 다시 데이터 변경 메소드를 사용하고... 과정만 생각해도 복잡하다. 하지만 DBMS라면 SELECT * FROM (TABLE)과 같이 간편하게 데이터를 열람할 수 있다. 수정/삭제도 동일하다.
데이터베이스 불일치성은 데이터 간에 값이 서로 일치하지 않는 현상을 말하는데, 파일 시스템을 사용하면 놓치는 부분이 생겨서 데이터가 온전히 유지되기 힘들다. 실수로 하나라도 놓치거나 하나라도 더 추가하면 원래 데이터와 갱신된 데이터간의 차이가 생기기 시작하고, 어디서 비틀렸는지 찾지 못하면 그 수많은 데이터에서 문제인 부분을 찾아야하니 고깝다. 중복이 생기면 불일치성이 생기고, 하나라도 손실되면 불일치성이 생긴다.
말이 어렵지만, 데이터에는 제약조건이 있다. 님 나이가 몇살이에요?
라고 물어보는데 음.. 저는 -33살이요
라고 말하는 사람이 어디있을까? 나이에는 예컨데 1살에서 100살 사이
와 같은 제약조건이 붙는다. 그런 제약조건이 존재하지 않는 데이터는 없다. 명확성도 떨어질 뿐더러, 데이터가 말하는 바를 이해하기 어렵다. 하지만 이를 수동으로 조작하게 된다면? 혹여 조건문에서 예외케이스를 발견하지 못한다면? 아마 데이터베이스에는 제약조건을 어긴 데이터가 들어갈지도 모른다. 수백만의 데이터가 있다고 생각한다면 매번 이를 정상화 시키기 위한 시간조차도 허비되는 자원이 될지도 모른다.
데이터베이스 시스템에서는 데이터 갱신이 원자적으로(전체가 동일하게) 이루어져야 하며, 이는 데이터 갱신시에 갱신 연산이 부분적으로 데이터베이스에 반영되질 않음을 의미한다. 갱신 연산이 부분적으로 이루어지면 데이터베이스 상태가 불일치되거나 데이터베이스 제약조건이 깨질 수도 있다. 예컨데 나이 조건을 20살 이상
으로 변경했다고 치자. 근데 절반의 데이터만 적용되어 갱신되고 나머지가 되지 않는다면? 전체 데이터베이스는 통일성(원자성)을 잃고 무너진다. 제약조건이 깨진 것도 문제고, 데이터베이스 상태가 맛이 간 것이나 다름없다.
데이터베이스 시스템 환경은 다수의 사용자가 동시에 동일한 데이터베이스 시스템 환경에 접근하게 된다. 내가 접속한 곳과, 다른 곳에서 접속했을 때 데이터베이스 상태가 다르다면 문제가 된다. 그렇기 때문에 다수가 사용하더라도 같은 데이터베이스 상태로 제어를 제공할 수 있어야 된다.
데이터 보호는 다양한 사이버 공격, 혹은 데이터 접근으로부터 데이터를 보호하는 것이다. 데이터베이스는 기본적으로 이러한 데이터 보호 기능을 제공한다. 파일 시스템이랑 계속 비교하는데, 아무래도 데이터를 다루는 것은 동일하니 비교하는 것이다. 데이터베이스 시스템에서 제공하는 것은 데이터만을 위한, 데이터에 의한, 데이터의 보호를 목적으로 만들어진 보호 기능이기 때문에 OS에서 기본적으로 제공하는 보안 기능과는 확연한 차이를 보인다. 이러한 차이는 나중에 알아보자!
데이터가 날아갔다! 그러면 지옥을 경험할지도 모른다. 100만명 분의 데이터가 갑자기 날아갔다면 어떻게 반응해야될까? 아마 깜짝놀래고 키보드 샷건치는 것만으로는 부족하다. 시스템 장애에 의해서 날아갔다면 그것도 나름대로 모니터가 부서지는 일이 벌어질지도 모른다. 기본적으로 DBMS는 히스토리를 이용해서 데이터를 백업해두거나 리스토어 시킬 수 있는 기능을 제공한다.
파일시스템(file System)
일반적으로 운영체제(OS)에 기본적으로 탑재된 기능이다. 유닉스나 리눅스는 fileSystemㅇ이라는 파일시스템을 제공한다. 파일을 읽고, 쓰고, 저장하고, 삭제하고, 열고, 닫고 등의 기본적인 파일 관리 기능을 제공하는 것이다. 데이터베이스 관리 시스템은 이 파일 시스템을 이용한 경우가 대부분인데, 따라서 DBMS는 운영체제의 프로세스 중에 하나다. 파일 시스템으로도 DB관리가 가능하지만, 데이터가 너무 많을 때, 그리고 일일히 OS에서 관리하기 어렵다는 점에서 DBMS에 밀리는 부분이 많다. 알아두자!