관계영 데이터베이스로 불린다. 말 그대로 관계형 모델을 기반으로 하는 데이터 베이스로 이를 유지하고 관리하기 위한 시스템을 RDBMS라고 부릅니다.
이러한 RDBMS는 주로 SQL(Structured Query Lang)을 이용해 데이터를 조회하고 관리하게 됩니다.
명령어 종류 | 명령어 | 설명 |
---|---|---|
데이터 조작어(DML : Data Manipulation Language) | SELECT | DB에 들어있는 데이터를 조회하거나 검색하기 위한 명령어를 말함(RETRIEVE라고도 함) |
INSERT, UPDATE DELETE | DB의 테이블에 들어 있는 데이터에 변형을 가하는 종류(데이터 삽입 수정, 삭제)의 명령어들을 말함 | |
데이터 정의어(DDL : Data Definition Language) | CREATE, ALTER, DROP, RENAME, TRUNCATE | 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 (생성, 변경 삭제, 이름변경) 데이터 구조와 관련된 명령어들을 말함) |
데이터 제어어(DCL : Data Control Language) | GRANT, REVOKE | DB에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어들을 말함 |
트랜잭션 제어어(TCL : Transaction Controler Language) | COMMIT, ROLLBACK, SAVEPOINT | 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말함. |
여기서 몇 가지만 자세히 다루고 넘어갑시다.
RDB는 매우 정교한 초기 설계로 만들어집니다.
테이블 사이에 서로 의존성이 있고, 쳇바퀴처럼 맞물려 돌기 때문에 데이터 타입을 바꾼다던지, 새로운 열을 추가한다던지 하는 작업은 실제 production 환경에서 사실상 불가능합니다.
보통 기존 테이블을 복제해서 거기에 수정을 가한 뒤, 기존 테이블과 교체하는 방식을 택합니다.
일반적으로 수직 확장(Vertical Scale)은 하드웨어 스펙의 확장을 의미하고,
수평 확장(Horizontal Scale)은 양적 확장을 의미합니다.
RDB가 수직 확장이 더 용이하고 수평 확장이 어려운 이유는, 데이터가 여러 테이블에 의존해있기 때문입니다.
데이터가 서버에 분산될 경우 이를 중간에서 잘 중재해주는 역할이 중요해지는데, 그럴 바에는 그냥 좋은 서버를 하나 사서 분산 처리에 대한 신경을 쓰지 않는게 더 좋기 때문입니다.
데이터베이스 트랜잭션의 성질을 나타내는 네 가지 요소를 뜻합니다.
Non-SQL이라고도 하고, Not only SQL이라고도 합니다.
이들은 관계형이 아닌 데이터 모델을 총칭하고, Document 모델 / Key-Value 모델 / Graph 모델 / Wide-Column 모델 등 다양한 데이터 모델이 있습니다.
그럼 이제 둘을 비교해봅시다.
분류 | RDB | NoSQL |
---|---|---|
관계 사용 여부 | O | X |
스키마 구조 | 정적인 구조를 가짐 | 유연한 구조를 가짐 |
확장성 | 수직 확장 용이(용량을 늘리는게 쉬움) | 수평 확장 용이(여러 대 늘리는 게 쉬움) |
확장시 다운 타임 | 있을 수 있음 | 거의 없음 |
조회 시 특징 | 복잡한 쿼리와 Join 연산 가능 | 구조화된 쿼리 언어가 없는 경우도 많고, 일반적으로 Join이 없음 |
적합한 사용처 | OLTP(트랜잭션 처리)에 적합 | OLAP(분석 처리)에 적합 |
보통 관계형으로 잘 정리될 수 있는 고객 데이터나 비즈니스 데이터, 결제 데이터 등을 다룰 때 사용합니다.
MongoDB는 Document 모델이기 때문에 넣는 데이터의 스키마에 구애받을 필요가 없습니다.
Redis는 in-memory Key-Value 모델이다. 때문에 데이터 접근 & 대기시간이 매우매우 짧습니다.
따라서 주로 데이터 캐시, 메시지 브로커 & 큐로 사용됩니다.