본문 바로가기
반응형
Data/NoSQL

NoSQL의 특징 #2

by JAMINS 2016. 6. 7.

MongoDB를 시작하기에 앞서 NoSQL의 개념부터 차근차근 알아보고 있습니다. 지난번 포스팅인 NoSQL의 특징 #1 에 이어서 이번에는 NoSQL의 종류와 장점과 단점을 알아보겠습니다. NoSQL에는 여러 종류가 있는데 각각 어떤 특징이 있는지, 그리고 NoSQL과 RDBMS와의 비교를 통해 장단점을 알아볼 것입니다.




NoSQL의 종류

MongoDB, HBase, Redis, CouchDB, Cassandra, Dynamo 등등 현재 여러 곳에서 사용되고 있는 NoSQL 방식의 데이터베이스들 입니다. 이외에도 수많은 데이터베이스들이 존재하는데 각각 약간씩 다른 데이터 모델에 기반을 두고 있습니다. Steven Yen이 블로그에서 밝힌 NoSQL의 종류는 다음과 같은데요.

  • Key/Value Store
  • Ordered Key/Value Store
  • Data Structure Server
  • Tuple Store
  • Object Database
  • Document Store
  • Wide columnar Store

이들 중 크게 Key/Value, Document, Column Base로 나뉠수 있는데 몇가지를 소개하고 넘어가겠습니다.



Key/Value Store

자료구조의 Map에서 자주 보던 K/V 형태의 구조입니다. 대부분의 NoSQL이 이 Key/Value 개념을 가지고 있습니다. Key는 중복될 수 없고 이 Unique Key에 각각 하나의 Value를 가지고 있는 형태가 됩니다. 데이터를 조회 및 입력할 때, Key를 가지고 접근할 수 있습니다. 가령 put(key, value) 이러한 형태로 데이터가 입력되며 조회할 때는 get(key) 이런식으로 말이죠. 수정과 삭제 또한 마찬가지입니다. 대표적인 제품으로는 Redis가 있습니다.


Key

Value 

Key

Value 


여기서 Value는 Integer나 String과 같은 Primitive Type이 될 수도 있지만 테이블 형태로 값을 저장할 수도 있습니다. Key와 Column:Value의 조합으로 저장할 수도 있는데, 예를 들어 key가 유저의 이름이라면 value에는 [성별:남, 취미:축구, ...] 와 같이 넣을 수도 있습니다. Redis에서는 내부적으로 List, Map등 여러 컬렉션을 지원하는데 이것도 유사한 방식이라고 할 수 있습니다. 



Ordered Key/Value Store

K/V Store와 유사한 형태입니다. 단지 데이터가 내부적으로 Key를 기준으로 Sorting되서 저장되는 점이 차이가 있습니다. Order by를 제공하지 않는 NoSQL에서 다양한 방법으로 활용할 수 있다는 장점이 있습니다. 대표 제품으로는 HBase, Cassandra가 있습니다.






Document key/Value Store

K/V Store에서 확장된 형태입니다. 저장되는 Value의 타입으로 Document라는 구조화된 데이터 타입(JSON, XML 등) 이 사용됩니다. 복잡한 계층구조를 잘 표현할 수 있다는 점이 장점입니다. 제품에 따라 Sorting, Join, Grouping 등 RDB와 같은 추가 기능이 지원되기도 합니다. 앞으로 정리할 MongoDB가 이 종류에 해당되며 여러 기능이 제공됩니다.




위와 같이 Value에 JSON 형태의 Document가 저장될 수 있습니다. JSON 기반으로 통신을 하는 HTTP 웹 서버의 경우 편리하게 데이터를 사용할 수 있으며 스키마의 유연성으로 인해 각각의 Value에 다른 형태로 저장할 수도 있습니다. 




2015년도 NoSQL의 트렌드


indeed.com에서 발표한 2015년도 NoSQL의 트렌드 그래프입니다. 가장 인기가 많고 많이 사용되는 제품은 MongoDB. 그 다음으로 Cassandra, Redis, CouchDB로 나타나고 있습니다. MongoDB는 이미 빅데이터를 사용하는 여러 기업에서 채택하고 있는 기술이며 Redis 또한 최근 많은 서비스에서 사용되고 있습니다. 우리가 흔히 사용하는 Instagram과 같은 SNS 뿐만 아니라 게임, 소셜데이팅 등에도 많이 사용되고 있습니다. 다양한 컬렉션의 지원, 빠른 속도 때문에 그 인기는 더욱 높아질거라 생각됩니다. 






NoSQL의 장단점

왜 NoSQL이란 개념이 도입되었고 많은 서비스들이 NoSQL방식의 데이터베이스를 사용하고 있는 것일까요? 기존의 RDBMS보다 장점이 많이 보이기 때문에 사용하는 것이라고 당연하게 생각할 수 있습니다. NoSQL에는 어떤 장점이 있고 어떤 단점이 있는지 RDBMS의 장단점과 함께 비교하면서 알아보겠습니다.



Relational Data Modeling

먼저 RDBMS에서 데이터 모델링하는 과정을 살펴보겠습니다. 개발하고자 하는 서비스에서 어떠한 데이터 단위를 사용할지 가장 먼저 데이터 모델을 정의합니다. 이 단계에서 각 데이터와의 관계 뿐만 아니라 여러 제약조건을 생각해야 합니다. 그 다음 스키마의 설계가 끝나면 Application에서 사용할 Query를 개발해야만 합니다. 즉 비즈니스 로직에서 활용할 CRUD쿼리를 개발해야하며 필요하다면 통계에 사용할 쿼리를 개발해야합니다. 전반적으로 위와 같은 단계로 개발이 진행되는데 이는 전형적인 RDBMS의 모델링 기법이라고 볼 수 있습니다. 다시 정리하면 도메인 분석, 개체 관계 식별, 테이블 추출, 쿼리 구현 순으로 개발됩니다.



NoSQL Data Modeling

Application의 기능에 중점을 두어 데이터 접근 패턴에 따라 모델링이 진행됩니다. 즉, 먼저 데이터 모델을 정의하고 Application에서 쿼리를 개발하는 형태가 아닌, 먼저 Application에서 필요한 쿼리와 성능 등을 정의한 이 후 요구사항에 맞게 데이터 모델을 구성합니다. 예를 들어 게시판 서비스가 있다고 가정했을 때, 게시판을 조회하는 기능에 중점을 두고 여기에 맞는 데이터 모델을 구성할 수 있습니다. 글 제목, 내용, 작성자, 작성일자, 이미지, 댓글 등을 묶어 게시판 데이터 모델을 만들 수 있겠죠. 정리하면 NoSQL의 데이터 모델링 기법은 도메인 분석, 쿼리 결과 도출, 테이블(데이터 모델) 설계 순으로 진행됩니다.



RDBMS의 장점

  • 범용적, 고성능, 안정적, 일관성
  • 정규화를 전제로 하고 있기 때문에 업데이트시 비용이 적다
  • 데이터베이스 설계시 불필요한 중복을 방지
  • 복잡한 형태의 쿼리가 가능하여 원하는 데이터를 얼마든지 볼 수 있다. (Join, Group by 등)
  • 이미 성숙한 기술

성숙한 기술이기 때문에 시스템 성능 상 신뢰성이라던지 안정성이 좋습니다. 또한 정규화를 통해 데이터를 분류하고 정해진 형태를 가져가기 때문에 데이터의 업데이트 시 비용이 적으며 데이터에 제약을 통해 데이터의 중복을 방지할 수 있습니다. 이는 데이터의 일관성, 무결성을 보장합니다. 기본적으로 제공하는 join, group by 등의 기능을 통해 원하는 만큼 데이터를 뽑아서 사용할 수 있는점이 장점입니다.



RDBMS의 단점

  • 대량의 데이터 입력 처리
  • 테이블의 인덱스 생성, 스키마 변경 시 성능
  • 개발, 운영할 때 데이터 컬럼을 확정 짓기 어려운 경우

데이터의 관계로 인해 스키마를 변경할 때, 데이터를 조작할 때 까다롭다는 단점이 있습니다. 대량의 데이터를 입력할 경우나 조회할 경우 성능이 저하될 수 있다는 부분과 Sharding과 Replication을 구축하는 비용이 많이 든다는 점이 단점이라고 할 수 있습니다.



NoSQL의 장점

  • 데이터 분산에 용이
  • 복제 및 장애대응(Recovery)에 용이
  • 데이터를 고속으로 처리할 필요가 있는 경우
  • 로그 등 계속 적재되야하고 대량의 데이터를 저장하고 싶은 경우 용이

기본적으로 데이터 모델 자체가 독립적으로 설계되어 있어 데이터를 여러 서버에 분산시키는 것이 가능하고 더 수월하게 할 수 있습니다. Sharding과 Replication이 용이하기 때문에 데이터 백업 및 장애대응에도 효과적으로 대처할 수 있으며 데이터를 무한대로 저장이 가능합니다. 또한 스키마의 정해진 형태가 없기 때문에 유연하게 데이터 모델을 변경하는 것이 가능하며 고속으로 데이터 처리가 가능합니다. 



NoSQL의 단점

  • 각 솔루션의 특징을 이해할 필요가 있음. 학습곡선이 높다
  • 새로운 기술로 분류되기 때문에 운영에 대한 노하우가 부족
  • RDBMS와 비교하여 아직 버그가 상대적으로 많은 상태
  • 보안에 취약하기 때문에 별도의 보안 체계를 마련
  • 데이터 모델링의 어려움

NoSQL에 매우 많은 솔루션들이 있고 각각 사용하는 데이터 모델의 개념이 다르므로 사용하고자 하는 솔루션의 특징을 이해할 필요가 있습니다. RDBMS와 비교하여 버그가 많은 상태이기 때문에 지속적인 버전업이 이뤄지며, 새로운 솔루션이 등장하므로 학습곡선이 높다는점이 단점. 또한 RDBMS보다 더 깊은 데이터 구조, 알고리즘에 대한 이해가 필요하며 데이터 모델링이 까다롭습니다. 




RDBMS와 NoSQL의 비교를 통해 NoSQL의 특징을 알아보았습니다. 어떤것이 더 좋다고 할 필요없이 각각 장점과 단점이 존재하는데, 개발하고자 하는 서비스의 특성에 맞게 사용하는 것이 가장 바람직하지 않나 생각합니다. 서비스에 대한 면밀한 분석을 바탕으로 NoSQL의 방식을 도입한다면 더욱 질 높은 서비스를 개발할 수 있을 것입니다.





참고

T-Academy MongoDB Session

http://highscalability.com/blog/2009/11/5/a-yes-for-a-nosql-taxonomy.html

https://www.dezyre.com/article/hottest-it-certifications-of-2015-nosql-databases-mongodb-certification-/104

'Data > NoSQL' 카테고리의 다른 글

[MongoDB] $text 검색 시 'No query solutions' 오류  (0) 2023.10.27
NoSQL 데이터 모델링 기법  (0) 2016.06.14
NoSQL 데이터 모델링 개념  (1) 2016.06.10
NoSQL의 특징 #1  (0) 2016.06.06

댓글