MySQL과 같은 SQL을 사용할까? 아니면 MongoDB와 같은 NoSQL을 사용할까?
SQL과 NoSQL은 만들어진 방식, 저장하는 정보의 종류, 저장하는 방법 등에 차이가 있음
먼저 기초 개념들부터 짚고 넘어가자.

데이터베이스를 운영하고 관리하는 소프트웨어
다수의 사용자들이 데이터베이스 내의 데이터를 접근 할 수 있도록 해주는 소프트웨어 도구의 집합

→ 사용자가 DB한테 직접 요청을 보내는 것이 아닌 DBMS에게 요청을 보내 해당 DBMS가 DB에게 사용자 요청을 전달하고 전달받은 데이터를 사용자에게 넘겨줌
💥 사용자는 Query Language를 통해 DBMS에게 요청을 보냄

RDBMS에서 사용되는 언어

결론
- 스키마가 뚜렷해 테이블 간의 관계를 직관적으로 파악할 수 있음
- SQL을 사용하면 RDBMS에서 데이터를 저장, 수정, 삭제 및 검색을 할 수 있음
- MySQL, Oracle, SQLite, PostgreSQL, MariaDB
No 스키마, No 관계
데이터가 고정되어 있지 않은 데이터베이스

→ 데이터의 구조가 같을 필요가 없음( 다른 문서에는 영향을 미치지 않음)
등장배경
2009년에 페북, 트위터, 구글 애널리틱스 등 사용자가 급격히 증가 → 데이터도 폭발적으로 증가함 ㄷㄷ
→ 서버 확장이 불가피해졌음…..
[서버 확장 종류]

수직적 확장
수평적 확장
- 서버의 대수를 늘려 데이터를 여러 서버에 분산 시켜서 저장
RDBMS 확장의 한계
수직적 확장 - 가격이 비쌈, 사양을 무한하게 높일 수 없음
수평적 확장 - 처음에 만들어질 때 단일서버에서 돌아갈 거라는 가정을 가지고 만들어진 데이터 베이스 시스템이기 때문에 기술적으로 어렵고 한계도 존재함
!! RDBMS의 수평적 확장 한계를 극복하기 위해 NoSQL 데이터베이스 등장 !!
[특징]
유연한 데이터 모델
RDBMS와 달리 고정된 스키마 xxx
데이터를 유연하게 추가, 삭제, 수정 ㅇㅇㅇ
→ 비용이 적게 든다


저렴한 비용
데이터 저장(Storage)
SQL
- SQL 언어를 이용해서 데이터를 테이블에 저장
- 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이털르 저장해야함
NoSQL
- key-value, document, wide-column, graph 등의 방식으로 데이터를 저장
**스키마(Schema)**
SQL
- 고정된 형식의 스키마가 필요. 즉 처리하려는 데이터 속성별로 열(column)에 대한 정보를 미리 정해야 함
- 스키마는 나중에 변경할 수 있지만 데이터베이스 전체를 수정하거나 오프라인으로 전환해야 할 수도 있음
NoSQL
- 동적으로 스키마의 형태를 관리할 수 있음
- 행을 추가할 때 즉시 새로운 열을 추가할 수 있고 개별 속성에 대해 모든 열에 대한 데이터를 반드시 입력하지 않아도 됨
**쿼리(Query)**
SQL
- 테이블의 형식과 테이블 간의 관계에 맞춰 데이터를 요청해야 함
- SQl 언어와 같이 구조화 된 쿼리 언어를 사용하는 이유이기도 함
NoSQL
- 데이터 그룹 자체를 조회하는 것에 초점을 둠
- 구조화 되지 않은 쿼리 언어로도 데이터 요청이 가능(UnQL)
**확장성(Scalability)**
SQL
- 수직적 확장
- 비용이 많이 듬
- 여러 개의 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만 매우 복잡하고 시간이 많이 소요됨
NoSQL
- 수평적 확장
- 보다 저렴함
- 많은 트래픽을 보다 편리하게 처리할 수 있음
둘 중 어떤 것을 사용해야 할까?