여러 블로그들을 돌아다니면서 글을 읽어보면 이런 내용이 자주 보인다.
데이터베이스의 특징으로
Redundancy(중복)를 제거하고Consistency(일관성)을 가진다.
정말 그럴까?? NoSQL은 오히려 중복을 허용하지 않나?? 뭔가 이상하다. 이 모호성을 파악해본다.
A database is an organized collection of inter-related data that models some aspect of the real-world.
데이터베이스는 다음과 같이 정의한다.
orgranized collection: 조직화된 집합
학교에서만 봐도 알 수 있다. 그냥 전교생을 모두 운동장에 풀어놓으면 관리가 어렵다. 그러나 학년을 나누고 반을 나누고 번호를 나누고 관리하면 훨씬 수월하다.
inter-related data: 연관된 데이터
우리가 인터넷 쇼핑몰에서 주문을 할 때 주문서를 보면 회원정보, 결제하는 방법, 상품 정보같은 것들이 같이 포함된다. 이 데이터들을 한 서비스 아래에 관련이 있는 데이터라고 한다.
the real-world
반안에 있는 학생들, 요번달에 논산 훈련소에 입소한 사람들과 같이 현실세계를 모델링한다.
DMBS는 데이터베이스안의 정보들을 저장하고 분석하는 소프트웨어이다. 흔히 얘기하는 MySQL, Oracle, PostgreSQL등은 데이터베이스가 아니라 바로 DBMS이다.
만약, cs스터디 정보를 사용자 친화적으로 직접 관리한다고 하자. 파일명이 cs-study.txt라 하자.
데이터베이스, 10명, 1주차
컴퓨터 네트워크, 20명, 1주차
운영체제, 15명, 1주차
데이터 베이스 스터디에 참여하는 인원을 알고 싶으면 어떻게 할까? 자바 코드로 간단하게 짜본다.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileParser {
public static void main(String[] args) {
String fileName = "src/cs-study.txt";
try (BufferedReader reader = new BufferedReader(
new FileReader(fileName))) {
String line;
while ((line = reader.readLine()) != null) {
String[] record = parse(line);
if (record[0].equals("데이터베이스")) {
System.out.println(record[1]);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static String[] parse(String line) {
return line.split(",");
}
}
그렇다면 이렇게 파일로 관리하면 뭐가 문제일까? 많은 의문점이 생긴다.
이러한 문제점들을 해결해주는게 DBMS다.
DBMS는 데이터베이스의 정의, 생성, 쿼리 작성, 업데이트 및 등록을 해준다.
데이터 모델은 데이터가 데이터베이스에 묘사하기 위한 개념들의 집합
스키마는 우리가 dbms에 어떤 데이터베이스가 데이터에 따라 어떻게 보이기를 원하는지 알려주는 방식
용어 정의는 이쯤으로 하고 서두에 밝혔던 모호성을 밝히기 위해 데이터베이스가 왜 탄생했는지 먼저 살펴본다.
일단 컴퓨터 프로그래밍의 역사를 살펴보면 다음과 같다.
스위치 -> 이진법 -> 어셈블리어 -> 포트란 -> 코볼
그런데, 이렇게 코볼로 프로그래밍을 하다보니 프로그래밍을 하면서 계속 데이터를 건들려줘야 했었다. 이것이 Database와 dbms가 나온 이유이다. 찰스바크만은 이 상황을 보고 중간에 매니저를 한 명 두면 되지 않겠냐는 개념으로 dbms가 탄생했다.
1960년대에 IBM에서 IMS(Information Management System)이 인기를 끌고 있을 때로 가본다. 그 때 당시엔 컴퓨터는 매우 비싸고 노동력은 매우 쌌기 때문에 인간들만 계속 죽어나갔던 것이다. (백날 스키마 다시 만들고 이랬을 생각하면 정말 끔찍하다.) Codd박사가 그 문제점을 파악하고 "아니. 우리 그냥 이렇게 파일구조로 해서 골치아프게 매일매일 고치지 말고 집합으로 생각해서 중복을 제거하고 일관성을 높여 유지보수성을 늘립시다." 라고 주장한다. 이 주장이 바로 1969년에 발표한 논문 A Relational Model of Data for Large Shared Data Banks이다.
Realation Database Management System. 기존의 logic layer와 physical layer의 tight coupling인 문제를 해결하고자 나온 Realatinal model를 기반으로 하는 시스템이다.
따라서, 기존의 데이터 중복Redundancy , 그리고 데이터의 일관성이 없는InConsistency 의 문제를 해결하는 DBMS이다.