Redis - 관계형 데이터베이스와의 차이점 중심

taehee kim·2023년 1월 14일
0

redis

목록 보기
3/4

Redis란

  • Remote Dictionary Server
  • 데이터 저장소
  • Database: 백업을 통한 영속성 제공
  • Middleware

Redis로 할 수 있는 것

  • In-memory 데이터베이스로서 빠른 조회 데이터 저장소로 활용 가능.
  • 분산된 서버들 간의 커뮤니케이션
    • Pub-Sub, Clustered Session(분산 데이터 저장소로서 활용)
  • 내장된 자료구조로 기능구현에 활용할 수 있음.

Redis Key-value 구조의 장점과 단점

장점

  • 단순성에서 오는 쉬운 구현
  • Hash를 사용해 값을 읽기 때문에 속도가 매우 빠름
    • RDB의 Select 문의 경우에는 join, where 등의 여러 구문과 결합되어 사용되어 조회 시 처리가 비교적 오래걸림.
  • 분산 환경에서의 수평적 확장성

단점

  • Key를 통해서만 값을 읽을 수 있음.
    • RDB처럼 데이터를 다채롭게 검색하는 것이 불가능함.

NOSQL 과 RDB의 차이

관계형 DB란?

관계(relation)

  • 테이블이라고 말하는 것이 관계이며 attribute(속성)으로 이루어져 있다.
  • RDB에서 관계를 테이블 간의 관계만을 의미한다고 생각하는 경우가 있지만 기본적으로는 attribute간의 관계를 의미하는 것이다.
  • 즉, 속성으로 이루어진 relation, 테이블 형태로 데이터를 저장하는 DB가 관계형 DB이다.

테이블간의 관계

  • 테이블 내에서 속성들이 연관되는 것처럼 테이블들도 서로 연관될 수 있다.
  • 일대다, 일대일, 다대다 등.

NOSQL과의 차이점

  • 관계가 정의 되어있다는 점이 근본적인 차이점이다.
  • NOSQL에서는 관계가 정의 되지 않고 특정 형태로 데이터를 저장한다.
  • 관계가 있기 때문에 RDB에서는 Select문과 같은 형태를 통해 복잡한 질의를 수행하여 데이터를 검색할 수 있고 무결성을 제약하여 데이터의 무결성을 높일 수 있다.

RDB 장점과 단점

  • RDB 장점과 단점도 결국에는 관계가 있기 때문에 발생한다.

장점

  • 무결성 제약조건을 두어 데이터 무결성을 유지할 수 있다.
  • 관계를 기반으로 복잡한 질의를 수행할 수 있다.

단점

  • 관계가 명확한 고정된 스키마를 정의해야함.
  • 관계를 기반으로 조회 시 테이블들을 join하여 가져와야 할 때 많은 연산이 수행됨.
  • 데이터들이 복잡한 관계를 맺고 있기 때문에 수평적 확장성이 떨어짐.

NOSQL을 사용하는 것이 적합한 경우

  • 데이터의 스키마를 고정하여 데이터 무결성을 강화할 필요 없고 오히려 스키마가 유연하게 변경해야하는 경우
  • 분산 환경을 구축해야하는 경우.

NOSQL의 종류

  • key-value
    • Redis, Memcached, DynamoDB
  • Document(JSON)
    • MongoDB, CouchDB
  • Wide-column: 레코드마다 다른 컬럼을 가질 수 있음.
    • Cassandra, HBase, Google BigTable
  • Graph:
    • Neo4j, OrientDB

Redis의 사용 목적

DBMS로서

  • 데이터를 저장할 수 있고 백업을 통해 영속성을 제공할 수는 있음.
  • 하지만, 영속성을 오래 제공하는 방향으로 운영할 경우 오히려 성능이 매우 떨어지기 일반적으로 DBMS로 활용하지는 않음.

Remote Heap로서

  • 여러 분산 application에서 공유하는 Heap Memory처럼 활용할 수 있음.
    • 이 경우 data Consistency를 제공할 수 있음.
  • 대표적으로 Clustered Session기능을 제공.

Middleware로서

  • 여러 자료구조를 제공하여 복잡한 로직을 쉽게 구현할 수 있도록함.

In-memory

  • 인 메모리 형태로 데이터를 저장하기 때문에 조회 속도를 높이는데 분산 캐시로서 활용할 수 있음.

Spring에서 Redis를 활용하는법

  • Spring Data Redis의 추상화 기능 활용
    • Redis Client는 Lettuce 구현체 활용 (Jedis는 성능이 매우 떨어지며 업데이트 되고 있지 않음) - 관련 링크
    • Cache Manager Redis 구현체 등록 한 이후
      • @Cacheable등의 annotation을 활용.
      • 단순 캐싱 기능을 제공하려고 하는 경우 AOP를 통해 캐싱 로직 구현이라는 관심사를 분리하고 비지니스로직을 작성하는것에 집중할 수 있기 때문에 이 방법이 적합.
    • RedisTemplate Bean객체로 등록하여 사용.
      • redis 커맨드를 직접 사용할 수 있기 때문에 단순 캐싱 목적이 아닐 경우 주로 활용.
profile
Fail Fast

0개의 댓글