Structured Query Language의 약자로 말그대로 구조적인 쿼리 언어로 관계형 데이터베이스를 제어하는 언어이다.
SQL을 통해 데이터를 제어한다.
각 Table에는 명확하게 정의된 Structure(스키마)가 존재한다.
그리고 데이터는 Table에 Record로 저장이 된다.
여기서, Structure(스키마)를 지키지 않는 Record는 절대절대 테이블에 들어갈 수 없다.
관계형 데이터베이스답게 관계가 중요하다.
관계란 테이블들을 서로 관계가 있는 테이블들을 연관지어 잇는 것이다.
만약 Product(쇼핑 상품들), Orders(주문한 상품들), Users(사용자)가 존재한다면, 각각의 테이블들은 관계를 지어서 생각해야 한다.
SQL과 반대되는 접근방식이기 때문에 이름이 NoSQL이다. 말그대로 비관계형 데이터베이스이다.
특징도 SQL과 반대되는 특징이다.
이걸 알려면 NoSQL의 구조를 알아야 한다.
먼저 DB - Collections - Document형식으로 되어있다.
Duplicate Data
라고 한다. 바로 "데이터 복제"이다.실수로 Orders 컬렉션에서 User의 데이터를 수정한다면 자동으로 Users컬렉션에도 반영이 되는 원치않는 데이터가 될 수 있다.
NoSQL에서 확장이 쉽다고 했다. DB를 어떤식으로 확장을 시켜야 하는 걸까?
확장에는 수직적(Vertical) 확장과 수평적(horizontal) 확장이 있다.
수직적 확장
"Scale up
방식으로 확장한다." 라고도 한다.말 그대로 DB서버의 성능을 확장 시키는 것입니다. DB서버에 CPU를 더 좋은 것으로 바꾸는 원초적인 방식이다.
성능 확장에 한계가 존재하고, 성능 증가에 대한 비용 증가폭이 매우 크다.
SQL, NoSQL 둘 다 가능한 방식입니다.
수평적 확장
"Scale out
방식으로 확장한다." 라고도 한다.
서버를 여러대 만들어서 확장하는 것이다.
각 서버에 걸리는 부하를 균등하게 해주는 로드밸런싱이 필수적으로 동반된다.
서버가 여러대가 있기 때문에 한 대가 장애로 다운되어도 다른 서버로 서비스 제공이 가능하다는 장점이 있다.
SQL도 가능하지만, 매우 어렵고 비용이 많이 발생한다.
하지만 NoSQL은 이러한 수평적 확장을 기반으로 만들어졌기 때문에 쉽게 확장이 가능하다.
참고
https://devuna.tistory.com/73
https://gyoogle.dev/blog/computer-science/data-base/SQL%20&%20NOSQL.html