데이터베이스/NoSQL

NoSQL 이란

syleemomo 2021. 10. 4. 19:47
728x90

 

* NoSQL의 개념과 탄생배경

NoSQL은 not only SQL의 약자로 관계형 데이터베이스(RDBMS)와 다른 방식으로 데이터를 저장한다.

NoSQL은 2000년대말 스토리지 비용이 급격히 하락하면서 등장하였다. 스토리지 비용이 하락함과 동시에 개발자 임금 비용이 올라가면서 더이상 스토리지 비용을 줄이기 위하여 데이터 중복을 최소화하는 복잡하고 관리가 어려운 데이터 모델을 설계할 필요성이 현저히 낮아졌다. 이와 동시에 개발자 임금이 높아지면서 개발 생산성을 위하여 빠르게 데이터 모델을 설계할 수 있는 새로운 형태의 데이터베이스가 필요하게 되었다. 

또한, 스토리지 비용의 감소로 데이터를 사용하는 애플리케이션이 급격히 증가하면서 단순히 정형 데이터뿐만 아니라 비정형 데이터도 증가하였다. 이로 인하여 미리 스키마를 정의하는 것이 불가능해지게 되었다. 이로써 각각의 데이터에 따라 스키마가 변경 가능한 유연한 형태의 NoSQL이 탄생하게 되었다.

* NoSQL 데이터베이스 유형 

문서(Document) 데이터베이스 - JSON(JavaScript Object Notation) 객체와 비슷한 문서에 데이터를 저장한다. 필드와 값의 쌍으로 연결되어 있다. 값은 문자열, 숫자, 불리언, 객체, 배열 등을 저장할 수 있다. 스키마는 실제 데이터 객체에 맞게 유연하게 변경된다. 복잡한 쿼리가 가능하며 MongoDB가 대표적이다.

키(key)-값(value) 데이터베이스 - 각 항목에 키와 값이 포함되어 있는 간단한 유형의 데이터베이스이다. 데이터 쿼리는 주로 키를 참조하는 방식으로만 값에 접근할 수 있다. 대량의 데이터를 저장하지만 복잡한 쿼리를 수행할 필요가 없을 경우 사용하면 좋다. 주로 캐싱에 사용되며 Redis가 대표적이다.

그 밖에 와이드 컬럼 스토어와 그래프 데이터베이스가 있다.

* 문서(Document) 데이터베이스 구조

데이터베이스 (Database) > 컬렉션 (Collection) > 문서 (Document) > 필드(Field)

관계형 데이터베이스(RDBMS)와 비교하면 컬렉션(Collection)은 테이블(Table)과 같다. 문서(Document)는 테이블의 하나의 행(Row)와 같다. 다른 말로 레코드(Record)라고 한다. 문서(Document) 내부 필드(Field)는 컬럼(Column)과 동일하다.

문서 (Document) 데이터베이스 구조

 

이름 나이 성별
철수 27 남자
영희 23 여자
길동 32 남자

위 테이블이 컬렉션이다. 즉, 사용자 정보에 대한 컬렉션이다. 위의 테이블에서 하나의 행이 도큐먼트이다. 또한, 이름, 나이, 성별과 같은 하나의 컬럼이 필드이다. 

 

// users : 컬렉션 (collection)
const users = [
    {name: "sunrise", age: 34}, // 도큐먼트 (document)
    {name: "danniel", age: 27},
    {name: "hanna", age: 19}
]

자바스크립트 언어와 비교하면 users 라는 배열이 컬렉션이고, 그 안에 존재하는 객체 1개가 도큐먼트라고 생각하면 쉽다. 

 

* NoSQL의 장단점

장점 - 정해진 스키마가 없기 때문에 각 데이터마다 유연한 형태로 저장할 수 있다. 즉, 언제든지 새로운 필드 추가가 가능하다. 정형, 비정형의 다양한 형태의 데이터(숫자, 문자열, 불리언, 객체, 배열 등)를 빠르게 저장할 수 있다. 깊이있는 복잡한 쿼리가 가능하다. 또한, 문서(Document) 내부에 또다른 문서(Document)를 삽입할 수 있다. 마지막으로 저장하려는 데이터 형태에 따라 구조가 자동으로 변경되므로 데이터 모델 설계에 시간이 적게 걸린다.

단점 - 각 데이터마다 데이터 형태가 다를수 있으며, 데이터 중복이 발생할 수 있다. 

 

* 관계형 데이터베이스 (RDBMS)와의 차이점 및 사용예시

관계형 데이터베이스(RDBMS)에서는 사용자가 작성한 댓글 목록을 연결한다. 하지만 NoSQL에서는 사용자 도큐먼트 내부에 댓글 도큐먼트를 배열로 삽입해주면 된다. 

이렇듯 관계형 데이터베이스(RDBM)는 정형화된 숫자 데이터를 주로 사용하며, 데이터의 일관성과 무결성이 보장되는 은행에서 많이 사용한다. 생각해보라! 은행 계좌의 거래내역 구조는 절대 변경되지 않는다. 이에 비해 NoSQL은 데이터 형태가 제각각이며 대규모 비정형 데이터를 빠르게 처리할 수 있는 경우에 주로 사용한다. 예를 들면 페이스북과 같은 SNS 서비스에 많이 사용한다. 

 

728x90