개발놀이터

NoSQL 이란? 본문

CS 지식/데이터베이스

NoSQL 이란?

마늘냄새폴폴 2023. 3. 9. 09:16

이번 포스팅에서는 흔히 NoSQL이라 불리우는 비관계형 데이터베이스에 대해서 알아보도록 하겠습니다. 

 

원래는 NoSQL에 대해서 공부할 생각이 없었지만 트위터에서 개발자가 꼭 알아야할 내용중에 NoSQL이 있는 것을 보고 내가 생각했던것만큼 중요하지않은게 아니구나 싶어서 공부하게 되었습니다. 

 

이번 포스팅에서는 NoSQL이 무엇인지, 기존 관계형 데이터베이스와 무엇이 다른지, NoSQL의 타입, 마지막으로 MicroService Architecture의 저변확대로인한 NoSQL의 입지에 대해서 알아보겠습니다. 

 

DBMS의 역사

우리는 NoSQL을 알아보기에 앞서 NoSQL 전에 관계형 데이터베이스 그리고 더 이전인 과거 이야기부터 시작해야합니다. 

 

관계형 데이터베이스 이전, 기업들은 데이터를 관리하는 방법으로 위계에따른 데이터베이스 시스템을 채택했습니다. 이 구조는 마치 트리구조와 같았죠. 이런 트리구조의 위계적인 DBMS는 유저로하여금 많은 양의 데이터를 조직할 수 있게 되었습니다. 

 

하지만 이러한 구조는 매우 복잡했고, 특정한 애플리케이션에서 독점적으로 사용되었고, 많은 제한이 있었죠. 

 

이러한 제한은 결국 많은 개발자들을 관계형 데이터베이스를 개발하도록 이끌었습니다. 그리고 이런 변화는 데이터를 테이블에 저장하여 관리하는 방향으로 진화하였죠. SQL문은 관계를 맺은 데이터의 상호작용을 위한 인터페이스를 제공했습니다. 

 

하지만 시간이 지남에따라 데이터셋의 사용에 대한 더 빠르고, 더 많은 확장이 요구되었고 이러한 요구는 점점 더 기술의 병합이 중요하게 만들었습니다. 

 

개발자들은 관계형 데이터베이스보다 더 유연한 것을 원하게 되었고 NoSQL이 그 대안이 되었습니다. 

 

그렇다고 NoSQL이 RDBMS을 대체할 수 있다는 것은 아닙니다. 예를 들어서 회사에서 주문 데이터를 관리하고 있다고 가정해봅시다. 관계형 데이터베이스에선 각각의 테이블이 고객 데이터와 주문 데이터 그리고 상품 데이터를 분리해서 관리할 수 있습니다. 그리고 각각의 Key로 Join연산을 통해 데이터를 보기쉽게 정렬할 수도 있죠. 

 

이렇게 쉽게 데이터를 저장하고 검색할 수 있는만큼 상당한 메모리를 잡아먹죠. 만약 메모리가 더 필요하면 관계형 데이터베이스에선 수직적인 확장밖에 할 수 없습니다. 수평적으로는 할 수 없죠. 이 의미는 하드웨어의 확장을 하지 않으면 확장이 되지 않는다는 것이죠. 

 

NoSQL

NoSQL은 비관계형 데이터베이스라고도 불립니다. 테이블과의 연결을 필요로하지 않는다는 의미이기도합니다. 이러한 특징은 데이터베이스를 수평적으로 확장하기에 정말 유연한 구조를 가지고 있습니다. 

 

뒤에서 더 얘기하겠지만 NoSQL을 단독적으로 사용하기에는 보안이나 여러가지 이유때문에 부담이 될 수 있지만 요즘 회사들은 MicroService Architecture를 적극적으로 도입해 관계형 데이터베이스와 비관계형 데이터베이스를 적절히 섞어서 사용합니다. 

 

이 얘기를 본격적으로 하기 전에 NoSQL의 저장방식에 대해서 알아보도록 하겠습니다. 

 

NoSQL의 데이터 저장방식에는 크게 네가지가 있습니다. Key-Value Store, Document Store, Wide-column Store, Graph Store 이렇게 네가지이죠. 

 

Key-Value Store

NoSQL 데이터베이스에서 전형적으로 간단하게 고려되는 저장방식입니다. 스키마가 적은 데이터모델을 사전에서 사용하는 Key-Value 방식대로 조직화합니다. 각각의 아이템은 Key와 Value를 가지고 흔히 Key는 관계형 데이터베이스에서 기본키에 해당하는 값이 저장되고 Value에는 그 Key에 해당하는 정보들이 배열로 들어갑니다. 

 

Key-Value 저장 방식은 데이터가 단순하면 단순할수록 효율이 올라가며 복잡한 데이터는 저장하기에 부담이 됩니다. 따라서 데이터가 단순한 캐싱이나 세션을 구현할 때 주로 사용합니다. 대표적인 오픈소스 Key-Value 데이터베이스로는 Redis와 Memcached가 있습니다. 

 

https://en.wikipedia.org/wiki/Key-value_database

 

Document Store

이름에서도 유추할 수 있듯이 이 저장방식은 데이터베이스에 데이터를 문서형태로 저장하는 방식입니다. 정형데이터와 비정형데이터의 사이 수준의 데이터를 관리하는데 도움을 주고 흔히 JSON이나 XML 혹은 BSON으로 데이터를 저장합니다. 

 

개발자는 document를 통해 하나하나 매치할 필요가 없는 데이터 스키마 때문에 더 높은 유연성을 얻을 수 있습니다. 그러나 데이터 충돌엘 따르는 복잡한 트랜잭션 문제가 생길 수 있습니다. 

 

흔히 사용되는 사용처는 컨텐츠 관리 시스템이나 유저프로필을 관리하는데에 사용됩니다. 가장 대표적인 데이터베이스는 MongoDB입니다. 

https://inyl.github.io/programming/2017/05/09/database.html

 

Wide-column Store

이러한 데이터베이스 저장 방식은 Key-Value 저장방식과 Document 저장방식의 결점을 해결하기위해 나온 방식입니다. 그러나 관리하기위해 더 복잡한 시스템이 필요하기 때문에 새로운 팀이나 새로운 프로젝트에서는 추천하지않습니다. 

 

Wide-column 저장방식은 말그대로 column을 유연하게 설계할 수 있습니다. 어떤 데이터는 아이디-패스워드-이름을 저장할 수 있고, 어떤 데이터는 아이디-패스워드-이름-주민등록번호 이런식으로 column을 확장할 수 있습니다. 

 

Wide-column 저장 방식의 대표적인 데이터베이스는 Apache의 HBase와 Cassandra가 있습니다. 

 

https://database.guide/what-is-a-column-store-database/

 

Graph Store

Graph 저장방식은 말 그대로 그래프의 형태로 데이터를 저장합니다. 데이터 하나하나는 노드에 저장되고 노드별로 연결되어 노드의 관계성을 표현할 수 있습니다. 

 

Graph 저장방식은 흔히 네트워크 연결을 관리하거나 이러한 데이터를 저장하는데에 사용됩니다. Graph 저장방식의 대표적인 데이터베이스는 Neo4j가 있습니다. 

 

https://database.guide/what-is-a-graph-database/#more-896

 

 

NoSQL의 이점

NoSQL 데이터베이스는 특정한 상황에서 뛰어난 장점을 가지고 있습니다.

 

  • Cost-effectiveness : RDBMS를 high-end로 유지하기 위해서는 값비싼 코스트가 들어갑니다. 라이센스의 구매를 요구할 수도 있고, 데이터베이스 매니저를 다뤄야하며 강력한 하드웨어를 요구합니다. NoSQL 데이터베이스는 코스트를 최소화하기위해 리소스를 할당하는 것을 더 잘 할 수 있습니다. 
  • Flexibility : NoSQL는 수평적인 확장과 데이터모델의 유연성을 가지고 빠르게 변화하는 데이터의 큰 볼륨을 관리할 수 있습니다. 에자일 개발을함에 있어서 큰 도움이 되고 자주 코드를 푸시할 수도 있습니다. 
  • Replication : 레플리케이션은 A데이터베이스에서 B데이터베이스로 데이터를 복사하는 것을 말합니다. NoSQL은 다중 서버에서 데이터를 저장하거나 복사하는 것을 효율적으로 수행할 수 있습니다. 만약 서버가 오프라인이 되면 데이터가 유실되는 것을 막을 수도 있습니다. 
  • Speed : NoSQL은 모든 유저로하여금 더 빠르게 그리고 더 에자일하게 데이터를 저장하고 수행할 수 있습니다. 현대사회에서 NoSQL데이터베이스를 일반적으로 선택하게하는 큰 요인 중 하나입니다. 복잡한 웹 애플리케이션이나 이커머스 사이트나 모바일 애플리케이션에서 큰 효과를 볼 수 있습니다. 

 

 

NoSQL의 성능

위의 그림은 데이터베이스별 성능 테스트를 한 결과입니다. 물론 제가한 것은 아니구요... NoSQL에 대한 논문을 찾아보다가 재밌어보여서 읽고있었는데 흥미로운 결과가 있길래 가져와봤습니다. 

 

이 논문의 저자는 흔히 데이터베이스의 성능을 테스트하는 것은 일반적인 real-world에서의 환경을 반영할 수 없었으며 때문에 이 저자는 실제로 사용되는 데이터를 기반으로 성능 테스트를 했다고 합니다. 

 

위의 그림은 빨간색이 RDBMS, 초록색이 NoSQL, 노란색이 NewSQL입니다. 회색은 볼 필요 없습니다. NewSQL은 그냥 단순하게 RDBMS의 장점과 NoSQL의 장점을 한데 모은 데이터베이스계의 신기술이라고 할 수 있습니다. 동그라미의 크기가 크면 클수록 성능이 더 좋은 데이터베이스라는 의미입니다. 

 

그림만 보면 위에서도 언급했지만 빠른 속도를 보여줍니다. 아무래도 NoSQL만의 수평적인 확장으로인해 데이터를 쉽고 빠르게 접근하고 읽고 쓸 수 있는 것 같습니다. 

 

저자도 설명했지만 데이터베이스 성능같은 것은 많은 요인에 의해 변할 수 있습니다. CPU의 코어 개수에도 영향을 크게 받고, 스레드가 멀티스레드인지도 영향을 많이받고, 유저가 동시에 요청을 하는 경우에도 큰 영향을 보입니다. 

 

하지만 사업을 새로 시작할 때나 우리 애플리케이션의 도메인에 새로운 데이터베이스를 고려하고 있다면 위의 결과를 충분히 검토하고 결정할 수도 있을 것 같습니다. 

 

 

MicroService Architecture의 저변확대에 따른 NoSQL의 최신동향

구글 트렌드에서 검색한 NoSQL 검색어 개수 추이입니다. NoSQL은 1998년도에 SQL을 사용하지 않는 경량 데이터베이스 의미로 처음 등장했고, 2009년도 오픈소스 분산데이터의 논의 이벤트를 위한 이름으로 NoSQL이 지금과 같은 의미로 사용되었습니다. 

 

분산 데이터베이스와 함께 2015년에 오픈소스로 등장한 Docker와 MicroService Architecture의 저변확대로 NoSQL을 더 많은 곳에서 사용할 수 있게 되었습니다. 

 

NoSQL은 RDBMS에 비해 속도가 빠르고 수평적으로 확장하는데 큰 이점이 있지만 복잡한 트랜잭션을 사용해야 하거나 보안상의 문제로 사용하는데 큰 부담이 있었던 것은 사실입니다. 

 

하지만 MSA의 등장으로 여러 도메인에서 데이터베이스 서버를 나눠 선택할 수 있었고, 기업들은 각각의 도메인에서 최대로 효율을 낼 수 있는 (서버비가 적게드는) 데이터베이스를 선택하였습니다. 

 

전체적인 데이터베이스 사용추이에 대해서는 아직 NoSQL은 다른 RDBMS에 비해 발끝에도 못미치는 수준이긴 합니다만 NoSQL이 가진 파격적인 장점과 함께 MSA의 저변확대로인해 수많은 기업에서 NoSQL을 적절한 도메인과 맞춰 사용하는 추세인것은 확실해보입니다. 

 

 

여기까지 NoSQL에 대해서 알아봤습니다. 어떠신가요? 저는 RDBMS만 다뤄왔던터라 NoSQL에 대해서는 금시초문이었는데 이번 기회에 좋은 공부가 되었던 것 같습니다. 왜 개발자가 꼭 알아야하는 데이터베이스 기본지식에 NoSQL이 있었는지 대충 감은 잡은 것 같습니다. 

 

이후 NoSQL에서도 많이 사용하는 Redis나 Memcached, 그리고 MongoDB에 대해서도 포스팅 할 예정입니다. 많은 관심 부탁드리면서 여기서 글 마쳐보도록 하겠습니다. 

 

긴 글 읽어주셔서 감사합니다. 오늘도 즐거운 하루 되세요~

 

 

출처

https://www.ibm.com/topics/nosql-databases

 

What are NoSQL Databases? | IBM

NoSQL, also referred to as “not only SQL”, “non-SQL”, is an approach to database design that enables the storage and querying of data outside the traditional structures found in relational databases.

www.ibm.com

=> IBM NoSQL 공식문서

 

https://www.mongodb.com/ko-kr/nosql-explained

 

NoSQL이란 무엇입니까? NoSQL Databases 설명

NoSQL은 먼저 구조를 정의할 필요 없이 데이터를 저장 및 검색하는 데이터베이스 유형으로, 보다 견고한 관계형 데이터베이스의 대안이 될 수 있습니다.

www.mongodb.com

=> MongoDB NoSQL 공식문서

 

https://code-lab1.tistory.com/53

 

[DB] NoSQL이란?, NoSQL 특징, NoSQL 종류, NoSQL 장점

NoSQL이란? NoSQL은 비관계형 데이터베이스를 지칭한다. 즉, 관계형 데이터 모델을 지양 하며 대량의 분산된 데이터를 저장하고 조회하는 데 특화되었으며 스키마 없이 사용 가능하거나 느슨한 스

code-lab1.tistory.com

=> 이미지 출처

 

https://arxiv.org/pdf/2301.01095.pdf

논문 제목 : Database management system performance comparisons : A systematic survey

저자 : Toni Taipalus

doi : https://doi.org/10.48550/arXiv.2301.01095 

 

Database management system performance comparisons: A systematic survey

Efficiency has been a pivotal aspect of the software industry since its inception, as a system that serves the end-user fast, and the service provider cost-efficiently benefits all parties. A database management system (DBMS) is an integral part of effecti

arxiv.org

 

 

https://koreascience.kr/article/JAKO201530360959819.pdf

논문 제목 : NoSQL 데이터베이스 최신 동향

저자 : 권준호

doi : https://koreascience.kr/article/JAKO201530360959819.pdf