반응형
SMALL
NoSQL의 등장 배경
소프트웨어 아키텍처의 변화와, 이로 인해 현대의 데이터 저장소가 어떤 요구 사항에 직면했는지 알아본다.
모놀리틱 아키텍처
- 전통적인 소프트웨어 개발 모델
- 전체 애플리케이션을 하나의 통합된 패키지로 개발, 배포하는 방식
- 작은 규모의 프로젝트나 애플리케이션에서 용이함
마이크로서비스 아키텍처
- 독립된 각각의 모듈을 조립해 하나의 서비스를 만드는 아키텍처
- 기능별로 작게 나뉘어진 서비스가 독립적으로 동작하는 서비스
- 업데이트, 테스트, 배포, 확장은 각 서비스별로 독립적으로 수행 가능함
- 빠르게 성장하는 프로젝트에 용이함
데이터 저장소 요구 사항의 변화
- 모놀리틱 서비스에서 가장 많이 사용되어 왔던 데이터베이스는 RDBMS
- 최근 비정형 데이터가 증가하는 추세 (시계열 데이터, JSON 데이터 등)
- NoSQL을 사용하면 필요할 때 바로 데이터 구조를 바꿀 수 있어 더 빠른 개발이 가능하다.
NoSQL이란?
대부분의 NoSQL이 갖고 있는 일반적인 특징을 알아본다.
실시간 응답
- 연구 자료에 의하면 100ms가 넘어가면 지연이 있다고 인지됨
- 발생할 수 있는 지연은 0~1ms 이내여아 함
확장성
- 예상치 못한 이벤트로 인한 트랜잭션의 증가에 유연하게 확장 가능
고가용성
- 데이터 저장소는 장애 상황에서 신속하게 복구돼 항상 사용할 수 있는 상태를 유지해야 함
클라우드 네이티브
- 클라우드 제공 업체에서 DBaas 제공
- 데이터베이스를 직접 설치, 운영할 필요 없이 설치된 상품을 바로 사용 가능
단순성
- 서비스별로 적절한 데이터 모델 사용이 권장됨
유연성
- NoSQL은 상대적으로 다양한 방식으로 비정형 데이터를 저장할 수 있는 방법을 제공
NoSQL 데이터 저장소 유형
대표적인 데이터 저장 방식의 각 저장 유형별 특징과 사용 사례에 대해 알아본다.
그래프 유형
- 엔티티 간의 관계를 효율적으로 저장하도록 설계
- 노드(node), 에지(edges), 속성(properties)
- 노드: 데이터의 엔티티
- 에지: 데이터 사이의 관계
- 추천 서비스, 사기 감지, 소셜 미디어, 네트워크 및 IT 운영 등의 상황에서 유용함
칼럼 유형
- 행(row)이 아닌 열(column)을 기준으로 저장
- 데이터는 하나의 열에 중첩된 키-값 형태로 저장됨 (유연한 스키마 가능)
- 데이터 웨어하우스, 분석, 보고, 빅데이터 처리에 적합함
- Apache Cassandra, HBase 등
문서 유형
- JSON 형태로 데이터가 저장돼, 개발자들이 편하게 사용할 수 있는 구조
- 모든 값은 항상 키와 연결되는 계층적 트리와 같은 구조를 가짐
- 데이터를 저장, 검색하는데 효과적임
- MongoDB, CouchDB, AWS의 DocumentDB 등
키-값 유형
- 가장 단순하고 빠름
- 모든 값은 키에 연결돼 있으며, 키 자체도 유의미한 데이터
- 키를 사용해 값을 검색할 수 있고, 키를 삭제하면 값도 삭제됨
- 빠른 데이터 액세스와 처리 속도를 보장함
- 레디스, AWS의 ElastiCache, AWS의 DynamoDB, Oracle NoSQL Database, Memcached 등
레디스란?
고성능 키-값 유형의 인메모리 NoSQL 데이터베이스로, 오픈 소스 기반의 데이터 저장소
레디스의 특징
- 실시간 응답(빠른 성능): 디스크 접근보다 메모리 접근 속도가 현저히 빠름
- 단순성: 다양한 자료 구조 지원
- 고가용성: 자체적으로 HA 지원
- 확장성: 수평적 확장 가능
- 클라우드 네이티브 - 멀티 클라우드: 클라우드 네이티브 환경에서 빠른 데이터 액세스 및 처리를 지원하는 구조
마이크로서비스 아키텍처와 레디스
MSA에서 Redis가 어떻게 활용될 수 있는지 알아본다.
데이터 저장소로서의 레디스
- 설치가 간편하고, 최소한의 리소스로 막대한 처리량을 낼 수 있으며, 다양한 자료 구조를 제공하면서도 사용이 간단함
- 레디스의 데이터는 AOF나 RDB 형식으로 디스크에 주기적으로 저장 가능 (장애 시 데이터 복구 가능)
메시지 브로커로서의 레디스
- pub/sub 기능은 가장 간단한 메시징 기능으로, 굉장히 빠르게 동작하며 간단하게 사용 가능
- fire-and-forget 패턴이 필요한 간단한 알림 서비스에서 유용하게 사용 가능
- list 자료 구조에서 데이터는 빠르게 push/pop을 할 수 있으며, 애플리케이션은 대기하다가 list에 새로운 데이터가 들어오면 읽어갈 수 있는 블로킹 기능을 사용 가능
- stream 자료 구조를 이용하면 레디스를 완벽한 스트림 플랫폼으로 사용 가능
- 데이터는 계속해서 추가되는 방식으로 저장 (append-only)
- 데이터의 분산 처리 가능
- 저장된 데이터를 시간대별로 검색 가능
References
https://twojun-space.tistory.com/117
https://velog.io/@yejin20/DB-DB-%EC%9A%A9%EC%96%B4-%EC%A0%95%EB%A6%AC
https://blog.voidmainvoid.net/231
https://hazelcast.com/glossary/key-value-store/
반응형
LIST
'독서 > 개발자를 위한 레디스' 카테고리의 다른 글
[개발자를 위한 레디스] 6장 레디스를 메시지 브로커로 사용하기 (0) | 2024.10.29 |
---|---|
[개발자를 위한 레디스] 5장 레디스를 캐시로 사용하기 (0) | 2024.10.19 |
[개발자를 위한 레디스] 4장 레디스 자료 구조 활용 사례 (0) | 2024.10.06 |
[개발자를 위한 레디스] 3장 레디스 기본 개념 (13) | 2024.09.14 |
[개발자를 위한 레디스] 2장 레디스 시작하기 (0) | 2024.08.25 |