본문 바로가기

독서/개발자를 위한 레디스

[개발자를 위한 레디스] 1장 마이크로서비스 아키텍처와 레디스

반응형
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://continuous-development.tistory.com/entry/Graph-DB%EA%B7%B8%EB%9E%98%ED%94%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B2%A0%EC%9D%B4%EC%8A%A4Graph-Database%EB%9E%80-%EC%A0%95%EC%9D%98-%EC%9E%A5%EC%A0%90-%EC%82%AC%EB%A1%80

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