[DB] SQL과 NoSQL 개념

2023. 7. 2. 23:14Database/MySQL

🔎들어가기 전


관계형 데이터베이스 vs 비관계형 데이터베이스
SQL 기반 데이터베이스 vs. NoSQL 기반 데이터베이스
관계형 데이터베이스 vs. NoSQL
SQL vs. NoSQL

같은 듯 다른 말로 느껴지는데 각각 무슨 차이가 있는 걸까?
SQL이 뭐고 NoSQL이 뭔지는 알지만 위 비교문들이 각각 같은 의미인지 다른 의미인지에 대해
헷갈려서 확실하게 공부하기 위해 포스팅을 하게 되었다.

이번에는 관계형 데이터베이스와 비관계형 데이터베이스에 대해 중점적으로 포스팅해보려고 한다.

Chapter 1. 관계형 데이터베이스가 있다.


  • 관계형 데이터베이스에서는 테이블의 구조와 데이터 타입 등을 사전에 정의
  • 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입 가능
  • 테이블의 관계가 구조화된 데이터의 모음이기 때문에 구조화된 쿼리 언어를 사용할 수 있다.
  • 여기서 구조화된 쿼리 언어가 즉 SQL이다 따라서 관계형 데이터베이스와 상호작용할 때 SQL 사용이 가능하다.
  • 특정한 형식을 지키기 때문에, 데이터를 정확히 입력했다면 데이터를 사용 수월
  • 또한, 관계형 데이터베이스에서는 테이블 간의 관계를 직관적으로 파악할 수 있다.

관계형 데이터베이스 종류는 뭐가 있나?

아래와 같다.

  • MySQL
  • Oracle
  • SQLite
  • MariaDB
  • PostgresSQL

관계형 데이터베이스를 SQL이라고도 할 수 있나?

대답은 YES!

SQL은 관계형 데이터베이스 전용 프로그래밍 언어이다.
또한, RDBMS 프로그램에서 기본적인 SQL을 지원한다.

관계형 데이터베이스 시스템을 위해 만들어진 SQL이라는 언어를 사용 하므로 (문법은 조금씩 상이) 관계형 데이터베이스를 SQL이라고 부를 수 있다.

그래서 결론은 관계형 데이터베이스를 SQL이라고도 부른다.

Chapter 2. 비관계형 데이터베이스도 있다.


비관계형 데이터베이스란 관계형 데이터베이스를 뺀 나머지 유형이라고 할 수 있다.
관계형 데이터베이스를 SQL이라고 하고 비관계형 데이터베이스는 NoSQL이라고 한다.

NoSql 약자에 대해
NoSQL, Not Only SQL, Non-Relational Operational Database SQL로 엇갈리는 의견들이 있다.

이 중 어느 것이 맞을까?

현재 Not Only SQL로 통용되고 있다.
이 말의 의미는 기존의 관계형 DBMS가 갖고있는 특성 뿐만 아니라 다른 특성들을 부가적으로 지원한다는 것이다.

실제로 Nosql을 관계형 DB처럼 쓸 수는 있긴 하다.

아무튼 NoSql의 약자는 No! SQL이 아니라
Not Only SQL 의 약자로, RDBMS와 같은 관계형 DB가 아닌 다른 형태의 데이터 저장 기술이다.

  • NOSQL의 경우 sorting, join, grouping, index 매우 취약해서 로그 쌓기나 단순 작업에 적합하다.

비관계형 데이터베이스 종류는 뭐가 있나?

1. Key-Value 타입 Redis, Dynamo

  • 속성을 Key-Value의 쌍으로 나타내는 데이터를 배열의 형태로 저장한다.
    여기서 Key는 속성 이름을 뜻하고, Value는 속성에 연결된 데이터 값을 의미한다.
    Redis, Dynamo 등이 대표적인 Key-Value 형식의 데이터베이스이다.

2. 문서형(Document) 데이터베이스 MongoDB

  • 데이터를 테이블이 아닌 문서처럼 저장하는 데이터베이스를 의미한다.
    많은 문서형 데이터베이스에서 JSON과 유사한 형식의 데이터를 문서화하여 저장한다.
    각각의 문서는 하나의 속성에 대한 데이터를 가지고 있고, 컬렉션이라고 하는 그룹으로 묶어서 관리한다.
    대표적인 문서형 데이터베이스에는 MongoDB 가 있다.

3. Wide-Column Store 데이터베이스 Cassandra, HBase

  • 데이터베이스의 열(column)에 대한 데이터를 집중적으로 관리하는 데이터베이스이다.
    각 열에는 key-value 형식으로 데이터가 저장되고, 컬럼 패밀리(column families)라고 하는 열의 집합체 단위로 데이터를 처리할 수 있다.
    하나의 행에 많은 열을 포함할 수 있어서 유연성이 높다.
    데이터 처리에 필요한 열을 유연하게 선택할 수 있다는 점에서 규모가 큰 데이터 분석에 주로 사용되는 데이터베이스 형식이다.
    대표적인 wide-column 데이터베이스에는 Cassandra, HBase 가 있다
  1. 그래프(Graph) 데이터베이스 Neo4J, InfiniteGraph
  • 자료구조의 그래프와 비슷한 형식으로 데이터 간의 관계를 구성하는 데이터베이스이다.
    노드(nodes)에 속성별(entities)로 데이터를 저장한다.
    각 노드간 관계는 선(edge)으로 표현한다.
    대표적인 그래프 데이터베이스에는 Neo4J, InfiniteGraph 가 있다.

chapter 3. 관계형 DB와 비관계형 DB차이?

✍️데이터 저장(Storage) 방식이 다르다.

관계형 데이터베이스는 SQL을 이용해서 데이터를 테이블에 저장한다.
또한 관계를 통해 각 데이터를 중복없이 한번만 저장할 수 있고, 따라서 데이터 무결성이 보장된다.
스키마를 미리 알고 계획해야하고 join 문이 많은 매우 복잡한 쿼리가 만들어질 수 있다.
즉, 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장해야 한다.

하지먄, NoSQL은 key-value, document, wide-column, graph 등의 방식으로 저장한다.
스키마가 없기 때문에 유연성이 높고, 저장된 데이터를 언제든지 조정하고 새로운 필드를 부담없이 추가할 수 있다.
또한, 애플리케이션에 필요한 형식으로 저장되고, 이렇게 하면 당연히 데이터를 가져오는 속도도 빨라진다.
대신 각 데이터에 대한 중복이 될 수 있어서 어떤 데이터가 수정되어야한다면 관련 데이터를 모두 각 컬렉션에 들어가서 확인해서 수정해야 하는 불편함이 있다.

✍️ 확장성(Scalability)

SQL 기반의 관계형 데이터베이스는 수직적으로 확장이 가능하다.

  • 높은 메모리, CPU를 사용하는 확장
  • 데이터베이스가 구축된 하드웨어의 성능을 많이 이용하기 때문에 비용이 많이 든다.
  • 여러 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만, 매우 복잡하고 시간이 많이 소모된다.

NoSQL로 구성된 데이터베이스는 수평적으로 확장한다.

  • 보다 값싼 서버 증설, 또는 클라우드 서비스 이용하는 확장이라고도 한다.
  • NoSQL 데이터베이스를 위한 서버를 추가적으로 구축하면, 많은 트래픽을 보다 편리하게 처리할 수 있다.
  • 저렴한 범용 하드웨어나 클라우드 기반의 인스턴스에 NoSQL 데이터베이스를 호스팅할 수 있어서, 수직적 확장보다 상대적으로 비용이 저렴하다.

chapter 4. 그럼 둘 중에 뭐가 더 좋을까?

대답은 '둘 다 상황에 따라 다르다'!
관계형, 비관계형 데이터베이스를 모두 사용하여 서비스에 맞게 설계하는 것이 베스트이다.
NoSQL 기반의 비관계형 데이터베이스가 확장성이나 속도면에서 더 뛰어나다.
테이블끼리 따로 조인하지 않아도 데이터를 모두 가져올 수 있기 때문에 ?

그러나 고차원으로 구조화된 SQL 기반의 데이터베이스가 더 좋은 성능을 보여주는 서비스도 있다.
따라서 정답은 없다. 여러 사용 사례를 살펴보고 적절한 데이터베이스를 선택하는 것이 중요하다.

그럼 각각의 사례에 맞는 적절한 데이터 베이스는 어떻게 선택하지?

Chapter 5. 관계형 DB는 언제써야 좋을까?

데이터베이스의 ACID 성질을 준수

  • ACID란 데이터베이스에서 실행되는 하나의 트랜잭션(Transaction)에 의한 상태의 변화를 수행하는 과정에서, 안전성을 보장하기 위해 필요한 성질이다.
  • SQL을 사용하면 데이터베이스와 상호 작용하는 방식을 정확하게 규정할 수 있기 때문에, 데이터베이스에서 데이터를 처리할 때 발생할 수 있는 예외적인 상황을 줄이고, 데이터베이스의 무결성을 보호할 수 있다.
  • 전자 상거래를 비롯한 모든 금융 서비스를 위한 소프트웨어 개발 에서는 반드시 데이터베이스의 ACID 성질을 준수해야 한다

데이터가 구조적이고 일관적인 경우

Chapter 6. 비관계형 DB는 언제써야 좋을까?

  • 소프트웨어 개발에 정형화 되지 않은 많은 양의 데이터가 필요한 경우, NoSQL을 적용하는 것이 더 효율적일 수 있다.
    대부분의 NoSQL 데이터베이스는 저장할 수 있는 데이터의 유형에 제한이 없기 때문에 필요에 따라, 언제든지 데이터의 새 유형을 추가할 수 있다.
  • 정확한 데이터 요구사항을 알 수 없거나 관계를 맺고 있는 데이터가 자주 변경(수정)되는 경우
  • 읽기(read)처리를 자주하지만, 데이터를 자주 변경하지 않는 경우 (즉, 한번의 변경으로 수십 개의 문서를 수정 할 필요가 없는 경우)
  • 데이터베이스를 수평으로 확장해야 하는 경우 ( 즉, 막대한 양의 데이터를 다뤄야 하는 경우, 읽기/쓰기 처리량이 큰 경우)