RDBMS & NOSQL

HEYDAY7·2021년 5월 14일
0
post-thumbnail

데이터베이스에 대한 기본 지식을 복습하고자 본 글을 작성한다.

데이터베이스란

데이터베이스란 말 그대로 데이터들을 모아놓은 곳(것)이다. 어플리케이션을 운영하는 데에 필요한 정보들을 데이터베이스에 모아두고 관리하게 되며 서비스가 확장할수록 데이터베이스의 크기 또한 따라서 확장해가야 하므로 이 데이터베이스를 잘 구축하는 것이 매우 중요하다.

이러한 데이터베이스가 크게 관계형 데이터베이스, 비관계형 데이터베이스로 양분된다.

RDB / RDBMS

Relationala Database로 데이터간의 관계에 초점을 맞춰 저장하는 관계형 데이터 모델이다.
RDB의 가장 큰 특징은 row와 column으로 구성된 2차원 테이블에 데이터들을 저장할 수 있다는 것이다. 일반적인 사람이 데이터베이스를 떠올렸을 때 떠오르는 구조가 이 RDB 구조인 것이다.

  • RDB는 2차원 table로 표현된다.
  • column은 field(attribute)가 된다.
  • row는 record(tuple)가 된다.

    이러한 RDB를 지원하는 management system을 RDBMS라고 한다. 유명한 RDBMS의 경우 MySQL, Oracle, PostgreSQL 등 등 이 있다.

Schema

이러한 RDB는 데이터베이스 스키마를 갖는다. 간단히 생각하면 데이터베이스의 설계도 같은 것이다. 앞서 말했듯 RDB는 2차원 table로 표현되는데 이러한 여러 개의 table이 어떠한 관계를 지니고 있는지 나타내주는 도식도라고 생각해도 된다. 또한 이 스키마에는 각 table의 field의 제약조건도 나타낼 수 있다.

  • 가령 나이 field에는 문자가 올 수 없도록 한다는 등...

이 그림에서 밑줄이 그어진 filed의 경우 primary key를 의미한다.

primary key, foreign key

실질적으로 RDBMS를 사용해보면 핵심이 되고, 자주 접하게 될 두가지는 이 primary key와 foreign key일 것이다. primary key란 말 그대로 고유한 키를 의미하며 한 table에서 그 record를 특정할 수 있게하는 키를 의미한다.

  • 축구에서의 경우 한 팀의 같은 등번호를 갖는 선수가 두 명일 수 없으니 등번호가 primary key가 될 수 있을 것이다.

foreign key의 경우 두 개의 table이 연결될 때, 한 table의 field가 다른 table의 record를 식별할 수 있게 하는 key를 뜻한다.

말로는 헷갈릴 수 있으므로 바로 직전에 나왔던 스키마를 봐보자. Book의 Publisher_name에서 화살표가 나와 Publisher의 Name에 들어가는 것을 볼 수 있다. 여기서 Name이 primary key 이므로 Book의 Publisher_name이 foreign key가 되는 것이다.

이 key와 관련해서는 항상 지켜지는 데이터 무결성이 있다.

Entity integrity

모든 테이블은 primary key를 가져야 하며, Null 값이 아니다.

Referential integrity

foreign key의 경우 특정 다른 테이블의 primary key 값을 참조하며, business 적인 규칙에 따라 Null 값이 허용될 수는 있다.

MS의 경우 Management system으로 RDB를 잘 관리할 수 있게 해주는 system이라고 이해하면 된다.

SQL

Structured Query Language의 줄임말로 언어의 일종이라고 보면 된다. 간단하게 보고 넘어가자면 RDBMS에 저장된 데이터에 접근하고 조작하기 위한 언어라고 생각하면 편하다. 이 SQL의 경우 이 자체만으로도 내용이 아주 방대하므로 따로 추후에 글을 작성해 볼 생각이다.

쨌든 RDBMS의 경우 SQL, 즉 query를 이용해서 자신이 원하는 데이터를 찾고, 수정도 하고, 여러 table을 합치고도 한다는 것을 기억하고 가면 된다.


NoSQL

Not Only SQL을 의미하며, 정형화되어있지 않은 대량의 데이터를 처리하는데 주로 사용된다. 일반적으로 게임이나 데이터 분석, 머신러닝, 빅데이터처리 등에는 NoSQL이 많이 사용된다고 알려져 있다.

특징

  • 관계형 모델을 사용하지 않아 테이블 간의 Join 없음
  • 대부분 여러 데이터 베이스 서버를 묶어 하나의 데이터베이스를 구성
  • 관련성이 없는 데이터를 한데 저장함.
  • 비정형 데이터 구조를 지님
  • 유연한 스키마
  • DB를 분산시켜 분산/병렬처리 가능
  • 데이터 redundancy 허용

유형

  • key & value 모델 / Redis, Memcached
  • Document 모델 / MongoDB
  • Graph 모델 / GraphDB
  • 등 등...

To be continue...

NoSQL에 대해서 공부하고 그 내용을 정리해보고자 여러 문서들을 읽어봤다. RDB와의 확실한 차이점이 느껴지기는 하나 사실 나는 지금까지 RDBMS만 써 봤을 뿐, NoSQL은 직접적으로 접해본 경험이 없기 때문에 아직은 글로 읽은 지식에 지나지 않는다.
머지 않은 시기에 MongoDB와 같이 유명하고, 문서도 많은 NoSQL을 한번 딥하게 공부해봐야 할 것 같다.

profile
(전) Junior Android Developer (현) Backend 이직 준비생

0개의 댓글