본문 바로가기

ComputerScience/Database

[Database] RDB과 NoSQL

이미지 출처: https://www.upwork.com/mc/documents/RD-vs-NRD.png

SQL Database

SQL 데이터베이스는 Structured Query Language (SQL)의 이름을 딴 것으로, 관계형 데이터베이스 (Relational Database)라고도 합니다. 이는 데이터를 저장하는 더 엄격하고 구조화된 방법입니다.

관계형 데이터베이스 관리 시스템(RDBMS)은 SQL 쿼리를 실행하고 데이터를 검색하며, 데이터를 업데이트하거나 삭제하거나 새 레코드를 생성함으로써 데이터를 편집합니다.

SQL은 가벼운 선언형 언어로, 관계형 데이터베이스를 위한 서버 사이드 스크립트의 버전으로 작동합니다.

관계형 데이터베이스는 잘 알려져있는 만큼 문제가 발생했을 때 해결하기 위한 레퍼런스가 많습니다.

SQL의 특별한 장점 중 하나는 간단하지만 강력한 JOIN 절로, 이것은 단일 명령으로 여러 테이블에 저장된 관련 데이터를 검색합니다.

 

RDBMS 예시

 

  • Oracle: C++ 언어로 작성된 객체-관계형 DBMS입니다. 예산이 충분하다면, 고객 서비스와 신뢰성이 좋은 전체 서비스 옵션입니다. Oracle은 Oracle NoSQL 데이터베이스도 출시했습니다.
  • MySQL: 가장 인기 있는 오픈소스 데이터베이스로, CMS 사이트와 블로그에 탁월합니다.
  • Google Cloud SQL: Google을 통해 제공되는 MySQL, PostgreSQL, SQL Server을 위한 완전 관리형 관계형 데이터베이스 서비스입니다.
  • Sybase: 주로 Unix OS에서 사용되는 기업용 관계 모델 데이터베이스 서버 제품으로, Linux를 위한 첫 엔터프라이즈 수준의 DBMS입니다.
  • Amazon RDS: Amazon RDS for SQL Server는 클라우드에서 SQL Server 배포를 쉽게 설정, 운영, 확장할 수 있게 해줍니다.
  • Microsoft Azure: 모든 운영 체제를 지원하는 클라우드 컴퓨팅 플랫폼으로, 데이터를 한 곳에서 저장, 계산, 확장할 수 있게 해줍니다. 최근의 설문 조사에서는 기업 데이터 저장에 있어 Amazon Web Services와 Google Cloud Storage를 앞서는 것으로 나타났습니다.
  • MariaDB: MySQL의 향상된 버전입니다. MS SQL Server. SQL과 NoSQL 아키텍처를 모두 지원하는, Microsoft가 개발한 엔터프라이즈 수준의 RDBMS입니다.
  • PostgreSQL: 엔터프라이즈 레벨의 객체-관계형 DBMS로 SQL 수준의 코드 외에도 Perl과 Python과 같은 절차적 언어를 사용합니다.

NoSQL Database

NoSQL 데이터베이스, 또는 "non SQL" 또는 "not only SQL"로도 알려져 있으며, 데이터를 관계형 테이블 형식이 아닌 다른 형식으로 저장합니다.

데이터 요구 사항이 처음부터 명확하지 않거나, 대량의 비구조화된 데이터를 다루는 경우, 더 큰 유연성을 제공하는 비관계형 데이터베이스를 사용하게 됩니다.

NoSQL 데이터베이스는 테이블 대신 문서 지향적입니다.

그들은 모든 유형의 관련 정보를 수집하지만 반드시 데이터를 분류하지는 않는 파일 폴더와 더 비슷합니다.  

이는 NoSQL 데이터베이스를 더 직관적으로 만듭니다.

 

NoSQL 데이터베이스 예시

 

  • MongoDB. 스타트업들 사이에서 가장 인기 있는 NoSQL 시스템입니다. Craigslist, eBay, Foursquare 등의 사이트 백엔드에서 사용되는 JSON과 유사한 동적 스키마의 문서 지향 데이터베이스입니다. 오픈소스이며 무료로 제공되며, 고객 서비스가 좋습니다.
  • Apache의 CouchDB: 이것은 진정한 웹용 DB입니다. JSON 데이터 교환 형식을 사용하여 문서를 저장하고, JavaScript를 이용하여 문서를 색인화, 결합, 변형하며, HTTP를 API로 사용합니다.
  • Redis: 인기 있는 키-값 데이터베이스입니다.
  • Riak: Erlang으로 작성된 오픈소스 키-값 저장 데이터베이스입니다. 내장된 장애 허용 복제와 자동 데이터 분배로 뛰어난 성능을 제공합니다.
  • Apache HBase: 하둡의 일부로 개발된 또 다른 Apache 프로젝트로, 이 오픈소스 NoSQL DB는 자바로 작성되었으며 BigTable과 유사한 기능을 제공합니다.
  • Oracle NoSQL: Oracle의 NoSQL 카테고리 진입작입니다.
  • Apache의 Cassandra DB: Facebook에서 탄생한 Cassandra는 대량의 구조화된 데이터를 처리하는 데 뛰어난 분산 데이터베이스입니다. 애플리케이션의 성장을 예상하고 있다면, Cassandra는 확장성이 뛰어납니다. 예를 들어, Instagram, Comcast, Apple, Spotify 등이 있습니다.
  • Firebase: Google이 지원하는 Firebase는 개발자가 실시간으로 데이터를 저장, 업데이트, 검색할 수 있게 하는 NoSQL 데이터베이스입니다. 모바일, 웹, 클라우드 애플리케이션에 데이터 저장 솔루션을 제공하는 크로스 플랫폼입니다.

NoSQL 데이터베이스는 데이터 모델에 기반한 다양한 유형으로 나뉩니다.

 

  1. Key-Value 저장소: 이 가장 단순한 NoSQL 옵션은 인덱싱된 키와 값으로 구성된 스키마 없는 방식으로 데이터를 저장합니다. 예시로는 Cassandra, Azure, LevelDB, Riak 등이 있습니다.
  2. Wide-column store: 와이드 컬럼 스토어는 데이터 테이블을 행이 아닌 열로 배열합니다. 단순히 뒤집힌 테이블이 아니라, 그 컬럼들은 탁월한 확장성과 높은 성능을 가능하게 합니다. 예시로는 HBase, BigTable, HyperTable 등이 있습니다.
  3. Document database: 키-값 개념에 더 많은 복잡성을 추가한 이 유형의 데이터베이스에서는 각 문서가 고유한 구조를 가지며, 특별한 키가 데이터를 검색하는 데 사용됩니다. 이는 문서 지향적이면서도 반정형화된 데이터를 저장, 검색, 관리하는데 좋은 선택입니다. 예시로는 MongoDB, CouchDB 등이 있습니다.
  4. Graph database: Graph database는 그래프로 가장 잘 표현되는 상호 연결된 데이터에 사용됩니다. 이 방법은 많은 복잡성을 다룰 수 있습니다. 예시로는 Polyglot, Neo4J 등이 있습니다.

SQL과 NOSQL의 차이

Topic SQL databases NoSQL databases
Data structure
and models
구조적 데이터에 적합 Make sense for less structured
data sets
Scaling 수직적 확장 수평적 확장
Scaling 데이터 쿼리에 대해 직관적 쿼리 실행이 복잡
Data storage 고정된 행과 열을 가진 테이블  여러 저장 모델이 있음
Performance 데이터 양이 증가함에 따라 초기에 더 큰 서버가 필요, 특정 데이터를 얻는 것에 성능이 좋음 필요에 따라 새로운 서버를 기존 서버에 추가할 수 있음, 대용량 데이터를 추출하는데 성능이 좋음
Popularity and ease of use 복잡한 쿼리에 적합 비구조화된 데이터에 대해 좋은 옵션

어떤 데이터베이스를 선택해야 하는가

SQL을 사용해야 하는 경우

 

  • ACID(Atomicity, Consistency, Isolation, Durability) 준수가 필요한 경우
    ACID 준수는 트랜잭션이 데이터베이스와 상호 작용하는 방식을 규정함으로써 이상현상을 줄이고 데이터 무결성을 보호합니다.
    ACID 준수에 따라, SQL 데이터베이스는 기본적으로 정규화를 지원해 개발자가 반복되는 레코드를 확인하고 제거함으로써 데이터 품질을 향상시키는 데 도움이 됩니다.

    일반적으로 NoSQL 데이터베이스는 유연성과 처리 속도를 위해 ACID 준수를 희생하지만, 많은 전자상거래와 금융 애플리케이션에서는 ACID를 준수하는 데이터베이스가 선호되는 옵션입니다. 데이터가 구조화되어 있고 변하지 않는 경우. 만약 비즈니스가 더 많은 서버를 요구하는 대규모 성장을 경험하고 있지 않고, 일관된 데이터로만 작업하고 있다면, 다양한 데이터 유형과 높은 트래픽 볼륨을 지원하기 위해 설계된 시스템을 사용할 이유가 없을 수 있습니다.

NOSQL을 사용해야 하는 경우

 

  • 서버 사이드 애플리케이션의 다른 구성 요소들이 빠르고 원활하게 작동할 수 있도록 설계되어 있는 경우
  • 구조가 거의 없거나 전혀 없는 대량의 데이터를 저장해야 하는 경우
  • NoSQL 데이터베이스는 저장할 데이터의 유형에 제한을 두지 않는 경우
    NoSQL 데이터 베이스는 필요에 따라 새로운 유형을 추가할 수 있게 해줍니다. 문서 기반의 데이터베이스를 사용하면, 데이터의 "유형"을 미리 정의하지 않고도 한 곳에 데이터를 저장할 수 있습니다.
  • 클라우드 컴퓨팅과 저장의 장점을 최대한 활용하기 위한 경우
    클라우드 기반 저장은 탁월한 비용 절감 솔루션이지만, 데이터를 여러 서버에 쉽게 퍼뜨려 확장할 수 있어야 합니다. NoSQL 데이터베이스는 기본적으로 여러 데이터 센터에서 확장될 수 있도록 설계되어 있어 큰 고민 없이 사용할 수 있습니다.
  • 2주짜리 Agile 스프린트 내에서 개발하거나, 빠른 반복을 진행하거나, 버전 간에 많은 다운타임 없이 데이터 구조에 자주 업데이트를 해야 하는 경우

StackOverFlow에서 사용하는 데이터베이스

StackOverflow는 SQL과 NoSQL 데이터베이스를 사용하고 있습니다.

StackOverflow의 SQL 데이터베이스는 질문, 답변, 댓글, 투표, 사용자 정보와 같은 핵심적이고 구조화된 데이터를 저장하는 역할을 합니다.

이 데이터베이스는 사용자 요구에 따라 확장 가능한 Microsoft SQL 서버에서 실행됩니다.

정보는 SQL 데이터베이스에서 빠르게 저장, 업데이트, 검색할 수 있어, StackOverflow가 거대한 사용자 기반의 요구를 지원할 수 있습니다. SQL 데이터베이스는 암호화와 인증을 포함한 여러 보안 기능을 제공하여 사용자 데이터를 안전하게 보호합니다.

 

또한, StackOverflow는 특정 정보를 빠르게 접근하게 해주는 캐싱을 위해 NoSQL 데이터베이스인 Redis를 사용합니다. 캐싱은 애플리케이션의 성능을 향상시키고, SQL 데이터베이스에 지속적으로 연결할 필요를 제거함으로써 비용을 절약합니다. StackOverflow는 API 호출, 세션 저장, 데이터베이스 쿼리, 그 외 복잡한 계산 등을 캐시할 수 있습니다.

참고 자료

https://www.upwork.com/resources/nosql-vs-sql