CS
  • CS-Study
  • database
    • B-Tree와 B+Tree
    • DB JOIN
    • DB Lock
    • DB 트래픽
    • DBCP (DB Connection Pool)
    • Flyway
    • Message Broker
    • MySQL InnoDB 스토리지 엔진
    • MySQL 엔진 아키텍처
    • RDB와 NoSQL
    • Redis
    • SQL Injection
    • 스키마 (Schema)
    • Table Scan과 Index Scan
    • Apache Kafka
    • Key
    • 뷰 (View)
    • 인덱스
    • 정규화
    • RDBMS, NoSQL의 클러스터링/리플리케이션 방식
    • 트랜잭션(Transaction)
    • 트랜잭션의 격리성(Transaction Isolation)
    • 프로시저와 트리거
    • DB 정규화 (Normalization)
  • etc
    • MSA
    • REST, REST API, RESTful
    • SOLID 원칙
    • TDD (Test-Driven Development)
    • 서버리스
    • 컨테이너와 도커
  • java
    • Collections
    • Garbage Collection
    • Generic
    • JDBC
    • Java Virtual Machine(JVM)
    • Java Thread
    • Java8 vs Java11 vs Java17
    • 객체지향 프로그래밍 OOP (Object Oriented Programing)
    • Optional
    • RxJava(Reactive Programming)
    • 문자열(String & StringBuffer & StringBuilder)
    • Synchronized
    • Virtual Thread
    • Wrapper Class
    • Equals()와 Hashcode()
    • final
    • Jackson 라이브러리
    • 리플렉션(Reflection)
    • static class와 static method
    • 스트림(Stream)과 람다(Lambda)
    • 스프링 프레임워크에서 사용되는 디자인 패턴
    • 예외처리(Exception)
    • Java Annotation
    • 추상클래스와 인터페이스
  • network
    • 3-way handshake
    • 4-way Handshake
    • DHCP(Dynamic Host Configuration Protocol)
    • DMZ(DeMilitarized Zone)
    • DNS(Domain Name System)
    • HTTP Method
    • HTTP 버전 비교
    • HTTP status code
    • HTTP
    • IP Address
    • Mutiplexing & Demultiplexing
    • OSI 7계층
    • SOP, CORS
    • TCP와 UDP
    • XSS와 CSRF
    • gRPC
    • Stateless와 Connectionless
    • 라우터 Router
    • 로드밸런서(Load Balancer)
    • 브라우저에 URL입력시 네트워크 상 일어나는 일
    • 서브넷 마스크, 게이트웨이
    • 웹 소켓과 소켓 통신
    • 쿠키(Cookie)와 세션(Session)
  • operating-system
    • IPC (Inter Process Communication)
    • 인터럽트
    • TLB
    • 스레싱 Thrashing
    • Thread Pool, Fork-Join
    • Thread Safe
    • 프로세스
    • 가상 메모리
    • 데드락 (DeadLock, 교착 상태)
    • 동기/비동기 & 블로킹/논블록킹
    • 동기화(Synchronization)
    • 메모리 할당과 단편화
    • 뮤텍스와 세마포어, 모니터
    • 세그먼테이션과 페이징
    • 운영체제
    • 캐시 메모리
    • Context switching(문맥 교환)
    • 컴파일
    • 파일 시스템
    • 페이지 교체 알고리즘(Page Replacement Algorithm)
    • 프로세서 스케줄링 알고리즘
    • 프로세스 주소 공간
  • spring
    • @Transactional
    • AOP(Aspect-Oriented Programming)
    • DTO, DAO, VO, Entity
    • DispatcherServlet
    • Hibernate, JPA, Spring Data JPA
    • Ioc와 DI
    • JPA 연관관계 맵핑
    • N+1 Problem
    • ORM
    • Persistence Context
    • SQL Mapper vs ORM vs QueryBuilder
    • Servlet Filter와 Spring Interceptor
    • Servlet
    • Spring MVC와 Spring Boot
    • Tomcat
    • WebFlux
Powered by GitBook
On this page
  • DB와 DBMS
  • RDB(Relational Database)
  • NoSQL(Not Only SQL)
  • RDB(SQL) VS NoSQL
  1. database

RDB와 NoSQL

PreviousMySQL 엔진 아키텍처NextRedis

Last updated 1 year ago

DB와 DBMS

  • Database

    • 체계화된 데이터의 집합

    • 여러 응용 시스템들의 통합된 정보를 저장하여 운영할 수 있는 공용 데이터의 묶음

    • 검색/갱신 등의 데이터 관리를 효율화함

  • DBMS(Database Management System)

    • 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 데이터베이스를 관리해주는 소프르웨어

  • SQL(Structured Query Language)

    • 관계형 데이터베이스 관리 시스템의 데이터를 관라하기 위해 사용되는 표준 프로그래밍 언어

    • 데이터베이스와 관련된 모든 작업을 위해 사용됨

      • 데이터베이스 스키마 생성 및 수정, 테이블 관리, 데이터 추가, 수정, 삭제, 조회 등

  • Schema

    • 데이터베이스를 구성하는 개체(Entity), 속성(Attribute), 관계(Relationship) 및 제약조건 등에 관해 전반적인 명세를 기술한 메타데이터의 집합

데이터 요청

CPU가 RAM에 데이터를 요청할 때

  • RAM에 적재되어 있는 데이터를 가져올 경우, I/O가 발생 X

  • 하드디스크에서 데이터를 가져올 경우, I/O 발생

    • 페이지 교체 발생 -> 속도 떨어짐

    • Blocking I/O: I/O 작업이 진행되는 동안 프로세스는 자신의 작업을 중단한채 대기하는 방식

  • 수직적 확장(Scale-up)

    • 컴퓨터의 성능을 업그레이드 하는 방법

      • 단순히 데이터베이스의 성능을 향상 시키는 것

    • 데이터라 분산되지 않기 때문에 동기화가 필요없어 데이터 일관성이 유지됨

    • RAM의 공간에 한계가 있어 결국에 하드웨어에서 데이터를 가져옴

      • 이 과정에서 I/O가 일어나 데이터 읽기에서 성능이 떨어짐

  • 수평적 확장(Scale-out)

    • 컴퓨터를 여러 대 사용하여 분산시키는 방법

      • 더 많은 서버가 추가되고 DB가 전체적으로 분산됨

      • 하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동

    • 데이터 복제

DB 분류

  • 키-값 DB: 키와 값으로 구성된 배열구조의 DB로 NoSQL DB 중 가장 단순한 구조

  • 도큐먼트 DB: 필드와 값의 형태로 구성된 데이터를 JSON 포맷으로 관리하는 DB로 NoSQL DB 중 가장 많이 사용되는 구조

  • 컬럼 패밀리 DB: 컬럼과 로우로 구성된 DB로 컬럼은 이름과 값으로 구성되고 로우는 각기 다른 컬럼으로 구성이 가능함

  • 그래프 DB: 노드와 관계로 구성된 DB로 근접한 객체를 모델링할 목적으로 설계됨

RDB(Relational Database)

  • 개념

    • 관계형 데이터 모델을 기초로 두고, 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스

      • 테이블 간에는 외래키(FK)를 사용하여 서로 다른 테이블과 관계를 맺고 있음

    • 정형화된 정보를 저장하고 접근하는데 가장 효율적이고 유연한 데이터베이스 모델

    • RDBMS(Relational DBMS)

      • 관계형 데이터베이스(RDB) 관리 시스템

      • 데이터베이스를 이루는 객체들의 릴레이션을 통해 데이터를 저장

      • SQL을 이용하여 데이터의 저장, 수정, 삭제, 검색 가능

  • 장점

    • 정해진 스키마에 따라 저장하기 때문에 명확한 데이터 구조가 보장됨

    • 오래 사용된 만큼 신뢰성이 높고, 어떤 상황에서도 데이터의 무결성을 보장함

    • 관계를 이용하여 각 데이터를 중복 없이 한 번만 저장 가능

    • 유지보수 편리

  • 단점

    • 작성된 스키마를 수정하기 어려움

      • 데이터가 유연하지 못하고, 스카마가 변경되는 경우 데이터 구조의 변경이 어려움

    • 테이블 간의 관계가 복잡해 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있음

    • 성능 향상을 위해서는 수직적 확장(Scale-up)만을 지원해 비용이 기하급수적으로 늘어날 수 있음

    • 다른 DB에 비해 많은 자원이 활용되어 시스템 부하가 높음

  • 사용

    • 데이터 구조가 변경될 여지가 없고, 명확한 스키마가 경우

    • 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우

  • 용어

    • Relation(릴레이션): Entity, Table

      • Tuple(튜플): 관계된 데이터의 묶음으로, 테이블의 행을 의미

      • Attribute(속성): 데이터의 항목/필드를 의미

NoSQL(Not Only SQL)

  • 개념

    • 비관계형 데이터베이스로 RDB에 비해 자유로운 형태로 데이터를 저장

    • 데이터 간의 관계를 정의하지 않고, 스키마 없이 사용하거나 느슨한 스키마를 제공

    • 대량의 분산된 데이터를 저장하고 조회하는데 특화

  • 장점

    • 유연하고 자유로운 데이터 구조

      • 저장된 데이터를 조정하고 새로운 필드를 추가하는데에 자유로움

      • 데이터는 애플리케이션이 필요로 하는 형식으로 저장

    • 성능 향상 방법으로 수직적 확장(Scale-up) 가능, 수평적 확장(Scale-out)에 용이

    • 대용량 데이터 처리에 효과적이고, 분산처리와 병렬 처리 가능

  • 단점

    • 데이터 중복 발생 가능

      • 여러 컬렉션에 중복 데이터가 많아 데이터 변경 시, 모든 컬렉션에서 수정 필요

    • 명확한 데이터 구조를 보장하지 않음

  • 종류

    • Key-Value Model

      • Key-Value 방식으로 저장

      • 고속 읽기와 쓰기에 최적화

      • ex) Redis, DynamoDB 등

    • Document Model

      • Key-Document 방식으로 저장

      • Document는 계층적 데이터 타입(JSON, XML)으로 저장

      • ex) MongoDB 등

    • Column Model, Graph Model

  • 사용

    • 정확한 데이터 구조가 정해지지 않거나, 변경 및 확장이 될 수 있는 경우

    • 데이터 양이 매우 많은 경우(막대한 양의 데이터를 다뤄야하는 경우)

    • 데이터 읽기를 자주 하지만, 변경은 자주 이루어지지 않는 경우

  • 용어

    • Documents(문서)

      • 레코드라고 부름

      • Json과 비슷한 형태로, 관련 데이터를 동일한 컬렉션에 넣음

      • 여러 테이블을 조인할 필요 없이 이미 필요한 모든 것을 갖춘 문서

RDB(SQL) VS NoSQL

적합성

  • RDB 사용이 더 적합한 경우

    • 관계를 맺고 있는 데이터가 자주 변경되는 경우

    • 스키마의 변경이 없는 경우

  • NoSQL 사용이 더 적합한 경우

    • 정확한 데이터 구조가 정해지지 않거나, 변경 및 확장이 될 수 있는 경우

    • 데이터베이스를 수평으로 확장해야 하는 경우 (막대한 양의 데이터를 다뤄야하는 경우)

    • 데이터 읽기(read)를 자주 하지만, 변경(update)은 자주 이루어지지 않는 경우

RDB(SQL)
NoSQL

데이터 저장 모델

Table

Json document, key-value, 그래프 등

개발 목적

데이터 중복 감소

애자일, 확장가능성, 수정가능성

스키마

엄격한 데이터 구조

유연한 데이터 구조

확장

Scale-up

Scale-out

종류

Oracle, MySQL 등

MongoDB, Redis 등

적합 업무

- 데이터 무결성 및 일관성이 중요한 트랜잭션 업무 - 온라인에서 다양한 집계 및 통계를 분석하는 업무 - 복잡한 계산 및 실시간 데이터 정합성이 필요한 업무

- 오프라인에서 정형 및 비정형 데이터 분석 업무 - 초당 동시 처리가 중요한 업무 - 로그 및 이력 등의 단순 기록형 업무

성능

성능 향상을 위해서는 성능 최적화 작업이 필요

클러스터 크기, 네트워크 및 애플리케이션에 의해 성능이 결정됨


ref

ACID와 을 지원하여 데이터의 중복을 제거하고 데이터의 일관성을 보장

참고
DB 서버의 확장성(Scaling)
Transaction
mongoDB Story 1: mongoDB 정의와 NoSQL