2 분 소요

EC2 인스턴스에 redis-server가 이미 설치되어 있다는 가정하에 진행한다.

1. Redis Config 설정

redis.conf 파일 열기

ssh 명령어를 이용해 인스턴스에 연결한 뒤 아래 명령어를 실행한다.

sudo vi /etc/redis/redis.conf

redis 접속 비밀번호 설정

🌟 vim 화면에서 단어를 검색하려면 /[단어]를 입력하고 엔터를 친 뒤에 n을 눌러 다음 단어를 찾아나간다.
redis 접속 비밀번호 설정하기 위해 requirepass 옵션을 변경한다.
스크린샷 2022-05-23 오후 12 05 36
n 버튼을 누르다가 이 부분을 찾았다면 requirepass foobared라고 적힌 라인의 주석(#)을 제거하고 foobared 부분에 원하는 비밀번호를 입력한다.

redis에 접속 가능한 ip 주소 설정

redis에 접속 가능한 ip 주소 설정하기 위해 bind 옵션을 변경한다.
스크린샷 2022-05-23 오후 12 06 34
n 버튼을 누르다가 이 부분을 찾았다면 bind 뒤에 있는 127.0.0.1 ::1 부분을 0.0.0.0으로 변경한다.
redis는 bind 옵션에 지정한 ip에서 오는 connection만 허용한다. 현재 127.0.0.1로 되어있으므로 local에서의 연결만 허용한다. 이 값을 0.0.0.0으로 바꿔 모든 ip에서 오는 connection을 허용하도록 한다.

redis가 사용할 max 메모리 설정

redis가 사용할 max 메모리 설정하기 위해 maxmemory 옵션을 변경한다.
스크린샷 2022-05-23 오후 12 09 05
n 버튼을 누르다가 이 부분을 찾았다면 제일 마지막 줄에 있는 maxmemory 라인의 주석(#)을 해제하고 부분에 원하는 max 메모리 값을 입력한다.
내가 생성한 EC2 인스턴스의 메모리 용량이 1GB 밖에 되지 않아 maxmemory를 500mb로 입력했다.
byte 단위의 숫자로 입력해도 되고 500mb, 1gb, 2gb 등의 단위를 포함하여 입력해도 된다.

메모리가 가득 찼을 때 데이터 교체 알고리즘 설정

redis는 인 메모리 데이터베이스이기 때문에 용량이 많이 크지 않다. 그렇기 때문에 데이터가 메모리에 가득 찼을 때 새로운 데이터가 저장된다면 어떤 데이터를 뺄 지에 대한 알고리즘을 설정할 수 있다.
메모리가 가득 찼을 때 데이터 교체 알고리즘을 설정하기 위해 maxmemory 옵션을 변경한다.
스크린샷 2022-05-23 오후 12 10 48
n 버튼을 누르다가 이 부분을 찾았다면 제일 마지막 줄에 있는 maxmemory-policy 라인의 주석(#)을 해제하고 부분에 원하는 데이터 교체 알고리즘 값을 넣는다.
나는 모든 키에 대해서 사용된 지 가장 오래된 데이터를 삭제하는 방법인 allkeys-lru 알고리즘을 선택했다.

redis 실행

redis는 인 메모리 데이터베이스이기 때문에 redis-server가 실행 중인 상태여야 사용할 수 있다.
그렇기 때문에 EC2 인스턴스를 닫아도 redis-server가 계속 실행중인 상태를 유지할 수 있도록 백그라운드 실행을 해야 한다.

sudo systemctl start redis-server

redis-server 실행 이후 redis.conf 파일을 수정했다면 sudo systemctl restart redis-server 명령어를 통해 redis-server를 재시작해야 한다.

2. EC2 포트 개방

포트 설정은 EC2 인스턴스 상세 페이지에서 할 수 있다.

보안 탭 누르기

스크린샷 2022-05-23 오후 12 16 11

인바운드 규칙 편집

스크린샷 2022-05-23 오후 2 23 33
스크린샷 2022-05-23 오후 12 16 47
규칙 추가 버튼을 누르고 위 사진처럼 값들을 입력하고 규칙 저장 버튼을 누른다.
이제 EC2 인스턴스에 모든 외부 IP(0.0.0.0/0)으로부터 6379번 포트로 TCP 연결을 할 수 있도록 설정을 마쳤다.

Redis 원격 접속 확인

외부에서 EC2 인스턴스에 설치된 redis에 접속이 잘 되는지 확인해보자.
로컬 컴퓨터에 redis-cli를 설치하고 아래 명령어를 입력한다.

redis-cli -h [EC2 인스턴스의 IP or DNS] -p 6379 -a [redis.conf에 설정한 비밀번호]

3. 프로젝트 소스코드 변경

redis.js

require('dotenv').config();
const env = process.env;
const redis = require('redis');
const redisClient = redis.createClient({url: env.REDIS_URL});

module.exports = redisClient

.env의 REDIS_URL

REDIS_URL의 형식은 아래와 같다.

redis://[:패스워드@]호스트[:포트][/DB번호][?필드=값]

예시는 다음과 같다.

redis://localhost:6379
redis://localhost:8999/2
redis://:secrets@example.com:1234/9?foo=bar&baz=qux

나는 아래와 같은 형식으로 설정했다.

redis://:비밀번호@EC2_IP주소:포트

만약, 비밀번호가 qwer 이고, ec2 인스턴스의 IP가 11.123.456.789 이고, 포트 번호가 6379 라면…

REDIS_URL=redis://:qwer@11.123.456.789:6379

📝 참고

aryang
wookgu’s repository



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그: ,

카테고리:

업데이트: