[CS] RDB, NoSQL

Adler·2024년 1월 15일

CS

목록 보기
8/13
post-thumbnail

이번 글에서는 RDB, NoSQL에 대해 설명하고자 한다.
사전 지식으로 스키마에 대한 이해가 필요하다.

스키마(Schema)란?

스키마는 DB 구조와 제약 조건에 관한 전반적인 명세를 정의한 메타데이터 집합이다.

메타데이터(meta data) : 데이터에 대한 데이터, 어떤 목적을 가지고 만들어진 데이터로 정의

구체적으로는 개체의 특성을 나타내는 속성과, 속성들의 집합으로 이루어진 개체, 개체 사이에 존재하는 관계에 대한 정의와 이들이 유지해야 하는 제약 조건을 기술한 것이다.

개체 (Entitiy) : 데이터로 표현하려고 하는 객체 (여러 속성들로 구성)
ex ) 학생, 과목
속성(Attribute): 개체가 갖는 속성
ex ) 홍길동, 이순신, 수학, 영어
관계(Relation) : 개체와 개체 사이 연고나성
ex ) 학생과 과목 간 "수강"이라는 관계

스키마 특징

  1. 스키마는 데이터 사전에 저장된다.

    데이터 사전 : 데이터 항목들에 대한 정보를 지정한 중앙 저장소 (테이블 및 뷰들의 집합)

  2. 스키마는 특정 데이터 모델을 이용해서 만들어진다.
  3. 스키마는 시간에 따라 불변인 특성을 가진다.
  4. 스키마는 데이터 구조적 특성을 의미하며, 인스턴스에 의해 규정된다.

스키마 3계층

스키마는 사용자 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 나뉜다.

외부 스키마 = 사용자 뷰

  • 개별 사용자 입장에서 데이터 베이스의 논리적 구조를 정의
  • 동일한 데이터에 대해, 서로 다른 관점을 정의할 수 있도록 허용
  • 단일 데이터베이스 시스템에는 다양한 외부 스키마가 존재 가능하다. 하나의 외부 스키마를 여러개 응용 프로그램에서 사용자가 공용할 수 있다.

개념 스키마 = 전체적인 뷰

  • 데이터베이스 전체 조직에 대한 논리적인 구조다. 물리적인 구현은 고려하지 않는다.
  • 각 데이터베이스에는 단일 개념 스키마만 존재한다.
  • 개체 간 관계 및 무결성 제약 조건에 대한 명세를 정의한다.

    무결성 제약 조건 : 데이터베이스 정확성, 일관성을 보장하기 위해 저장, 삭제, 수정 등을 제약하기 위한 조건

  • 데이터베이스 파일에 저장되는 데이터 형태를 나타냄

내부 스키마 = 저장 스키마

  • 물리적 저장입치 입장에서 본 데이터 베이스 구조
  • 개념 스키마를 디스크 기억장치에 물리적으로 구현하기 위한 방법을 기술
  • 저장될 데이터 항목 내부 레코드 형식, 물리적 순서 등을 나타냄.

RDB

DB유형에는 Hierarachical 계층형, Network 망형, Relational 관계형, Object-Oriented 객체지향형, Object-Relational 객체관계형 등이 있다. 그 중 RDB가 제일 많이 사용된다.

RDB란?

RDBRelational Database로 관계형 데이터 모델에 기초를 둔 데이터베이스다.
관게형 데이터 모델은 모든 데이터를 2차원 테이블로 표현한다.
테이블은 이름을 가지고 있다. 그리고 행과 열 그리고 이에 대응하는 값으로 표현한다.
다시 말해 RDB는 서로 다른 테이블이 관계를 맺고 모여있는 집합체로 이해할 수 있다.

RDB 장점

  • 데이터 분류, 정렬, 탐색 속도가 빠르다.
  • 명확한 스키마
  • 신뢰성이 높다. 데이터 무결성을 보장한다.
  • 데이터를 중복 없이 한 번만 저장한다.
  • 유지보수가 편하다.
  • 정형 정보에 접근할 때 가장 효율적이고 유연하다.

RDB 단점

  • 기작성된 스키마를 수정하기 어렵다.
  • 시스템이 커지면 JOIN문이 많은 복잡한 쿼리가 만들어진다.
  • 성능 향상을 위해서는 Scale-up만을 지원해 비용이 기하급수적으로 증가한다.
  • 다른 DB에 비해 많은 자원이 활용되어 시스템 부하가 높다.

RDB 스키마 정의

1. 요구사항 분석 및 데이터 모델링

  • 데이터베이스가 충족해야하는 요구사항 파악
  • 데이터 저장 및 관계 형성을 결정
  • 개념적 데이터 모델 (ERD)를 작성하여 데이터 간 관계를 시각적 표현

2. 논리적 설계

  • 개념적 모델을 바탕으로 논리적 데이터 모델 생성
  • 테이블, 필드, 자료형, 키(기본 키, 외래 키 등)을 정의
  • 논리적 설계는 특정 데이터베이스 시스템에 종속되지 않는 일반적인 설계

3. 물리적 설계

  • 논리적 설계를 바탕으로 실제 데이터베이스 시스템에 맞게 구조를 조정
  • 인덱싱, 데이터 저장 구조, 접근 방법 등이 포함
  • 데이터베이스 성능에 큰 영향

4. 구현

  • 실제 데이터베이스 시스템에 스키마 구현
  • SQL을 사용하여 테이블을 생성, 필요한 제약조건 적용

5. 검증 및 수정

  • 구현된 스키마가 요구사항을 충족하는지 검토 및 수정
  • 데이터베이스를 실제 사용 환경에 통합하면서 수행

SQL

RDB에서 SQL은 데이터를 관리하고 조작하기 위한 주요 도구다.
SQL은 데이터 정의, 데이터 조작, 데이터 제어로 나눌 수 있다.

1. 데이터 정의 언어 (DDL, Data Definition Language)

DDL은 데이터베이스 스키마와 관련된 구조를 생성, 변경, 삭제하는 데 사용된다.

  • CREATE : 새로운 테이블, 뷰, 인덱스 등을 생성
CREATE TABLE students (id INT PRIMARY KEY, name VARCHAR(50), age INT);
  • ALTER : 기존 데이터베이스 객체 수정
ALTER TABLE students ADD email VARCHAR(100);
  • DROP : 데이터베이스 객체 삭제
DROP TABLE students;

2. 데이터 조작 언어 (DML, Data Manipulation Language)

DML은 데이터베이스 내 데이터를 조회하거나 수정하는 데 사용된다.

  • SELECT: 데이터를 조회
SELECT name, age FROM students WHERE age > 20;
  • INSERT : 새로운 데이터를 테이블에 추가
INSERT INTO students (id, name, age) VALUES (1, 'John Doe', 22);
  • UPDATE : 기존 데이터를 수정
UPDATE students SET age = 23 WHERE id = 1;
  • DELETE : 데이터를 삭제
DELETE FROM students WHERE id = 1;

3. 데이터 제어 언어 (DCL, Data Control Language)

DCL은 데이터베이스 시스템 접근과 권한을 제어하는데 사용된다.

  • GRANT : 사용자에게 권한 부여
GRANT SELECT ON students TO user1;
  • REVOKE: 사용자 권한 제거
REVOKE SELECT ON students FROM user1;

SQL 명령어들은 데이터베이스를 효과적으로 관리하고 조작하는데 필수적이다.


NoSQL

NoSQL 등장 배경

RDB 한계와 시대적 요구

RDB는 데이터를 테이블 형태로 저장하는 구조다. 이러한 구조 덕분에 데이터 간 관계를 정의하고 SQL을 통해 효율적으로 데이터를 조작할 수 있다. RDB는 다음과 같은 장점을 가진다.

  • 데이터 무결성과 일관성
    * 정규화된 스키마와 트랜잭션 관리를 통해 데이터 정확성과 일관성을 보장
  • 복잡한 쿼리 처리
    * SQL을 통해 복잡한 데이터 집계와 분석이 가능
  • 표준화된 언어 사용
    * SQL은 표준화되어 범용성이 높다.

그러나 인터넷과 기술 발전으로 데이터의 양과 종류가 폭발적으로 증가했다.
그 결과 RDB 한계가 드러났다.

  • 규모 확장성
    * RDB는 수직적 확장에는 적합하지만, 수평적 확장 (서버 분산) 에는 한계가 존재
  • 비구조화 및 반구조화 데이터 처리 *RDB`는 엄격한 스키마를 요구해서 유연한 데이터 구조 변경이 어렵다.
    * 그리고 비구조화된 데이터 (텍스트,이미지) 처리에 적합하지 않다.
  • 읽기 / 쓰기 성능
    * 대량 데이터 처리시 RDB 성능이 저하된다.

NoSQL 등장

이러한 한계를 극복하고자 2000년대 초반 NoSQL이 등장했다.
NoSQL은 다음과 같은 특징을 가지고 있다.

  • 유연한 스키마
    * NoSQL은 비정형 데이터를 효율적으로 처리, 스키마 변경이 용이하다.
  • 수평적 확장성
    * 데이터를 여러 서버에 분산시켜 저장 및 처리 --> 대용량 데이터 처리에 유리함
  • 다양한 데이터 모델
    * 키 - 값 , 문서 지향 데이터베이스, 그래프 데이터베이스 등 다양한 데이터 모델 제공

NoSQL 스키마

NoSQL 데이터베이스 스키마는 RDB 스키마와 다르게 작동한다.
NoSQL'Not Only SQL' 약자로, 더 유연한 데이터 모델을 제공한다. 그리고 대규모 분산 데이터 관리에 적합하다. NoSQL 데이터베이스는 주로 비구조화된 데이터를 처리한다. 따라서 엄격한 스키마 정의가 필요하지 않다.
NoSQL은 다양한 유형이 있고, 각각 스키마 설계가 다르다.

1. 문서 지향 데이터베이스 (MongoDB, CouchDB)

  • 문서 지향 스키마
    데이터는 JSON, BSON, XML과 같은 문서 형식 저장
    각 문서는 유연한 스키마를 가질 수 있다.
    * 그래서 문서들이 다른 구조를 가질 수 있다.
  • 예시
{ "name": "Alice", "age": 30, "email": "alice@example.com" }
{ "name": "Bob", "age": 25 }

2. 키 - 값 저장소 (Redis, DynamoDB)

  • 키-값 스키마
    키 - 값의 쌍으로 단순 데이터 저장
    같은 문자열, 숫자 또는 이진 데이터, 구조에 대한 제약 X
  • 예시
# 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)

3. 컬럼 패밀리 데이터베이스 (Cassandra, HBase)

  • 컬럼 기반 스키마
    데이터는 컬럼 패밀리 구조로 저장
    각 컬럼 패밀리는 여러 칼럼을 가진다.
    * 각 로우는 다른 컬럼 집합을 가진다.
  • 예시
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` 테이블은 모든 행이 동일한 스키마를 공유하지 않아도 된다.
예를 들어 한 사용자는 이메일 주소를 가질 수 있고, 다른 사용자는 나이 정보만 가질 수 있다.

4. 그래프 데이터베이스 (Neo4j, ArangoDB)

  • 그래프 기반 스키마
    데이터는 노드, 엣지, 속성으로 구성된 그래프 구조로 저장
    각 노드와 엣지는 여러 속성을 가질 수 있다.
    * 그래서 복잡한 관계를 표현하는데 적합하다.
  • 예시

NoSQL 스키마 설계 특징

1. 유연성

  • 변화하는 데이터 모델에 적응할 수 있는 유연성 제공
  • 스키마 사전 정의 X, 애플리케이션 요구사항 변경시 데이터 모델 조정가능

2. 확장성

  • 수평적 확장성을 지원 --> 데이터베이스 여러 서버에 분산 시켜 처리
  • 대규모 데이터 셋과 높은 트래픽을 관리하는 이점

3. 비정형 데이터 처리

  • 비정형 데이터나 반정형 데이터를 효과적으로 처리
  • RDB에서 다루기 어려운 데이터 유형에 대한 해결책 제공

정리 : RDB와 NoSQL 이해

스키마(Schema)

  • DB의 구조와 제약 조건을 정의한 메타데이터 집합.
  • 개체(Entity), 속성(Attribute), 관계(Relation) 및 제약 조건을 포함.
  • 외부 스키마(사용자 뷰), 개념 스키마(전체적 뷰), 내부 스키마(저장 스키마)로 구성.

RDB (Relational Database)

  • 2차원 테이블로 데이터 표현.
  • 장점: 데이터 무결성, 복잡한 쿼리 처리, 표준화된 언어(SQL).
  • 단점: 스키마 변경 어려움, 복잡한 쿼리, 수직적 확장성 제한.
  • 스키마 정의: 요구사항 분석 → 논리적 설계 → 물리적 설계 → 구현 → 검증 및 수정.

SQL (Structured Query Language)

  • RDB의 데이터 관리 및 조작을 위한 언어.
  • DDL (데이터 정의), DML (데이터 조작), DCL (데이터 제어).

NoSQL (Not Only SQL)

  • RDB의 한계를 극복하기 위해 등장. 비구조화 및 대규모 데이터 관리에 유리.
  • 유연한 스키마, 수평적 확장성, 다양한 데이터 모델(문서, 키-값, 컬럼 패밀리, 그래프).
  • 비정형 데이터 처리에 강점.

NoSQL 스키마 유형

  1. 문서 지향 (예: MongoDB): 유연한 스키마, JSON/BSON 형식.
  2. 키-값 저장소 (예: Redis): 단순한 키-값 쌍 저장.
  3. 컬럼 패밀리 (예: Cassandra): 컬럼 기반 저장, 각 로우별 다른 컬럼 집합.
  4. 그래프 데이터베이스 (예: Neo4j): 노드, 엣지, 속성을 이용한 복잡한 관계 표현.

NoSQL이 유리하거나 불리한 경우

  • 유리한 경우: 대규모 분산 데이터 처리, 유연한 스키마 요구, 빠른 읽기/쓰기 속도 필요, 비정형 데이터 처리.
  • 불리한 경우: 복잡한 조인이 필요한 쿼리, 엄격한 데이터 무결성 및 트랜잭션 관리 요구.
profile
지식을 정리하기 위한 블로그입니다.

0개의 댓글