본 문서는 2022년 4월 24일 에 작성되었습니다.
Redis 는 Key-Value
쌍으로 이루어진 메모리 기반
데이터 베이스 서비스입니다.
Redis 는 Linux
MacOs
Windows
등의 대다수 환경에서 사용할 수 있습니다.
하지만, Windows 에서는 직접적인 지원을 해주지 않기 때문에 WSL2
Chocolaty
등을 사용하거나 별도의 tporadowki/redis
등의 릴리즈 팀의 Repo 에서 다운받아 사용할 수 있습니다.
Redis 5.0.14.1 (64bit)
버전을 사용하고 있습니다.
*.zip
파일을 프로그램 폴더에 풀어줍니다.redis-server.exe
reids-cle.exe
순으로 실행해줍니다.ping
을 입력하면 pong
이 나와야 합니다.Redis 의 기본 비밀번호 설정법입니다.
config get requirepassword
로 확인할 수 있습니다.
config set requirepassword 변경할_비밀번호
로 변경할 수 있습니다.
auth confirm_password
로 로그인할 수 있습니다.
redis@4.0.6
을 사용하여 Node Application 과 redis 를 연결할 수 있습니다.
공식 문서나 여러 블로그에서 작성되어있는 기본적인 연결 방법입니다.
연결 성공 및 실패 시, 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);
});
이러한 민감성 보안 정보는 일반적으로 환경변수 파일에 숨겨야 합니다.
// ./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
와 같이 구현해도 정상적으로 작동하는 것을 확이할 수 있을 것입니다.
하지만 해당 부분은 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() );