Redis Series

공부의 기록·2022년 4월 24일
0

DB Redis

목록 보기
1/1

Introduce

본 문서는 2022년 4월 24일 에 작성되었습니다.

Redis 는 Key-Value 쌍으로 이루어진 메모리 기반 데이터 베이스 서비스입니다.


Setting

Redis 는 Linux MacOs Windows 등의 대다수 환경에서 사용할 수 있습니다.

하지만, Windows 에서는 직접적인 지원을 해주지 않기 때문에 WSL2 Chocolaty 등을 사용하거나 별도의 tporadowki/redis 등의 릴리즈 팀의 Repo 에서 다운받아 사용할 수 있습니다.

Installation

Redis 5.0.14.1 (64bit) 버전을 사용하고 있습니다.

  1. *.zip 파일을 프로그램 폴더에 풀어줍니다.
  2. 해당 폴더의 경로를 환경변수에 등록해줍니다.
  3. redis-server.exe reids-cle.exe 순으로 실행해줍니다.
  4. redis-cli.exe 에서 ping 을 입력하면 pong 이 나와야 합니다.

Account

Redis 의 기본 비밀번호 설정법입니다.

get password

config get requirepassword 로 확인할 수 있습니다.

set password

config set requirepassword 변경할_비밀번호 로 변경할 수 있습니다.

auth

auth confirm_password 로 로그인할 수 있습니다.


Usage

redis@4.0.6 을 사용하여 Node Application 과 redis 를 연결할 수 있습니다.

  1. 환경변수가 없이 사용
  2. 환경변수와 함께 사용
  3. 환경변수와 함꼐 사용 + 테스트 코드 대비

Without ENV

공식 문서나 여러 블로그에서 작성되어있는 기본적인 연결 방법입니다.

연결 성공 및 실패 시, then catch 문법으로 확인할 수 있습니다.
혹은 공식문서에서 처럼 redis 인스턴스의 on 메서드 를 이용하여 사용할 수 있습니다.

// ./src/get.redis.js
import redis from 'redis';

export const getRedisDB = async () => {
  await redis.createClient({
    host: '127.0.0.1',
    port: 6379,
    database: 0 // Redis 에서 사용할 DB 번호,
    password: 'password1234' // Redis 에 설정할 비밀번호
  })
  .then(() => console.log('Redis is running on Local')
  .catch(error => console.log('Reddis is stucked on Local' + JSON.stringify(error);
});

With ENV

이러한 민감성 보안 정보는 일반적으로 환경변수 파일에 숨겨야 합니다.

// ./src/get.redis.js
export const getRedis = async () => {
  await redis.createClient({
    host: process.env.REDIS_HOST,
    port: process.env.REDIS_PORT,
    database: process.env.REDIS_ID,
    password: process.env.REDIS_PW,
  })
  .then(() => console.log('Redis is running on Local')
  .catch(error => console.log('Reddis is stucked on Local' + JSON.stringify(error);
};

With ENV + Test Code

여기서부터는 테스트 코드 작성 시 의존성 부분을 해결하기 위한 기법입니다.

With ENV 와 같이 구현해도 정상적으로 작동하는 것을 확이할 수 있을 것입니다.

하지만 해당 부분은 Input - Output 에 대한 테스트 검증이 어렵다고 생각합니다.

따라서 환경변수를 직접 호출 하는 것이 아니라 매개변수 로 받아와야 합니다.

나아가서 하나의 환경변수 객체 를 리턴하는 함수를 만들어 깔끔하게 구현할 수 있습니다.

// ./src/get.redis.js
export const getRedis = async (REDIS) => {
  const redisClient = await redis.createClient({
    host: REDIS.REDIS_HOST,
    port: REDIS.REDIS_PORT,
    database: REDIS.REDIS_ID,
    password: REDIS.REDIS_PW,
  })
  .then(() => console.log('Reddis is running on Local')
  .catch(error => console.log('Reddis is stucked on local' + JSON.stringify(error);
};

// ./src/get.redis.options.js
export const getRedisOptions = () => ({
  REDIS_HOST: process.env.REDIS_HOST,
  REDIS_PORT: process.env.REDIS_PORT,
  REDIS_ID: process.env.REDIS_ID,
  REDIS_PW: process.env.REDIS_PW
});

// ./src/app.js
getRedis( getRedisOptions() );

References

  1. 공식 문서 | Redis Docs
  2. 지원 문서(NODE) | Redis Docs in Node
  3. 제로초 문서 | Zero cho - Redis
  4. JWT 구현과 Redis | Express에서 JWT로 인증시스템 구현하기 ( Access Token과 Refresh Token )
  5. JWT 구현 이론에 대하여 | JWT(Json Web Token 인증방식
  6. 이벤트 브로커(Kafka) 와 메세지 브로커(Redis Queue) |
    카프카, 레빗엠큐, 레디스 큐의 큰 차이점! 이벤트 브로커와 메시지 브로커에 대해 알아봅시다.
profile
2022년 12월 9일 부터 노션 페이지에서 작성을 이어가고 있습니다.

0개의 댓글