[NODE 강의] Redis

2021. 4. 13. 01:13Dev/Node

반응형

[클립명]

1. Redis 개요

2. Redis 사용하기

3. Redis Node.js

4. Redis 캐싱

오늘은 패캠 강의에서 나온 Redis에 대해 정리를 해보았다. 강의에 없는 내용들은 구글링을 통해 정리했다.

Redis (Remote Dictionary Server)

Redis는 디스크가 아닌 메모리에 Key-Value 형식의 다양한 데이터타입으로 데이터를 저장할 수 있게 해주는 오픈 소스 솔루션이다. 디스크에 저장된 데이터보다 메모리에 저장된 데이터를 꺼내서 사용하는 것이 속도면에서 훨씬 빠르기 때문에 보통 캐싱이나 세션관리에 사용하게 된다고 한다. 

 

웹애플리케이션의 데이터 조회를 모두 DB접근을 통해 쿼리문을 날려서 해결하게 된다면 그만큼 DB서버에 부하가 생길 수 있다. 이럴 때 Redis를 데이터베이스 "앞"에 배치하여 Redis에 데이터가 있다면 바로 꺼내서 사용하고, 만약 없다면 DB를 조회하여 Redis에 담은 후 돌려주고, 나중에 요청이 들어오면 바로 Redis에서 꺼내서 사용할 수 있도록 하면 속도뿐만 아니라 DB서버 부하를 많이 줄일 수 있다고 한다.

 

Redis 사용사례 

캐싱

다른 데이터베이스 "앞"에 배치된 Redis는 성능이 뛰어난 인 메모리 캐시를 생성하여 액세스 지연 시간을 줄이고, 처리량을 늘리며, 관계형 또는 NoSQL 데이터베이스의 부담을 줄여줍니다.

세션 관리

Redis는 세션 관리 작업에 매우 적합합니다. Redis를 세션 키에 대한 적절한 TTL과 함께 빠른 키 값 스토어로 사용하면 간단하게 세션 정보를 관리할 수 있습니다. 세션 관리는 주로 게임, 전자 상거래 웹 사이트, 소셜 미디어 플랫폼을 비롯한 온라인 애플리케이션에 필요합니다.

실시간 순위표

Redis Sorted Set 데이터 구조를 사용하면 요소가 목록에 유지되고 점수에 따라 정렬됩니다. 이를 통해 손쉽게 동적 순위표를 생성하여 게임에서 앞서있는 사람이 누구인지 보여주거나, 좋아요를 가장 많이 받은 메시지를 게시하거나, 선두에 있는 사람이 누구인지 보여주려는 다양한 사례에 사용할 수 있습니다.

 

Redis 설치 (윈도우)

패캠 강의에서는 맥에서 도커를 이용하여 Redis를 설치하는 방법만 나와 있었다.

Redis는 윈도우 설치를 공식적으로 지원하지 않지만, 윈도우에 설치하는 방법 및 실행방법을 구글링해서 간단하게 정리해보았다.

 

1. Redis 설치파일 받기 페이지 이동 ( github.com/microsoftarchive/redis/releases/ )

2. 릴리즈 버전 클릭 후, 아래에서 Redis-x64-x.x.xxx.msi 파일 다운로드 후, 설치 진행

3. redis가 설치된 폴더에서 redis-cli.exe 파일 실행

4. cli 창에서 ping을 입력했을 때, pong이 출력되면 Redis 설치가 완료된 것이다. 이제 Redis 연습은 redis-cli.exe 파일을 실행하여 cli창에서 진행하면 된다.

 

여기까지 Redis가 무엇인지 짧게나마 알아보았고, 윈도우에 redis 설치까지 진행해봤다.

 

🎈Redis에서 지원하는 데이터 자료 구조 

📍String 

  - 가장 일반적인 형태로, key - value 로 저장된다.

  - 저장 : 'set 키 밸류' 명령어로 저장한다. (ex) set a 10  ==> a라는 변수에 "10"을 저장

  - 조회 : 'get 키' 명령어로 값을 조회한다. (ex) get a ===> 10이 출력

  

📍Set 

  - 중복을 허용하지 않는 자료구조이며, 중복된 데이터를 여러번 저장하면 최종 데이터만 저장된다.

  - 한 게시물에 한 사용자가 '좋아요'를 한번만 할 수 있도록 해야 한다면, RDBMS에서는 Unique 조건으로 처리할 수 있지만, 그만큼 DB서버에 부하를 주게 된다. 이럴 때 redis에 Set 자료 구조를 이용하면 쉽게 해결할 수 있다.

  - 저장 : 'sadd 키 밸류' 명령어로 저장 (ex) sadd num_set 1, sadd num_set 2, sadd num_set 3, sadd num_set 3

  - 조회 : 'smembers 키' 명령어로 조회 (ex) smembers num_set  ===> 1, 2, 3 조회 (중복 허용 안함)

 

📍List

  - Array 형식의 데이터 구조이다. 중복을 허용한다.

  - 처음과 끝에 데이터를 추가/삭제 시에는 속도가 빠르지만, 중간에 데이터 추가/삭제는 어려움이 있다.

  - 'lpush 리스트명 밸류' 명령어로 리스트의 왼쪽에 밸류를 추가

  - 'rpush 리스트명 밸류' 명령어로 리스트의 오른쪽에 밸류를 추가

  - lrange 리스트명 시작위치 종료위치 명령어로 리스트의 특정 위치의 밸류값을 조회

 

📍Sorted Set

  - 유저 랭킹, 최근 검색 목록 같은 구현에서 사용할 수 있다. 

  - 중복을 허용하지 않고, 설정된 가중치에 따라 정렬되어 저장된다.

  - 데이터 삽입 : 'ZADD key 점수 value' 명령어로 수행

  - 데이터 조회 : zrange 를 통해 가져올 수 있다.

 

📍Hashes

  - 데이터 저장 : hmset 키 필드 밸류 필드 밸류..  (ex) hmset fruits apple 2000 lemon 1000

    fruits = {

      apple : 2000,

      lemon : 1000

    }

  - 데이터 조회 : hmget 키 필드 필드 (ex) hmget fruits apple lemon ===> 2000, 1000 출력

 

 

Redis ↔ Node.js 연동 

이제 실제로 node.js에서 redis를 연동해보자. 우선 적당한 연습용 폴더를 만들고 npm 초기화를 해준다.

$ npm init -y

redis 모듈을 설치한다.

$ npm install redis

redis 패키지 예제를 참고하여 간단하게 redis에 저장한 fruits이라는 hash 값을 조회하는 코드이다. 위에서 redis-cli를 통해 fruits 값은 저장해둔 상태이기 때문에, '{ apple: '1000', lemon: '2000' }' 가 출력되는 것을 확인할 수 있다. 

const redis = require("redis");
const client = redis.createClient();
//redis가 외부 서버에 있다면, 매개변수로 포트번호와, IP주소를 던진다.
//const client = redis.createClient('4421', 'https://~~~~');

client.on("error", function(error) {
  console.error(error);
});

//hash 구조로 저장된 fruits 키의 모든 값 조회
client.hgetall('fruits', (err, res)=>{
//{ apple: '1000', lemon: '2000' } 가 출력된다.
  console.log(res);
})

redis 사용 시 주의사항은 여러가지가 있지만 그 중 하나는 데이터가 갱신될 때마다 캐싱된 데이터를 변경해줘야 한다는 점이다.

예를 들어, 게시물 작성 시 redis에 저장한 데이터를 게시물 수정 시에는 갱신해주지 않는다면, 캐싱된 데이터는 계속 수정 전의 데이터를 바라보고 있으므로 사용자에게 최신 데이터를 보여줄 수 없다. 따라서, 이런 부분들에 대해 정확하게 파악하여 처리해줘야 한다. 

반응형