개발일지

DB종류 본문

DB

DB종류

딸기아사이레모네이드리프레셔 2024. 2. 7. 15:14
728x90

목차

     

    💡 MongoDB


    특징

    • NoSQL 데이터베이스로서 Document-Oriented 데이터 모델을 사용한다.
    • 데이터를 JSON 형태의 문서로 저장하고, 컬렉션(Collection)에 문서를 그룹화하여 저장한다.
    • 스키마가 유연하며, 필요에 따라 동적으로 데이터 모델을 조정할 수 있다.
    • 수평 확장을 지원하여 대규모 데이터를 처리하는 데 적합하다.
    • Replica Set을 통한 고가용성을 제공하여 장애 복구와 무중단 서비스를 지원한다.

    사용 용도

     비정형 데이터를 다루는 웹 어플리케이션, 소셜 미디어 플랫폼, 로그 분석 시스템 등에 적합하다.

     데이터 모델이 자주 변경되거나 확장성이 필요한 경우 사용할 수 있다.

    💡Redis🍀


    특징

    • In-memory 데이터 스토어로서 데이터를 메모리에 저장하므로 빠른 읽기/쓰기 작업을 제공한다.
    • 다양한 데이터 구조를 지원하며, 주로 Key-Value 형태의 데이터 모델을 사용한다.
    • Pub/Sub 메시징 시스템을 지원하여 실시간 데이터 처리에 적합하다.
    • 데이터를 디스크에 지속적으로 저장할 수 있는 옵션도 제공한다.

    사용 용도

    ✅ 캐싱, 세션 관리, 메시징 큐, 실시간 분석 등 빠른 응답 속도와 고성능이 요구되는 시스템에 적합하다.
    ✅ 주로 메모리 내 데이터를 효율적으로 저장하고 처리해야 하는 경우 사용된다.

    자바 해쉬맵과의 비교

     

    Redis와 자바 해쉬맵 모두 key-value 기반이고,
    메모리 베이스이며, 원하는 value를 개발자가 원하는 표현방식으로 넣을 수 있다. 

     

    그러다면 HashMap을 쓰면 될텐데, 굳이 Java-Redis 연동 클라이언트를 써가며 Redis를 활용하는 이유가 있을까?

    → 서버가 1대 있다는 가정에서는 Redis의 장점이 크게 보이지 않지만, 분산 환경을 대입하면 장점이 보인다.

     

     

     

    분산 환경에서의 장점

    HaspMap VS Redis

    유저 요청이 크게 늘어나 서버를 몇 대 증설하였지만, 동일한 해쉬맵 데이터를 참조해야할 상황이 있다고 가정해보자.

    이 때 원격 프로세스간에 동일한 해쉬맵 데이터를 참조해야 할 때, 분산환경에선 원격 프로세스간 데이터를 동기화 하기 어렵다.

    하지만, 별도의 레디스 서버를 구성하고 해당 레디스에서 값을 꺼내 쓴다면 메모리 기반 데이터 구조의 빠른 응답성을 확보함과 동시에 데이터 불일치 문제를 해결할 수 있다. 

    Redis의 영속성 제공

    메모리에 데이터를 관리하므로 매우 빠른 속도로 데이터를 저장 및 조회할 수 있다. 하지만 메모리 특성상 저장된 데이터는 사라질(휘발성) 가능성이 있다. 이를 보완하고자 레디스는 관리하고 있는 데이터 영속성을 제공한다. 즉, 메모리에 있는 데이터를 디스크에 백업하는 기능을 제공하며, RDB방식이나 AOF방식으로 백업할 수 있다. 

     

    1️⃣ RDB(Redis Database) : 메모리에 있는 데이터 전체에서 스냅샷을 작성하고, 이를 디스크로 저장하는 방식

    특정 시간마다 여러 개의 스냅샷을 생성하고, 데이터를 복원해야 한다면 스냅샷 파일을 그대로 로딩만 하면된다. 하지만, 스냅샷 이후 변경된 데이터는 복수할 수 없다는 단점이 있다.

    *스냅샷이란?

    • 스냅샷은 특정 시점에서 메모리에 있는 데이터의 상태를 포착한 것을 말한다. 일종의 데이터 백업이라고 생각하면 된다. 스냅샷을 사용하면 DB의 현재 상태를 저장하거나 나중에 필요할 때 다시 복원할 수 있다. 
    • 스냅샷은 메모리에 있는 데이터를 디스크로 영구적으로 저장하는 과정이며, 이를 통해 데이터를 안정적으로 보존하고, 장애 발생 시에도 데이터를 복구할 수 있다. 

    2️⃣ AOF(Append Only File) : 데이터가 변경되는 이벤트가 발생하면 이를 모두 로그에 저장하는 방식

    데이터를 생성,수정,삭제하는 이벤트를 초 단위로 취합 및 로그 파일에 작성하며, 모든 데이터의 변경 기록들을 보관하고 있으므로 최신 데이터 정보를 백업할 수 있다. 하지만, RDB방식보다 로딩 속도가 느리고 파일 크기가 큰 것이 단점이다. 

     

    레디스는 일반적으로 AOF와 RDB를 동시에 사용하여 데이터를 백업한다.

    ex) 매일 7시마다 RDB 스탭샷을 생성하고, RDB 생성 이후에 변경되는 데이터는 AOF로 백업한다. 

    Redis는 싱글 스레드로 동작

    • 레디스(Redis)는 싱글 스레드(single-threaded)로 동작하는 인메모리 데이터베이스이다.
    • 이것은 Redis가 모든 요청을 처리하는 데 하나의 스레드만 사용한다는 것을 의미하며, 이러한 설계 결정은 Redis가 매우 빠르게 작동하고, 간단하면서도 효율적인 방식으로 데이터를 처리할 수 있도록 한다.

    즉, Redis는 동시에 하나의 명령만 처리할 수 있기에 각 요청을 순차적으로 처리하며 동시에 여러 요청을 처리할 수 없다.

     

    장점

    1️⃣ 스레드 간의 컨텍스트 전환 오버헤드가 없기 때문에 메모리를 효율적으로 사용할 수 있다.

    2️⃣ 스레드 간의 동기화 문제가 없기 때문에 쉽게 확장할 수 있다. 

     

    단점

    1️⃣ 싱글 스레드이기에 전체 데이터 스캔과 같은 오버헤드가 큰 명령어를 처리하는 동안 다른 명령어를 처리가 불가하다.

    2️⃣ 단일 스레드에서 실행되므로 해당 스레드가 실패하면 서버 전체가 영향을 받을 수 있다. 

    💡MySQL🍀


    특징

    • 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)으로서, 데이터를 테이블과 열(Column)로 구조화하여 저장한다.
    • ACID 트랜잭션을 지원하여 데이터의 일관성과 무결성을 보장한다.
    • 다양한 저장 엔진과 스토리지 엔진을 지원하여 다양한 용도로 사용할 수 있다.

    사용 시기

    ✅ 웹 애플리케이션, 전통적인 엔터프라이즈 시스템, 온라인 쇼핑몰, 블로그 플랫폼 등의 다양한 애플리케이션에 적합하다.
    ✅ 트랜잭션 처리와 데이터 일관성이 중요한 경우 사용된다.

     

    장점

     

    1️⃣ 무료로 사용할 수 있고 널리 지원되는 오픈 소스 데이터베이스다.

    2️⃣ 다른 데이터베이스보다 빠르고 저렴하며 안정적인 고유한 스토리지 엔진 아키텍처가 있다. 

    3️⃣ 뷰, 트리거 및 저장 프로시저를 사용하여 개발자에게 더 높은 생산성을 제공한다. 

    4️⃣ 대부분의 운영 체제에서 단 하나의 명령으로 쉽게 설치할 수 있다. 

    5️⃣ 널리 사용되고 지원되므로 도움말과 리소스를 쉽게 찾을 수 있다. 

    6️⃣ 더 많은 기능을 제공하는 데 사용할 수 있는 다양한 도구와 플러그인이 있다.

     

    단점

     

    1️⃣ MySQL은 복잡하고 강력할 수 있으므로 소규모 애플리케이션에 적합하지 않을 수 있다.

    : MySQL은 매우 강력하고 복잡한 데이터베이스 시스템이기 때문에, 간단한 소규모 애플리케이션에는 부담이 될 수 있다. 작은 규모의 프로젝트에는 더 간단하고 가벼운 데이터베이스가 적합할 수 있다.

    2️⃣ 애플리케이션이 MySQL로 구축되면 기본 데이터베이스 또는 배포를 변경하기 어려울 수 있다.

    MySQL로 애플리케이션을 구축한 후에는 다른 데이터베이스로의 변경이 어려울 수 있다. MySQL에 의존하는 애플리케이션을 다른 데이터베이스로 전환하려면 코드를 다시 작성하고, 데이터 이전 및 호환성 문제를 해결해야 할 수 있다.

     

    3️⃣ MySQL은 PostgreSQL과 같은 일부 다른 데이터베이스만큼 기능이 풍부하지 않을 수 있다. 

    PostgreSQL과 같은 다른 데이터베이스 시스템에 비해 MySQL은 기능이 상대적으로 제한적일 수 있다. 특히 고급 기능이나 특정 작업에 필요한 확장성 측면에서 MySQL이 부족할 수 있다. 

     

    💡Oracle


    특징

    • 대규모 엔터프라이즈 환경에서 사용되는 고성능 관계형 데이터베이스 시스템(RDBMS)이다.
    • 데이터의 일관성과 안정성을 보장하기 위해 ACID 트랜잭션을 지원한다.
    • 고가용성, 데이터 보안, 백업 및 복구 기능 등의 기능을 제공한다.

    사용 시기

    ✅ 대규모 엔터프라이즈 시스템, 금융 기관, 은행, 정부 기관 등에서 보안과 안정성이 중요한 경우 사용됩니다.
    ✅ 대규모 데이터 처리 및 안정성을 요구하는 비즈니스 애플리케이션에 적합합니다.

     

    💡PostgreSQL


    특징

    • 오픈 소스 관계형 데이터베이스 시스템(RDBMS)으로서, 다양한 기능과 확장성을 제공한다.
    • ACID 트랜잭션을 지원하여 데이터 일관성과 무결성을 보장한다.
    • JSON 데이터 형식을 지원하여 NoSQL과의 통합이 가능하다. 

    사용 시기

    ✅ 웹 애플리케이션, 데이터 웨어하우스, 지리 정보 시스템(GIS), 과학 및 연구 분야 등 다양한 분야에서 사용된다. 

    ✅ 데이터 일관성과 안정성이 중요하며, 다양한 기능과 확장성이 필요한 경우 사용된다.

     

     

    자료출처

    https://sihyung92.oopy.io/database/redis/1

     

    레디스Redis가 뭐에요? 레디스 설치하기, 레디스 튜토리얼

    서문. 레디스가 뭔가요?

    sihyung92.oopy.io

    https://easyitwanner.tistory.com/158

    728x90

    'DB' 카테고리의 다른 글

    RDMS와 NoSQL  (1) 2024.02.07
    정규화(특징,목적,형태)  (1) 2024.02.05
    DB개념 - 용어 정리  (0) 2024.02.05
    Comments