Study Note

NoSQL이란? 본문

아키텍처/대용량 아키텍처

NoSQL이란?

moreLearn 2020. 2. 7. 04:07

NoSQL이란

시대에 따라 다르게 요구되는 데이터 저장 기술이 바뀌면서 NoSql이 대두되었다.

RDBMS는 기존 기업의 복잡한 데이터를 저장/분석 하는대 최적화 되었다. 기존의 기업에서 사용된 데이터는 한정된 규모와 복잡한 관계를 가진 데이터였다.

NoSql은 근래에 SNS가 활성화 되고 그에 따라 단순한 형태의  대규모 대이터가 생산되었고 이런 데이터 저장 기술에 대한 요구사항이 바뀌면서 이 대두되었다.

 

대용량 데이터를 가장 많이 보유했던 구글과 아마존에 의해 Bigtable과 Dynamo라는 논문이 발표되면서 새로운 데이터 저장 기술을 만들어내는 시발점이 되었다.

 

NoSql(Not Only SQL)은 RDBMS와 다른 형태의 테이터 저장 구조를 총칭한다. 따라서 제품에 따라 특성이 다르기 때문에 NoSQL을 하나의 제품으로 정의할 수 없다.

 

NoSQL의 특징

 

데이터 간의 관계를 정의하지 않는다.

NoSQL은 RDB 처럼 관계를 가지지 않는다. 데이터 테이블간 관계를 정의하지 않고 조인도 불가능 하다.

 

 

RDBMS에 비해 더 많은 데이터를 저장할 수 있다.

RDB보다 많은 데이터를 저장할 수 있다.

 

분산형 구조

NoSQL은 일발적인 서버 수십 대를 연결해서 데이터를 저장하고 처리 하기 때문에, 데이터를 여러 대의 서버에 분산하여 저장하는 분산형 구조를 사용한다.

분산하여 저장 할때 데이터를 DB서버간에 상호 복제하여 특정 서버가 장애를 일으켰을 때도 데이터 유실이나 서비스 중지되지 않는다.

 

고정되지 않는 테이블 스키마

NoSQL에서는 테이블의 스키마가 유독적이다. RDB와 다른게 Key에 해당하하는 필드가 동일한 타입이며 mandatory인 필드이면 된다. Value에 해당하는 컬럼들은 타입/이름이 달라도 되며 생략 가능하다.

 

데이터베이스 스키마
데이터베이스 에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조이다.
출처 : wikipedia

CAP 이론

CAP 이론은 에릭 브루어 교수에 의해 발표된 분산 컴퓨팅 이론이며 NoSQL은 분산형 구조를 가지고 있기 때문에 CAP 이론이 적용된다.

 

CAP 이론은 다음 특성중 2가지만 만족할 수 있다고 하는 이론이다.

  • 일관성 (Consistency) : 분산된 노드중 같은 시간에 어느 노드로 접근해도 같은 데이터를 가지고 있어야 한다.
  • 가용성 (Availability) : 클러스터링된 노드중 몇몇 노드가 실패하더라도 정삭적으로 요청을 처리 되어야 한다.
  • 분산 허용 (Partition Tolerance) : 클러스터링 노드 간에 통신 장애가 생겨도 정상적으로 서비스가 계속 수행 되어야 한다.

NoSQL 분류

Key/Value Store

NoSQL은 기본적으로 Key/Value 개념을 지원한다.

Key/Value Store는 고유한 Key에 하나의 Value를 가진 형태이다. Value는 String, Integer 같은 Primitive 타입과 Column Family(여러 개의 (Column, Value)로 이루어진 필드)가 될 수 있다.

Key/Value Store는 Collection Framework중 Map과 유사하다.

Key/Value Store에서 Column Family 기반의 데이터 구조

Ordered Key/Value Store

Key/Value Store와 저장 방식은 같지만 키를 순서로 정렬해서 저장한다.

NoSQL에서는 RDBMS의 ORDER BY 같은 정렬 기능이 없기때문에 정렬이 필요할때 매우 유리한 조건이다.

Ordered Key/Value Store에서 Key를 통해 정렬된 테이블 구조

Document Key/Value Store

Key/Value Store와 같지만 Value에 Document 타입이 저장된다.

Document는 XML, Json과 같은 구조화된 데이터 타입으로 복잡한 계층 구조가 가능하다.

 

Document Key/Value Storer의 테이블 구조

NoSQL 사용 시 주의점

NoSQL이 필요한가?

세로운 기술을 사용하기 위한 교육과 개발 비용이 많이 든다. 또한 RDBMS를 사용하더라도 국내 서비스의 대부분을 구현할 수 있다. 이런 것들을 고려해서 NoSQL 필요한지 고민해봐야 한다. RDBMS로 용량이 감당이 안될때 NoSQL로 전환하는 방법도 있다.

 

적절한 NoSQL 제품 선정

NoSQL은 제품마다 특성이 다양하다. 데이터가 정렬되는지, 일관성 적용은 어떻게 되는지, 쓰기 성능은 어떤지 등등 각 제품의 다양한 특성을 확인하고 알맞는 제품을 선택해야 한다.

 

데이터 모델링

NoSQL의 데이터 모델링은 RDB에 정반대로 접근해야 한다.

  1. 수행할 쿼리를 정의하고
  2. 이에 맞는 데이터 테이블을 정의한다.
  3. 또한 일부 중복 데이터를 통해 성능이 향상되기 때문에 중복 데이터도 고려해야 한다.

 

RDBMS와 적절한 혼합

NoSQL은 대용량 데이터를 빠르게 저장하고 검색하기 위해 최적화된 기술이다. 그런 이유로 복잡한 데이터나 쿼리가 필요한 경우 RDBMS를 사용하는게 좋기 때문에 RDBMS를 통해 index성 데이터, 복잡한 쿼리가 필효한 데이터를 저장하고, NoSQL에 실제 데이터를 저장하여 두 DB를 혼합하여 사용하는게 좋다.

 

하드웨어 설계 병행

NoSQL은 대용량 대이터를 처리하고 분산형 구조를 사용하기 때문에 처음부터 하드웨어 설계를 하는 것이 좋다. 

다음과 같은 사항을 고려해 볼 필요가 있다.

  • RAID 구성 고려
  • 데이터 트레픽 부분관리를 위한 NIC의 분리 고려
  • 디스크 수량 고려
  • 충분한 레퍼런스와 검증 이후 하드웨어를 디자인하고 도입

 

운영 및 백업

NoSQL은 분산되어 있기 때문에 기존 RDBMS보다 복잡하고 하드웨어까지 관리/관제 해야한다. 또한 난도가 높은 기술이기 때문에 운영상의 실수로 데이터 유실이 발생할 수 있어 백업 방법도 고려해야 한다.

 

 

이 글은 저: 조대협님의 "대용량 아키텍처와 성능 튜닝"을 읽고 공부한 내용입니다.

이 글은 코드프레소 DevOps Roasting 코스를 수강하면서 작성한 글입니다.

'아키텍처 > 대용량 아키텍처' 카테고리의 다른 글

NoSQL 데이터 모델링 절차  (0) 2020.02.07
NoSQL 데이터 모델링  (0) 2020.02.07