웹 애플리케이션 개발을 진행하다 보면 DB를 선택하는 순간이 찾아옵니다.
SQL(MYSQL) VS NOSQL(MongoDB)
그러면 각각은 어떠한 특징을 가지고 있고 둘의 차이점은 무엇인지 알아보겠습니다.
SQL은 관계형 데이터베이스(RDBMS)에서 데이터 관리 및 처리를 하기 위해 설계된 언어입니다. SQL을 RDBMS에서 사용하면 데이터를 저장, 수정, 삭제 및 검색할 수 있습니다.
데이터는 정해진(엄격한) 스키마에 따라 테이블에 저장됩니다.
스키마란 : 데이터베이스의 구조를 정의하는 개체 (여기서 구조란? 어떤 데이터가 테이블에 들어가고 어떤 데이터가 그렇지 않을지를 정의하는 필드(field) 집합을 가리킵니다.)
RDBMS에서 스키마를 준수하지 않은 레코드는 추가할 수 없습니다. 추가로 필드를 넣고 싶다면 스키마 전체를 수정해야 합니다.
데이터는 관계를 통해 여러 테이블로 분산됩니다.
SQL과 정반대의 개념으로 관계와 스키마가 없는 형태로 비관계형 데이터베이스라고 합니다.
관계, 스키마가 존재하지 않습니다.
레코드를 문서(documents)라고 부릅니다.
다른 구조의 데이터를 같은 컬렉션(=SQL에서의 테이블)에 추가가 가능합니다.
일반적으로 관련 데이터를 동일한 컬렉션에 저장합니다. SQL처럼 여러 테이블로 나누지 않고 User, Post의 내용들도 Order에 포함돼서 저장될 수 있습니다. 즉, JOIN할 필요 없이 모든 정보를 갖춘 문서가 생기는 것입니다.
JOIN의 개념은 NOSQL에서 존재하지 않습니다.
그렇다면 JOIN을 하고 싶을 때 어떻게 할 수 있을까요?
예를 들면, Order 테이블에 있는 User, Post의 내용들을 복제해 각각의 컬렉션에 저장하여 데이터를 정확하게 산출하도록 하는 것입니다.
이렇게 진행을 하게 되면 중복된 데이터가 발생한다는 단점을 가지고 있습니다.
또 중요하게 살펴봐야 할 점은 확장성(Scaling)입니다.
데이터베이스 시스템이 확장성을 갖추면 더 많은 트래픽을 처리하여 시스템의 성능을 유지하거나 향상시킬 수 있습니다.
저장 방식의 차이로 SQL은 수직적 확장, NOSQL은 수평적 확장만 지원합니다.
위의 장, 단점을 정리한 차이점을 정리해 보겠습니다.
[참고자료]
많은 도움이 되었습니다, 감사합니다.