: Structured Query Language의 약자로 말그대로 구조적인 쿼리 언어로 관계형 데이터베이스를 제어하는 언어이다.
관계형 데이터베이스 (RDBMS)
: SQL을 통해 데이터를 제어한다.
특징
- 데이터는 정해진 데이터 스키마에 따라 테이블에 저장한다.
- 데이터는 관계를 통해 여러 테이블에 분산된다.
- 정해진 데이터 스키마 :
각 테이블에는 명확하게 정의된 Structure(스키마)가 존재
데이터는 Table Record로 저장
- 관계 :
관계형 데이터베이스는 관계가 중요.
관계란 테이블들을 서로 관계가 있는 테이블들을 연관지어 잇는 것이다.
ex) 상품 - 주문한 상품들 - 사용자 (관계) 지어서 생각
장점
- 명확하게 정의된 스키마, 데이터 무결성 보장
- 관계는 각 데이터를 중복없이 한 번만 저장된다
단점
- 덜 유연하다. 데이터 스키마는 사전에 계획되어야 하기에 수정하기가 번거롭다.
- 관계를 맺고 있어서, Join문이 많은 매우 복잡한 쿼리가 만들어질 수 있다.
- 수평적 확장이 어렵고, 대체로 수직적 확장만 가능하다.
: SQL과 반대되는 접근방식이기 때문에 이름이 NoSQL이다. 말그대로 비관계형 데이터베이스이다.
특징
- 스키마 없음
- 관계 없음
- 구조 DB - Collections - Document 형식
Collections : 우리가 RDBMS에서 알던 Table로 Structure가 없는 Table
Document : RDBMS에서 Records
Document는 JSON데이터와 비슷한 형식으로 구성
장점
- 스키마가 없어서 유연하다
- 데이터는 필요로 하는 형식으로 저장됨, -> 데이터를 읽어오는 속도가 빨라짐
- 수직 및 수평적 확장에 용이하다
단점
- 유연성 때문에, 데이터 구조를 결정하기 힘듬
- 데이터 중복은 문서(레코드)가 변경된 경우 그와 관련된 문서를 갖고 있는 컬렉션을 찾아 하나하나 업데이트를 해줘야 한다
사용하기 시기
- 정확한 데이터 구조가 정해지지 않은 경우, 변경/확장이 될 수 있는 경우
- 읽기는 자주 하지만, 변경이 잦지 않는 경우
- 막대한 양의 트래픽을 다뤄야 하는 경우 -> 수평적 확장에 용이
NoSQL에서 확장이 쉽다고 했다. DB를 어떤식으로 확장을 시켜야 하는 걸까?
확장에는 수직적(Vertical) 확장과 수평적(horizontal) 확장이 있다.
- 수직적 확장
"Scale up방식으로 확장한다." 라고도 한다.말 그대로 DB서버의 성능을 확장 시키는 것입니다. DB서버에 CPU를 더 좋은 것으로 바꾸는 원초적인 방식이다.
성능 확장에 한계가 존재하고, 성능 증가에 대한 비용 증가폭이 매우 크다.
SQL, NoSQL 둘 다 가능한 방식입니다.- 수평적 확장
"Scale out방식으로 확장한다." 라고도 한다.
서버를 여러대 만들어서 확장하는 것이다.
각 서버에 걸리는 부하를 균등하게 해주는 로드밸런싱이 필수적으로 동반된다.
서버가 여러대가 있기 때문에 한 대가 장애로 다운되어도 다른 서버로 서비스 제공이 가능하다는 장점이 있다.
SQL도 가능하지만, 매우 어렵고 비용이 많이 발생한다.
하지만 NoSQL은 이러한 수평적 확장을 기반으로 만들어졌기 때문에 쉽게 확장이 가능하다.