이번 글에서는 RDB, NoSQL에 대해 설명하고자 한다.
사전 지식으로 스키마에 대한 이해가 필요하다.
스키마는 DB 구조와 제약 조건에 관한 전반적인 명세를 정의한 메타데이터 집합이다.
메타데이터(meta data) : 데이터에 대한 데이터, 어떤 목적을 가지고 만들어진 데이터로 정의
구체적으로는 개체의 특성을 나타내는 속성과, 속성들의 집합으로 이루어진 개체, 개체 사이에 존재하는 관계에 대한 정의와 이들이 유지해야 하는 제약 조건을 기술한 것이다.
개체 (Entitiy) : 데이터로 표현하려고 하는 객체 (여러 속성들로 구성)
ex ) 학생, 과목
속성(Attribute): 개체가 갖는 속성
ex ) 홍길동, 이순신, 수학, 영어
관계(Relation) : 개체와 개체 사이 연고나성
ex ) 학생과 과목 간 "수강"이라는 관계
데이터 사전에 저장된다.데이터 사전 : 데이터 항목들에 대한 정보를 지정한 중앙 저장소 (테이블 및 뷰들의 집합)
스키마는 사용자 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 나뉜다.

무결성 제약 조건 : 데이터베이스 정확성, 일관성을 보장하기 위해 저장, 삭제, 수정 등을 제약하기 위한 조건
DB유형에는 Hierarachical 계층형, Network 망형, Relational 관계형, Object-Oriented 객체지향형, Object-Relational 객체관계형 등이 있다. 그 중 RDB가 제일 많이 사용된다.
RDB는 Relational Database로 관계형 데이터 모델에 기초를 둔 데이터베이스다.
관게형 데이터 모델은 모든 데이터를 2차원 테이블로 표현한다.
테이블은 이름을 가지고 있다. 그리고 행과 열 그리고 이에 대응하는 값으로 표현한다.
다시 말해 RDB는 서로 다른 테이블이 관계를 맺고 모여있는 집합체로 이해할 수 있다.
JOIN문이 많은 복잡한 쿼리가 만들어진다.Scale-up만을 지원해 비용이 기하급수적으로 증가한다.DB에 비해 많은 자원이 활용되어 시스템 부하가 높다.SQL을 사용하여 테이블을 생성, 필요한 제약조건 적용RDB에서 SQL은 데이터를 관리하고 조작하기 위한 주요 도구다.
SQL은 데이터 정의, 데이터 조작, 데이터 제어로 나눌 수 있다.
DDL은 데이터베이스 스키마와 관련된 구조를 생성, 변경, 삭제하는 데 사용된다.
CREATE TABLE students (id INT PRIMARY KEY, name VARCHAR(50), age INT);
ALTER TABLE students ADD email VARCHAR(100);
DROP TABLE students;
DML은 데이터베이스 내 데이터를 조회하거나 수정하는 데 사용된다.
SELECT name, age FROM students WHERE age > 20;
INSERT INTO students (id, name, age) VALUES (1, 'John Doe', 22);
UPDATE students SET age = 23 WHERE id = 1;
DELETE FROM students WHERE id = 1;
DCL은 데이터베이스 시스템 접근과 권한을 제어하는데 사용된다.
GRANT SELECT ON students TO user1;
REVOKE SELECT ON students FROM user1;
SQL 명령어들은 데이터베이스를 효과적으로 관리하고 조작하는데 필수적이다.
RDB는 데이터를 테이블 형태로 저장하는 구조다. 이러한 구조 덕분에 데이터 간 관계를 정의하고 SQL을 통해 효율적으로 데이터를 조작할 수 있다. RDB는 다음과 같은 장점을 가진다.
SQL을 통해 복잡한 데이터 집계와 분석이 가능SQL은 표준화되어 범용성이 높다.그러나 인터넷과 기술 발전으로 데이터의 양과 종류가 폭발적으로 증가했다.
그 결과 RDB 한계가 드러났다.
RDB는 수직적 확장에는 적합하지만, 수평적 확장 (서버 분산) 에는 한계가 존재 *RDB`는 엄격한 스키마를 요구해서 유연한 데이터 구조 변경이 어렵다.RDB 성능이 저하된다.
이러한 한계를 극복하고자 2000년대 초반 NoSQL이 등장했다.
NoSQL은 다음과 같은 특징을 가지고 있다.
NoSQL은 비정형 데이터를 효율적으로 처리, 스키마 변경이 용이하다.NoSQL 스키마NoSQL 데이터베이스 스키마는 RDB 스키마와 다르게 작동한다.
NoSQL은 'Not Only SQL' 약자로, 더 유연한 데이터 모델을 제공한다. 그리고 대규모 분산 데이터 관리에 적합하다. NoSQL 데이터베이스는 주로 비구조화된 데이터를 처리한다. 따라서 엄격한 스키마 정의가 필요하지 않다.
NoSQL은 다양한 유형이 있고, 각각 스키마 설계가 다르다.
{ "name": "Alice", "age": 30, "email": "alice@example.com" }
{ "name": "Bob", "age": 25 }
# Redis를 사용하기 위한 라이브러리 임포트
import redis
# Redis 서버 연결
r = redis.Redis(host='localhost', port=6379, db=0)
# 키-값 쌍 저장
r.set('user:1000:session', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9')
r.set('user:1001:session', 'sdfwefwefwf234234sdfwer23')
# 저장된 값을 가져오기
session1 = r.get('user:1000:session')
session2 = r.get('user:1001:session')
print(session1)
print(session2)
CREATE KEYSPACE mykeyspace
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
USE mykeyspace;
CREATE TABLE users (
user_id int PRIMARY KEY,
name text,
email text,
age int
);
INSERT INTO users (user_id, name, email) VALUES (1, 'Alice', 'alice@example.com');
INSERT INTO users (user_id, name, age) VALUES (2, 'Bob', 22);
# `users` 테이블은 모든 행이 동일한 스키마를 공유하지 않아도 된다.
예를 들어 한 사용자는 이메일 주소를 가질 수 있고, 다른 사용자는 나이 정보만 가질 수 있다.

RDB에서 다루기 어려운 데이터 유형에 대한 해결책 제공