SQL은 Structured Query Language를 뜻하며, RDBMS에서 사용되는 표준 질의 언어이고, 비절차적 언어라는 특징을 가집니다.

비절차적 언어는 SQL 언어의 특징으로 원하는 결과에 대한 내용(What)만 명세하고, 결과를 얻는 내부의 방식에 대한 내용(How)는 없다는 특징을 가집니다. 즉, 사용자는 특정 RDBMS에 해당하는 쿼리 문법을 사용하여 어떤 값들을 얻을 지만 작성하고, 그에 대한 결과 데이터들은 RDBMS 내부적으로 처리하여 반환해줍니다.
대부분의 SQL 쿼리 실행 순서는 다음과 같습니다.

RDBMS(관계형 데이터 베이스 관리 시스템)는 관계형 데이터베이스를 생성, 업데이트, 관리하는 데 사용하는 프로그램으로 잘 알려진 RDBMS로는 MySQL, PostgreSQL, MariaDB, Oracle 등이 있습니다. 이러한 RDBMS의 특징은 다음과 같습니다.

2009년부터 페이스북, 트위터, 구글 애널리틱스 등 사용자가 급격하게 증가하면서 데이터 역시 폭발적으로 증가하는 상황이 발생했습니다. 즉, 단일 서버에 모든 데이터를 넣을 수 없어졌고, 이로 인한 서버의 확장이 불가피해졌습니다. 서버 확장의 종류로는 2가지가 있습니다.
여기서 수직적 확장은 가격이 비싸고, 사양을 무한하게 높일 수 없습니다. 그렇다면 수평적 확장을 해야하는데,, RDBMS는 처음 설계시 단일 서버로 돌아간다는 전제 하에 만들어진 데이터베이스 시스템이기 때문에 수평적 확장을 하기에는 기술적으로 어렵고, 한계 또한 존재했습니다. 이러한 RDBMS의 한계를 극복하기 위해 NoSQL 데이터베이스가 등장하게 되었습니다.
NoSQL은 Not Only SQL이란 의미를 가지고, 전통적인 관계형 데이터베이스 시스템과는 다른 방식으로 데이터를 저장하고 관리하는 데이터베이스 시스템입니다. 즉, 스키마가 테이블이라는 시스템에 고정되어 있는 것이 아니라 Column, Graph, Key-Value, Document 등 유연한 데이터 모델을 가지는 것이 특징입니다.

유연한 데이터 모델에 대해서 조금 더 살펴보면, RDBMS와 달리 고정된 스키마가 없어 유연하게 처리하면 어떤 장점이 있을까요? 바로 데이터의 추가, 삭제, 수정이 용이해져서 데이터 모델의 변화에 대한 대응이 용이합니다. 예를 들어 A센터의 강좌 내용에는 이름, 강좌와 같은 속성이 있다고 가정해봅시다. DB에는 A센터의 강좌만 존재했지만, B라는 센터의 강좌까지 저장을 해야하는 상황입니다. 여기서 B 센터에는 이름, 강좌, 선생님이라는 속성이 있어 "선생님"이라는 속성을 추가하게 된다면? 다른 C, D, E 센터가 추가된다면 ?
일반적으로 DDL 속성을 변경하는 것은 DB에 큰 부하를 줄 수 있으므로 데이터 모델의 변경은 최소화해야 합니다. 따라서 이런 경우에는 NoSQL이 유용하게 사용될 수 있습니다.
NoSQL 데이터베이스는 오픈소스 제품들이 많아서 비교적 저렴하며, 무료로 사용할 수 있는 제품도 많습니다. 또한, 데이터 가용성을 보장하기 위해 노드를 추가할 수 있으므로 하드웨어 비용도 상대적으로 낮습니다.