DB

SQL VS NoSQL 차이 및 MongoDB란?

Code Maestro 2023. 5. 25. 00:00
728x90

※ 패스트캠퍼스의 대용량 데이터 & 트래픽 처리 초격차 패키지 강의 내용을 정리한 글입니다.

1. SQL vs NoSQL

현대의 서비스는 너무 복잡해졌고, 다양한 형태의 데이터를 저장해야 한다. 

 

예를 들어서 테이블 형태로 저장해보면. SNS가 인스타그램, 트위터 등. 각각 다르기에 문제가 발생한다. 

 

이런식으로 빈칸이 발생한다. 그러므로 표현이 어렵고, 관리하는 게 힘들다. 그래서 보통 관계형은 정규화를 통해서 이런 문제를 해결한다.

 

그러나 이러면 단점이 많이 생긴다. 

 

  1. 하나의 레코드를 확인하기 위해 여러 테이블을 Join하여 가시성이 떨어진다.
  2. 스키마가 엄격해서 변경에 대한 관련 사람이 많이 필요하다. 
  3. 너무 많은 테이블을 조인하면 성능이 떨어진다. 

 

반면 이러한 SQL을 NoSQL로 만들면 아래와 같은 장점이 있다.

  1. 데이터 중복 방지
  2. Join 성능이 좋음
  3. 복잡하고 다양한 쿼리 가능
  4. 잘못된 입력 방지

2. Scaling

데이터 양이 늘어나면 하드웨어의 제한적인 리소스들 때문에 사용자의 요청을 감당하지 못하는 경우가 발생한다. 이런 문제를 해결하기 위해서 하드웨어의 리소스를 늘리는 방법이 있다. 

출처:https://blog.router-switch.com/2021/03/what-is-the-difference-between-scale-up-and-scale-out/

Scale-Up, 수직 확장은 하드웨어를 업그레이드 하는 걸 의미한다. 해당 서버의 용량을 추가하거나, cpu 혹은 메모리를 추가하여 현재의 하드웨어 성능을 향상 시킨다. 예전에는 데이터 양이 늘어나면 Scale-Up 위주로 확장했다. 

출처:https://blog.router-switch.com/2021/03/what-is-the-difference-between-scale-up-and-scale-out/

반면 Scale-Out, 수평 확장은 데이터와 트래픽을 분산시키는 것을 의미한다. 그러나 설정이 어렵고 Mysql 외부 서드파티 솔루션 사용하거나, 애플리캐이션 단위에서 사용한다. 애플리케이션에서 하려면 정말 번거로운 일을 해야 한다. 코드단에서 수정해야 하는 불편함이 있다. 이런 불편함 때문에 mongoDB 넘어가는 분위기이다.

 

3. NoSQL의 등장

애초에 DB는 복잡하게 왜 설계됐을까?

 

관계형 DB는 1970년대부터 사용됐는데 당시 Disk Storage가 매우 고가의 제품이라 데이터 중복을 줄이는 데 집중을 했었다.

출처:https://www.pentaxforums.com/forums/14-general-talk/169822-what-5mb-hard-drive-looked-like-1956-note-required-forklift.html

이게 5mb밖에 안 돼서, 이로 인해 많은 제약이 있었다.

 

근데 이제는 데이터의 양이 많아지고, 하드웨어가 발전하여 RDBMS 불편함이 생겼다. 그리고 이를 NoSQL 해결한다. 

 

NoSQL은 Not SQL, Not OnlySQL약자이다.

 

출처: microsoft

관계형 DB 하지 못했거나, 어려운 쉽게 해결하는 설계된 DB이다. 절대 관계형 DB 대체한다고 생각하면 되고, 함께 사용한다. 서비스 요구 사항에 맞게 선택해서 사용하고, 크게 4가지로 분류된다. 여기서 깊게 들어가면 Elastic Search 검색엔진이랑 타임 시리즈가 있다.

 

관계형은 테이블로 데이터 표현한다. 반면 mongo 도큐먼트로 데이터 표현하고, 보통 도큐먼트는 JSON 형태로 표현한다. 기존 RDBMS에서 하지 못했던 배열로 표현을 하거나, 내장된 도큐먼트로 데이터를 표현해서 가시성이 좋다.

 

 

 

 

 

조인없이 하나의 도큐먼트로 모든 정보를 조회가 가능해서 응답 속도가 빠르다. 또한 유연해서 데이터 모델을 App의 요구사항에 맞게 데이터를 수용할 수 있다. 규칙이 없어서 필드를 추가하거나 삭제하는 변경이 적다. 특히 가시성이 좋다 장점이다. 이에 개발적인 측면에서 매우 편리하다.

 

그러나 단점은 중복이 발생하고, 스키마 설계를 잘못하면 성능 저하가 발생한다. 

 

출처:https://www.mongodb.com/basics/sharding

무엇보다 NoSQL은 분산(Scale out)이 간편하다. HA와 Sharding에 대한 솔루션을 자체적으로 지원하기에 Scale-Out이 간편하다. 확장 시 애플리케이션에서 신경써줘야 할게 거의 없어진다. 이런 관점에서 대용량 데이터 처리가 편리하다.

 

4. NoSQL의 종류

1) Document Store

출처:https://www.geeksforgeeks.org/types-of-nosql-databases/

JSON 객체와 비슷한 문서에 DB를 저장한다. 각 문서에는 필드와 값의 쌍이 포함됐고, 일반적으로 값은 문자열, 숫자 등 데이터 유형이 다양하다. 다양한 필드 값 유형과 강력한 쿼리 언어 때문에 다양한 곳에서 사용되며, 보통 MongoDB가 대표적이다. 

2) Key-Value Store

출처:https://www.geeksforgeeks.org/types-of-nosql-databases/

NoSQL DB 중에서 가장 간단하고, 데이터가 Key-Value 쌍 컬렉션으로 표현된다. 단순한 구조라서 속도가 빠르며 분산 저장 시 좋다. 대량의 데이터를 저장해야 하지만, 검색을 위해 복잡한 쿼리를 수행할 필요가 없는 곳에서 적합하다. 

 

보통 Redis가 대표적이다. 

3) Wide-Column Store

출처: 마이크로소프트

단일 열 내부에 중첩 키/값 쌍 세트로 저장이 된다. 각 행이 동일한 열을 가질 필요가 없다는 측면에서 뛰어난 유연성을 가진다. 보통 2차원적 키-값 데이터베이스로 생각하는 사람들이 많다. 

 

대량의 데이터를 저장 시에 적합하고, 쿼리 패턴을 예측할 수 있다. 보통 사물인터넷 데이터와 사용자 프로필 데이터를 저장하는 데 사용한다.

 

보통 HBase가 대표적이다. 

4) Graph Store

출처:https://www.geeksforgeeks.org/types-of-nosql-databases/

데이터가 그래프 구조로 Node, Edge 및 데이터 속성으로 저장이 된다. Node에는 일반적으로 사람, 장소 및 사물에 대한 정보가 저장되고, Edge에는 노드 간의 관계에 관한 정보가 저장된다. 보통 소셜 네트워크, 권장 엔진 같은 패턴을 찾기 위해 관계를 검토해야 하는 곳에서 사용한다.

 

보통 Neo4jJanusGraph가 대표적이다.

 

5. MongoDB

출처:https://db-engines.com/en/ranking

트렌드를 확인할 수 있는 지표에서 MongoDB는 5위에 랭크될 정도로 많은 곳에서 사용된다.

 

Mongo DB는 Document DB에 있어서 강점을 가지는데 왜 인기가 많을까? 

 

바로 아래의 요소들 때문이다.

 

  • Schema가 자유롭다.
  • HA와 Scale-Out Solution을 자체적으로 지원하여 확장이 쉽다.
  • Secondary Index를 지원하는 NoSQL이다.
  • 다양한 종류의 Index를 제공한다.
  • 응답 속도가 빠르다.
  • 배우기 쉽고 간편하게 개발이 가능

종합해보면 MongoDB는 유연하고 확장성 높은 오픈소스 Document 지향 DB이다. 

 

 

참고 자료: MongoDB 공식 문서

728x90