[데이터베이스] DB 어떤 걸 써야 할까?

James·2024년 2월 7일
0
post-thumbnail

  • Oracle
  • MySql
  • MongoDB
  • Redis
  • PostgreSQL

Oracle


  • 미국 오라클(Oracle)사의 관계형 데이터베이스 관리 시스템(RDBMS)
  • 오픈소스 DBMS가 있음에도 안정성과 유지보수를 보장 받을 수있다는 장점 때문에 비 IT업종 기업에서 많이 사용한다.

특징

  • 기업용으로 주로 사용
  • 대량의 정보관리를 할 때 타 DBMS에 비해 좋은 성능을 보인다.
  • 오라클 자체 SQL 쿼리를 사용해 표준 형식과 약간 다름

MySql


관계형 데이터베이스 관리 시스템(RDMS)
오픈 소스이며, 다중 사용자와 다중 스레드 지원

특징

  • 오픈 소스 라이선스를 따르기 때문에 무료로 사용 가능
    표준 SQL 형식 사용
  • 오픈 소스이기 때문에 기술 지원의 한계가 있음

MongoDB

크로스 플랫폼 도큐먼트 지향 데이터베이스 시스템
NoSQL 데이터베이스

특징

  • ACID 대신 BASE를 택해 성능과 가용성을 우선시함
  • 모든 데이터가 JSON 형태로 저장, 스키마가 없음
  • 다양한 인덱싱 제공
  • 일관성이 매우 중요한 작업에는 사용하기 힘들다

Redis


Remote Dictionary Server의 약자
Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비 관계형 데이터베이스 관리 시스템
모든 데이터를 메모리로 불러와서 처리하는 메모리 기반 DBMS

분산형 환경에서의 장점

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

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

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

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️⃣ 단일 스레드에서 실행되므로 해당 스레드가 실패하면 서버 전체가 영향을 받을 수 있다.

특징

  • 데이터를 메모리에 저장 하기때문에 속도가 빠른 읽기 쓰기 작업
  • 다양한 데이터 구조를 지원하면서, 주로 Key-Value형태의 데이터 모델을 사용
    • 문자열, 리스트, 해시, 셋, 정렬된 셋과 같은 다양한 자료구조의 지원
  • Pub/Sub 메세징 시스템을 지원하여 실시간 데이터 처리에 적합하다.
  • 최고의 성능이 필요한 웹, 모바일, 게임, 광고 기술 및 IoT 애플리케이션에서 널리 사용

PostrgreSQL


오픈 소스 객체-관계형 데이터베이스 시스템 (ORDBMS)
macOS 서버의 경우 기본 데이터베이스로 사용된다.

  • 북미나 일본에서 많이 사용

특징

  • 초기 개발 단계부터 완벽한 ACID와 MVCC를 지원하는 아키텍처로 설계
  • 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 SQL 차원에서 제공
  • 테이블 상속 기능을 이용해 하위 테이블 생성 가능
  • 오픈 소스임에도 상용 RDBMS급의 기능을 제공
  • 기본적인 CRUD 성능이 경쟁 DB에 비해 좋지 않다.

결론

위 내용들을 하나하나 정리해보면서 규모가 크면 보통 Oracle을 사용하는 게 좋아 보이고, 소규모라면 SQLite가 적합하지 않나 생각했다.

나머지 DBMS는 각각 장단점이 있어 개발자가 편한 대로 사용하면 될 듯하다.

profile
의미있는 성장의 태도, 긍정적인 사고를 지닌 Deveolper

0개의 댓글