SQL vs NoSQL

욱2·2023년 4월 30일

MongoDb

목록 보기
3/4

NoSQL은 No SQL이 아니라 Not Only SQL 이다.

SQL (Structured Query Language)

  • 관계형(relational) db를 사용/조작/관리 하기 위한 프로그래밍 언어이다.
    여기서 언어는 Query 언어라서 자바 쪽 언어와 관련없는 언어이다.
    standardized language used for managing relational databases

  • relational db를 사용하는 mysql oracle 등 대부분 SQL 언어를 사용한다.

  • relational db system 과 대화가 표준화 되어있다.

기억하자 sql은 관계형db가 아니라 관계형db에서 사용되는 언어이다!
스프링과 자바기반이 한몸이듯 sql은 관계형db와 한몸이라서 sql을 설명하면 관계형db를 설명하는것과 같다고 볼수있다.


장정 :

  1. Data consistency: 일관성을 보장해준다. 관계형 db에서의 data는 contrainst기 많아서
    연결고리(primary key, foreign key)를 잘 만들어서 관리해야 한다. 이런 보장은 개발자에게 안심과 확실성은 준다. 우리가 framework를 좋아하는 이유처럼 말이다.

    SQL문은 모든 데이터가 잘 연결되도록 제약과 조건을 적용하여 정확하고 일관성 있게 유지시킵니다.

  2. Scalability : 확장성. 대규모 데이터 처리에 간편하다/특수되있다.

  1. Ease of use: 사용법. 생각보다 초보들도 사용가능하다. 다만 능숙하기 위해서는 어느정도 이해와 연습이 필요하다

  2. Data security: 보안성. Authentication encryption등 고급 보안기능 제공.

  3. Powerful querying: 쿼리의힘. 다양한 (필터 정렬 테이블결합)등의 퀴리 지원.


단점 :

  1. Defined : 모든 테이블마다 확실한 정의가 필요하며 한번 정의한 테이블의 제약과 조건은 누구보다 까다롭다. 그만큼의 관계성 유지에 효율이 좋지만, 유연성이 0% 라서 많이 힘들다. 그만큼 딱딱한 친구다.

  2. Evolution : 애초에 데이커가 커질수록 Schema디자인 굉장히 Complex해진다. 관 리는 물론 업그레이드에 있어서 매우 힘들다.

  3. Scalability: 장점이자 단점이다. 어느 순간까지는 데이터 처리가 빠르고 편리하지만 많아지는 제약과 조건, 테이블로 인해 performance적으로 문제가 될수있다

  • 전에는 vertical scaling 기본이였는데 이제는 horizontal scaling이 가능해서 단점이라고 볼순없다

NoSQL

  • 비관계형 데이터베이스
  • SQL기반 RDBMS을 조작하는 SQL개념 달리, NoSQL은 관계형(전통) 테이블 형식이 아닌 다른 형식을 제공해주는 데이터베이스다.
  • 그래서 NoSQL은 여러 데이터 저장 방식을 포함하며 각 모델(document, key-value, graph, and column-family models 등 )에 따라 쿼리 언어가 다를수있다.

장점 :

  1. Scalability: 확장성. 수평적으로 (서버늘리기) 확장할 수 있도록 설계 되어있어서 대량의 데이터와 트래픽 처리하기에 이상적이다

  2. Flexibility: 유연성: 강제적인 schema 요구가 없다. 다양한 데이터 유형과 구조를 처리할수있다.

  3. Performance: 고성능으로 최적화 되어있다. 낮은 지연시간 빠른 엑세스와 처리

  4. Productivity: 개발자들이 덜 고생함.


단점 :

  1. Limited query: 제한적 쿼리 : SQL에 비하면 쿼리가 부족하다. 복잡한 쿼리가 필요할때 제 기능을 못할수도 있다.

    최근 많이 발전중에 있다.

  2. Transaction: ACID 특정 지원을 안한다. 이제 많이 발전해서 이제는 많은 NoSql 에서 제공을 해줍니다!

  3. Data consistency: 데이터 일관성: 일관성 모델은 제공하지만 SQL보다 상대적으로 보장을 받진 않습니다. 일부 데이터 손실 또는 데이터 불일치가 발생할 수 있습니다.


SQL 과 NoSQL을 비교하는건 사실 이상한 이유라고 생각합니다.
애초에 목적이 다른 친구들을 비교할 수 있을까 싶다.

SQL은 고집이 쌔지만 꼼꼼하고 확실한 것을 좋아하는 친구고

NoSQL은 확장성과 고성능을 좋아하는 친구다.

둘다 장단점이 있으며 취향과 목적에 따라 사용된다.

개인적으로 NodeJs를 사용하는 초보개발자로서는 NoSQL인 MongoDB가 더 눈에 들어온다.

이유:

계속되는 발전: Transaction기능을 4.0부터 도입
전통적인 방법은 아니지만 SQL 흉내를 내려고 indexing querying data consistency를 포기하지 않은 부분
언어의 친밀도: JSON-based data model . nodejs 는 JSON(JavaScript Object Notation)을 베이스로 사용한다. 그리고 몽고DB는 BSON(Binary form of JSON)으로 데이터 처리를 한다. 그래서 서로 업무처리에 좋은 시너지를 만든다.

확장성: 확장성에 강한 Nodejs + 확장성에 강한 MONGOBD = 확장성2x 이지 아닐까 싶다.

성능: 몽고는 NoSQL의 장점인 속도,처리 부분에 강하다. Nodejs에게는 장점을 장점화시키는것과 같다.


Mysql도 가만히 있었던건 아니다.
Query Optimization(사실이게 sql이 겁나 무서운 이유다 절대 어라 sql왜 씀 할때는 이걸 명심하자), pararelle processing, consistency with modern hardware, JSON support, Spatial data, Security, Replication, in-memory database 등 꾸준히 발전해 왔다.

서로에 대한 장단점을 없애려고 서로가 발전해가는 모습인것 같다. 달랐던 목표가 ultimate 한 지점을 바라보고 있는게 느껴진다. 경계선이 조금씩 무너지며 우리에게는 취향과 목적등 선택에 있어서 더 다양해지니 아주 보기 좋은 모습이다

참고:내정보는 100%가 아니다. 안일한 방식으로 얻는 정보는 팩트가 아니므로 더 검색하고 시도해볼것이다. 스스로에게 관대하지말자

profile
성장하는 날 위한 기록

0개의 댓글