NoSQL이란
개발을 하다보면 반드시 RDBMS를 사용하게 된다. 어떤 툴이던, 어떤 프로그램이던 정보를 저장하고 관리해준다는 데이터베이스의 역할은 빼놓을 수 없게된다. 하나하나 수기로 작성하거나, 엑셀이 입력하는 형태들과, 정보의 대조 비교 검증 모두 DB의 힘이 없으면 힘들어지기 때문이다.
우리가 자주 사용하는 Oracle, MySQL, MS-SQL 등을 제외하고도 여러가지 쿼리들이 존재하는데 이번엔 NoSQL 에 대해서 알아보려고 한다.
NoSQL의 작동방식
비관계형이라고도 하는 NoSQL은 정해진 데이터 모델이 아닌, 유동적인 데이터 모델을 사용하여 DB를 관리한다. 서비스마다 천차만별적으로 달라지는 애플리케이션의 구조에 따라 데이터의 볼륨, 지연시간 등에 적응하기 최적화 되어있다.
흔히 사용하는 관계형 DB에서는 정규화되어 테이블에 보관되고, 관계는 기본키 외래키 등등이 존재하고, 테이블마다 필드들이 있고 이런 테이블의 필드들이 중복성을 줄이고 저장에 최적화되어, 테이블 사이에 참조 무결성을 유지하도록 고안되어 있다. 그러나 NoSQL DB에서는 보통 JSON 문서로 저장되며, 단일 문서에 속성이 나뉘어 저장되게 된다.
이럴경우 직관적인 개발과 수평적인 확장성이 대폭으로 늘어나게 된다.
즉, NoSQL은 유연하고 확장성이 높으며, 고성능이고 여러 기능을 제공한다.
관계형 데이터 모델 / 비 관계형 데이터 모델
MySQL, Oracle 같은 데이터 모델들이 바로 관계형 데이터 모델이다. 오랫동안 사용되어 왔던 규칙적이고 관계적이었던 해당 모델들이 새로운 서비스들이 늘어남에 따라 여러 모델들을 적용가능한 NoSQL도 주목받고 있어진겁니다.
아래는 관계형DB에서 사용되는 용어와 NoSQL의 대표격인 MongoDB에 언어차이에 대해서 알아보려고 한다.
SQL | MongoDB |
테이블 | 컬렉션 |
열 | 문서 |
컬럼 | 필드 |
기본 키 | ObjectId |
인덱스 | 인덱스 |
보기 | ㅂ괴 |
객체 | 포함문서 |