Updated:

Redis는 REmote DIctionary Server를 줄인말로, Java의 Map과 같은 방식으로 데이터를 저장하는 데이터베이스이다. 일반적인 관계형 데이터베이스와 다른 가장 큰 특징은 In-Memory 데이터베이스라는 특징이 있다.
 관계형 데이터베이스는 영속성을 제공하는데 목적을 두고 있어 데이터가 사라지지 않게 하기 위해 파일시스템(SSD, HDD)에 저장한다는 의미이며, 컴퓨터가 종료되어도 데이터가 사라지진 않지만 기본적으로 데이터를 읽고 쓰는데 오래걸린다.
 하지만 Redis는 메모리에 데이터를 저장하기 때문에, 복잡한 입출력 과정이 필요하지 않다. 그래서 일반적인 관계형 데이터베이스에 비해 더 빠르게 동작하는 대신, 언제든 사라질 수 있는 데이터를 다룬다는 차이를 가지고 있다. 그래서 특정 게시글의 조회수와 같이 빠르게 업데이트되는 데이터, 또는 사용자 세션, 장바구니와 같은 시간이 지나면 삭제되는 데이터등을 저장하기 위해서 가장 많이 사용된다. 또한 내부적으로 데이터를 저장하는 방식이 RDBMS와 다르다는 특징도 가지고 있다.
 관계형 데이터베이스는 일반적으로 테이블 형식으로 데이터를 저장하고, 그 데이터를 회수하기 위해 SQL을 사용한다. 반면 Redis는 단순 문자열(String)부터, 리스트, 집합, Hash 등 다양한 형태의 데이터를 저장하며, 이 데이터를 회수하기 위해 SQL을 사용하지 않는다.

SET greeting "Hello, Redis!"
GET greeting

 Redis는 대표적인 NoSQL 데이터베이스이다. NoSQL은 데이터베이스를 만드는 접근법의 일종으로, Not only SQL을 의미한다. 이들은 일반적인 관계형 데이터베이스가 약점을 가진 확장성, 유연성, 성능에 대한 문제를 해결하기 위해 사용되는 경우가 많으며, 컴퓨터 기술의 발전과 웹의 활성화로 인해 비정형 데이터를 더 높은 성능으로 사용하는데 초점이 맞춰진 경우가 많다.
 스키마와 SQL을 사용하는 관계형 데이터베이스와 달리, NoSQL 데이터베이스는 데이터를 관리하는 방법이 서로 다르며, 사용법도 판이하게 다르다.

  • Key-Value: 가장 단순한 형태의 데이터베이스로, Key에 Value를 저장하는 형태
    • JSON, Python의 Dictionary, Java의 Map의 형태로 데이터를 관리
    • 대표적으로 Redis가 존재
  • Document: 객체를 표현하는 Document라는 단위로 데이터를 저장하는 형태
    • Key - Value에서 발전했다고 볼 수 있으며, JSON, XML 등 복잡한 데이터를 저장하고 관리
    • 대표적으로 MongoDB가 존재
  • Column-Family: 각 Row의 Column이 고정되어있지 않고, 필요한 데이터 Column을 이름, 데이터, Timestamp와 함께 저장하는 형태의 데이터베이스
    • 대표적으로 cassandra가 존재

 관계를 기준으로 데이터를 다루지 않기 때문에 스키마를 만들지 않고, 그렇기 때문에 비정형 대규모 데이터를 매우 빠르게 다룰 수 있다.
 Redis는 NoSQL 중에서도 Key-Value Store로 작동하는 인메모리 데이터베이스로, 지연이 적은 읽기, 쓰기 성능을 가지고있다. 그렇기 때문에 일시적인 데이터, 변경이 잦은 데이터를 다뤄야 되는 상황에서 많이 활용된다.

  • Session Clustering: 여러 애플리케이션 인스턴스에서 같은 세션 정보를 사용할 수 있도록 도와줌
  • Caching: 자주 사용되는 데이터를 저장해두어, 데이터베이스 조회를 줄이고 전반적인 응답속도를 개선
  • 지원하는 다양한 자료구조를 바탕으로 리더보드, 방문수 트래킹, 좌표 기반 검색 등의 기능을 쉽게 구현할 수 있게 해줌

 로컬환경에 Redis를 설치하기 위해서는 Docker를 이용하면 된다. Docker Hub에서 Redis를 검색하면 다음과 같은 결과가 나온다.

  • redis: 여태까지 가장 많이 사용되어 오던 Redis 서버의 핵심(Core)
    • 가장 간단한 형태의 연습을 하고 싶다면 redis를 사용
  • redis/redis-stack-server: 여러 플러그인이 추가된 Redis Stack 서버 이미지
    • 확률형 데이터, JSON 문서 등을 사용하고 싶다면 선택
  • redis/redis-stack: redis/redis-stack-server에 Redis Insight가 추가된 이미지
    • Redis Insight를 같이 사용하고 싶다면 선택

 이번에는 redis-stack 이미지를 사용한다. 다음 docker-compose.yml 파일을 만들고 docker compose up -d 를 진행한다.

services:
  redis-stack:
    image: redis/redis-stack
    container_name: redis-stack-compose
    restart: always
    environment:
      REDIS_ARGS: "--requirepass systempass"
    ports:
      - 6379:6379
      - 8001:8001
  • systempass가 비밀번호의 역할을 한다.

 이제 Intellij와 연결한다.

 위 docker-compose에서 redis Insight도 같이 설치되었다. localhost:8001에 접속하고 redis를 연결하면 다음과 같은 화면을 볼 수 있다.

Redis

실습

Http Session과 Session Clustering

리더보드와 Sorted Set

캐싱

실습

댓글남기기