본문 바로가기

IT 트렌드

빅데이터(BigData) 5부 - NoSQL(Not only SQL) 왜 너가 선택되었니?

반응형

대표 이미지 출처 : https://www.educba.com/nosql-data-models/

 

이전 글에서는 관계형 데이터베이스(RDB, Relational Database, 이하 'RDB')에 대해서 알아보았고 빅데이터에서 가지는 그 한계점을 알아보았다. 아직 못 보신 분들은 여기를 먼저 보고오자.

 

빅데이터(BigData) 4부 - 기존 기술(관계형 데이터베이스)로는 힘들어요! - 관계형 데이터베이스 먼

이전 글에서는 빅데이터와 관련된 특별한 기술이나 개념이 필요한 원인인 데이터에 대해서 알아보았다. 혹시 아직 못 보고 왔다면 아래 링크를 참조하자. 정형 데이터 VS 비정형 데이터 빅데이

www.kboutiq.com

비정형 데이터가 80~90%가 대부분이라는 빅데이터. 그래서 RDB가 아닌 NoSQL이라는 비관계형 데이터베이스(Non RDB)를 사용해야 한다. 왜 NoSQL인지 이제부터 차근차근 알아보자.

간단한 용어 정리

  • 데이터베이스(Database, DB) : 데이터를 관리하는 시스템이라고 생각하자. 즉, 데이터 입력, 출력, 삭제, 수정 등이 가능하다.
  • 관계형 데이터베이스(Relational Database, RDB) : 각 데이터 간의 관계를 정의할 수 있도록 만든 시스템이다. 단순한 예로 유튜브를 생각해보자. 유튜브는 사용자가 영상을 올리고 그 올린 영상들을 보는 구조이다. 즉, 사용자와 영상의 관계가 가장 중요하다. 사용자가 영상을 올린다, 영상을 본다는 관계를 정의할 수 있다. 이렇게 데이터의 관계를 쉽게 연결할 수 있도록 만들어진 시스템이다.
  • SQL(Structured Query Language) : 데이터베이스에서 데이터를 찾기위해 따로 정의한 언어이다. 단순히 이 데이터 보여줘. 이 데이터 수정해줘. 등이라고 생각하고 넘어가자.
  • NoSQL(Not only SQL) : 관계형 데이터베이스 구조의 한계를 느껴 나온 데이터베이스 시스템이다. 이 녀석이 빅데이터에 유용하다.

NoSQL이란 무엇일까? 

NoSQL은 비관계형으로 데이터를 구조화하는 데이터베이스를 뜻한다. 이 비관계형 데이터 구조 모델에는 다양한 방식이 있지만 여기서 소개할 것은 가장 대표적인 Key-Value 모델을 기반으로 알아보려고 한다.

 

자 먼저 Key-Value가 무엇인지부터 알아보자.

* Key-Value?

키와 자물쇠

 

자물쇠를 먼저 떠올려 보자. 내가 키를 가지고 있으면 특정 자물쇠를 열 수 있다. 즉, 키를 가지면 '자물쇠를 열 수 있다.'라는 결과를 얻을 수 있다.

 

이번에는 사전을 떠올려 보자. 내가 사전에서 '데이터베이스'라는 단어를 찾고 싶다. 여러분은 어떻게 찾을 것인가? 첫 페이지부터 '데이터베이스'라는 단어가 나올 때까지 찾아볼것인가?

 

당연히 'ㄷ'이라는 색인을 이용할 것이다. 즉, 'ㄷ'이라는 키를 이용하여 결과를 얻을 것이다. 그 후 우리는 모음을 알고 있기에 'ㅔ'가 나올 부분을 빠르게 페이지를 넘기면서 찾아서 '데'로 시작하는 부분까지 갈 것이다.

 

지금까지 설명한 것이 Key-Value의 모든 것이다. 즉, 특정 Key를 이용하여 Value(값, 결과)를 얻는 것이 바로 Key-Value이다.

 

자 그러면 이제 실제 데이터를 이용하여 어떻게 이용되는지 알아보자. 이 전글의 마찬가지로 유튜브 구조를 통해 알아보자.

* Key-Value는 어떤 구조일까?

이전 글의 내용을 잠시 가져와 봤다. 아래는 RDB로 철수, 영희가 각 영상을 올린 것과 본 것을 구분한 것이다.

 

사용자

번호 이름 성별 나이
1 철수 남자 18
2 영희 여자 18

영상

번호 영상이름 영상시간(초) 영상경로
1 10분으로 빅데이터 개념 정리! 621 내문서
2 10분으로 IT 트렌드 훑기 600 내문서

올린 영상

사용자 번호 영상 번호
1 1

본 영상

사용자 번호 영상 번호
2 2

또는 위 두 표를 아래 하나로 만들 수 있다.

 

영상을 올린경우 1, 본 경우 2

사용자 번호 영상 번호 올림/봄
1 1 1
2 2 2

 

그러면 위 데이터를 NoSQL로 어떻게 표현해야 할까? 생각해보고 답을 보도록 하자.

 

더보기

사용자 집합(사전)

1 : 이름 : 철수
     올린 글 : 
              1 : 이름 : 10분으로 빅데이터...
                   영상시간 : 621
                   경로 : 내문서
              n : ...
     본 글 : 
              2 : 이름 : 10분으로 IT 트렌드...
                   영상시간 : 621
                   경로 : 내문서
              n : ...
2 : 이름 : 영희
     올린 글 :
              2 : 이름 : 10분으로 IT 트렌드...
                   영상시간 : 621
                   경로 : 내문서
              n : ...
     본 글 : 
              1 : 이름 : 10분으로 빅데이터...
                   영상시간 : 621
                   경로 : 내문서
              n : ...
...
영상 집합(사전)
1 : 이름 : 10분으로 빅데이터 개념 정리!
     영상시간 : 621
     경로 : 내문서
2 : 이름 : 10분으로 IT 트렌드 훑기
     영상시간 : 621
     경로 : 내문서
...

이게 바로 NoSQL의 형태이다. 여러분들은 사용자 집합처럼 생각했다면 정답이다. 영상 집합은 일단 논외로 하자.

사용자라는 집합 또는 사전에서 1(철수)을 선택하면 철수에 관한 데이터를 알 수 있고 여기서 '올린 글'이라는 필드를 선택하면 철수가 올린 모든 글을 알 수 있게 되는 것이다.

 

영상 집합 또는 사전을 만든 이유는 유튜브는 올린 영상 전부를 표출하는데 사용하기 위해서 때문에 따로 만든 것이다. 사용자 집합을 이용해서 모든 글을 모으기에는 딱 봐도 시간이 오래 걸리기 때문이다.

 

조금 더 이해를 돕기위해 이미지를 가져와 봤다.

 

Key-Value 구조 / 출처 : https://hazelcast.com/glossary/key-value-store/

 

자 위의 그림은 온라인 쇼핑몰 고객과 주문 내역을 간단히 Key-Value 모델로 표현한 것이다. 고객(Customer ID)만 알면 지금까지 어떤 주문을 했는지 한번에 알 수 있다는 것을 확인할 수 있다.

 

여러분들은 이제 기존 RDB와 어떤 차이인지 느낌이 오는가?

* RDB와 Key-Value의 차이는?

RDB에서는 '올린 글', '본 글'이라는 기능이 추가되면 관계를 표현하는 테이블을 만들어야 한다. 하지만 Key-Value 구조를 사용하면 그냥 철수라는 Key 내에 '올린 글', '본 글'라고 하는 필드만 만들고 데이터를 전부 집어넣으면 된다.

 

RDB는 표 형식이기 때문에 특정한 컬럼(열)이 추가되면 저장되어있는 모든 데이터(행)에 컬럼(열)이 추가된다. 하지만 Key-Value 구조는 자유롭게 필드를 추가할 수 있다는 것이다. 즉, 철수와 영희의 내부 구조가 같을 필요가 없다는 것이다.

 

위 두 차이로 인해 성능 확장에도 영향을 미친다. RDB는 하드웨어 교체로의 성능 개선은 가능하지만 분산 등을 이용한 성능 개선은 힘들다.

 

RDB는 각 행마다 번호(행을 특정지을 수 있는 값)를 정확히 매기기때문에 데이터 중복을 허용하지 않는다. 하지만 Key-Value 구조는 위의 접은글 내의 표와 같이 데이터 중복이 일어날 수 있다. 사실 하드디스크와 같은 저장장치의 가격이 급격히 싸지고 용량은 늘었기 때문에 중복은 이제 문제가 아니게 된다.

 

RDB는 표 형식으로 특정 컬럼(열)에 숫자 데이터가 들어간다면 모든 나머지 데이터의 컬럼에도 숫자가 들어가야 한다. 하지만 Key-Value 모델에서는 정해진 데이터 형식이 없기 때문에 어떤 데이터든 상관없이 넣을 수 있다. 이 부분이 비정형 데이터가 가능한 가장 핵심 장점이 아닐까 생각한다.

 

요약하면... NoSQL은 아래와 같은 특징을 가지고 있다.

  • 확장성이 좋다. 정해진 틀이 없다는 것이다.
  • 중복을 허용한다.
  • 성능 확장이 좋다.

필자의 사견

이제 여러분도 왜 비정형 데이터에는 NoSQL, Non RDB를 사용해야하는지 알게 되었을 것이라 생각한다. 지금까지의 내용으로 보면 RDB보다 NoSQL이 무조건 좋은 것! 이라고 생각할 수도 있다. 하지만 빅데이터에서 NoSQL이 좋은 것이라는 것을 잊지 않길 바란다. 추후 이와 관련된 글도 쓸 예정이다.

 

이번 글을 읽으면서 한 가지 의문이 생겼을 것이다. 왜 RDB는 하드웨어적인 성능확장에 유용하지만 분산 처리와 같은 방법의 성능확장는 힘든 것이고, NoSQL는 왜 분산 처리와 같은 성능확장에 수월한 것일까? 다음 글에서 알아보자.

반응형