TIL

🗄️다양한 DB들 뭐가 뭔지 알아보자

초비비 2025. 2. 26. 23:51

 

이번에 프로젝트를 하면서 PostgreSQL를 사용해야했다.
근데 왜 PostgreSQL일까 이 아이는 MySQL과 뭐가 다를까 궁금해짐!
그래서 오늘은 DB들에 대해서 정리를 해보고자 한다.

 

📌 데이터베이스 선택은 애플리케이션의 성능, 기능 및 확장성에 큰 영향을 미칠 수 있음
데이터 관리의 효율성을 높이고 유지 관리 비용을 줄이며 최종 사용자에게 더 나은 서비스 제공하는데 기여

데이터 베이스 선택 시 고려할 사항

  1. 지원되는 데이터 유형
  2. 인덱싱
    • 데이터 검색 속도
  3. 동시성 제어
    • 잠금 : 여러 사용자가 동일한 데이터를 동시에 수정하지 못하도록 제한
    • 낙관적 동시성 제어 : 동시 데이터 액세스를 허용하지만 변경 사항을 커밋하기 전에 충돌을 확인
  4. 확장성
  5. 기본 복제본 구성
  6. ACID 규정 준수

SQL vs NoSQL

SQL NoSQL
관계형 비관계형
구조화 쿼리(SQL) 사용, 미리 정의된 스키마 구조화되지 않은 데이터를 위한 동적 스키마
수직적 확장 수평적 확장
테이블 기반 문서, 키-값, 그래프 또는 와이드 컬럼 스토어
다중 행 트랜잭션에 적합 문서나 JSON과 값은 비정형 데이터에 적합
MySQL, PostgreSQL, Oracle, SQL Server, Microsoft SQL Server MongoDB, Cassandra, Couchbase, Amazon DynamoDB, Redis
  • NoSQL : 웹 애플리케이션을 위해 빠르고 확장 가능하며 안정적인 데이터베이스가 필요한 경우
  • SQL : 애플리케이션에 복잡한 데이터 쿼리와 트랜잭션 지원이 필요한 경우

MySQL

오픈 소스 기반의 RDBMS로 가장 많이 사용하는 데이터베이스
Oracle에 인수된 이후에도 오픈 소스 커뮤니티 버전과 상용 엔터프라이즈 버전으로 나뉘어 개발

  • 뛰어난 성능, 안정성 제공
  • 데이터의 무결성과 일관성을 보장
  • 설치와 구성이 간편하고 초기 설정이 비교적 쉬움
  • 다양한 스토리지 엔진(InnoDB, MyISAM 등) 선택 가능
  • Windows, Linux, MacOS 등 다양한 운영 체제에서 사용 가능
  • 웹 애플리케이션과 서버에서 주로 사용
    • PHP, Java, Python, C++ 등 다양한 프로그래밍 언어와 호환
  • 강력한 데이터 보안 기능 제공
    • SSL 암호화, SHA-256 인증, 액세스 제어 목록(ACL) 등을 포함한 다양한 보안 메커니즘을 지원
  • 단점
    • 대규모 트랜잭션 처리에는 다소 한계가 있을 수 있으며 복잡한 쿼리를 처리하는 데 있어 일부 불편함이 있을 수 있음
      : 최신 버전의 MySQL(특히 8.0 이상)은 트랜잭션 처리 성능이 상당히 개선되었다고 하지만, PostgreSQL에 비해 고급 트랜잭션 기능(예: MVCC 구현 방식)이 덜 정교할 수 있다고 
    • 데이터 복구 기능이 다른 사용 데이터베이스에 비해 떨어질 수 있음

PostgreSQL

오픈 소스 기반의 고급 기능을 제공하는 객체 관계형 데이터베이스 관리 시스템 (ORDBMS)

  • 지리 정보 시스템(GIS) 및 공간 데이터 처리를 위한 PostGIS 확장 지원
  • JSON/JSONB 데이터 타입으로 NoSQL 스타일 문서 저장 가능
  • 복잡한 쿼리, 다양한 데이터 타입, 저장 프로시저, 뷰, 트리거, 트랜잭션 등 풍부한 기능 제공
  • 사용자 정의 함수, 연산자, 데이터 타입 등을 통해 데이터베이스를 확장할 수 있음
    • 표준 SQL을 완벽하게 지원하며 호환성이 높다
  • 더 강력한 동시성 제어 및 MVCC(다중 버전 동시성 제어) 구현
    • MVCC를 통해 높은 동시성 처리가 가능하며, 트랜잭션의 일관성을 보장
  • 복잡한 데이터 타입(배열, 범위 타입 등) 및 전체 텍스트 검색 내장
  • 단점
    • 다양한 기능과 확장성 때문에 학습 곡선이 다소 가파를 수 있음
    • 설치 및 설정이 MySQL에 비해 다소 복잡하고 리소스 사용량(메모리, CPU)이 더 높을 수 있음
    • 읽기 작업 중심의 단순한 애플리케이션에서는 오버헤드가 발생할 수 있어 과도한 기능일 수 있음

Redis

NoSQL 중 오픈 소스 기반의 인 메모리 데이터베이스

  • 키-값 형태의 데이터 저장 및 관리에 특화
  • 메모리에 데이터 저장
    • 매우 빠른 읽기, 쓰기 성능 제공
    • Redis 6.0부터 다중 스레드 I/O 지원으로 성능이 더욱 향상됨
    • 문자열, 리스트, 세트, 해시 등 다양한 데이터 타입을 지원
  • 주로 캐싱, 세션 관리, 메시징 시스템 등에 활용
    • 데이터의 영속성을 위해 디스크에 데이터를 저장하는 옵션 제공
  • Pub/Sub 메시징 시스템 지원으로 실시간 애플리케이션에 적합
  • Lua 스크립팅 기능 제공으로 복잡한 원자적 작업 구현 가능
  • 클러스터 모드 지원으로 데이터 분산 저장 및 고가용성 확보 가능
  • 단점
    • 데이터가 메모리에 저장되므로, 물리 메모리 용량이 한계가 있을 수 있음
    • 복잡한 쿼리를 지원하지 않음

MongoDB

NoSQL 기반의 문서 지향적인 데이터베이스

  • JSON 형식의 문서를 저장하고 관리
  • 스키마 없는 유연한 데이터 모델
    • 동적으로 데이터 구조가 변하는 경우에 유리
    • 데이터의 분산 저장 및 처리가 가능하여 대용량 데이터를 효율적으로 처리 가능
  • 다양한 데이터 타입과 복잡한 데이터 구조 지원
  • 주로 대용량 데이터와 실시간 데이터 처리에 적합
    • 클라우드 환경과 인터넷 기반 서비스에서 많이 사용됨
  • 데이터를 여러 서버에 분산하여 저장하는 샤딩(Sharding) 기능으로 수평적 확장이 용이함
  • 복잡한 집계 작업을 처리할 수 있는 애그리게이션 프레임워크와 MapReduce로 데이터 분석 기능 제공
  • 단점
    • 전통적인 RDBMS에 비해 제한적인 트랜잭션 지원
      • MongoDB 4.0 이후에는 다중 문서 트랜잭션도 지원하기 시작했다고 함
    • RDBMS만큼의 높은 데이터 무결성을 보장하지 않음