Node.js Redis 외부 접속하기

9512 단어 node.jsredisnode.js

실제 구조는 ec2 express <-> lightsail이지만
빠른 외부 접속 테스트를 위해 mac express로 확인

1. 코드

// redis.js
const redis = require("redis");
const CONFIG = require("../config/config");

const client = redis.createClient({url: CONFIG.REDIS.URL});
client.on("error", (err) => {
  throw new CustomError(err.message, "500");
});
client.connect();

CONFIG.REDIS.URL 값은 다음과 같다.

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

// ex
redis://localhost:6379
redis://localhost:8999/2
redis://:secrets@example.com:1234/9?foo=bar&baz=qux
// 나는 다음 형식
redis://:비밀번호@Lightsail_IP주소:포트

redis모듈 사용법을 찾다보면 url이 아닌 host, port 옵션 연결이 있었는데, 이건 안됐음.
npm redis 공식 문서를 봐도 url로 사용함

// 접속 안됨
const client = redis.createClient({host: CONFIG.REDIS.HOST, port: CONFIG.REDIS.PORT});

2. Lightsail의 Redis 설정

$ sudo vi /etc/redis/redis.conf 

모든 ip 접속을 허용하는 것이므로 실제로는 어플리케이션 서버 ip만 사용하는게 좋음

# bind 127.0.0.1 ::1
bind 0.0.0.0 ::1 
protected-mode yes

Lightsail에서 redis 기본포트(6379)도 열어준다.

redis 비밀번호 설정

redis가 있는 Lightsail에서 비밀번호를 설정해준다.

$ redis-cli 

redis 127.0.0.1:6379> AUTH "test"
(error) ERR Client sent AUTH, but no password is set # redis 비번 없음

redis 127.0.0.1:6379> CONFIG SET requirepass "사용할_비밀번호"
OK
redis 127.0.0.1:6379> AUTH "사용할_비밀번호"
OK

3. 확인해보기

redis-cli로 원격 접속

mac으로 원격 접속

# 비밀번호 없이 접속
$ redis-cli -h 호스트주소 -p 6379
호스트주소:6379> keys *
(error) NOAUTH Authentication required.

# 비밀번호 사용
$ redis-cli -h 호스트주소 -p 6379 -a "비밀번호"
호스트주소:6379> keys *
(empty array)

Postman + express로 원격 접속 확인하기

url에 비밀번호 없을 때

redis://@Lightsail_IP주소:6379


url에 비밀번호 있으면 정상 동작

redis://:비밀번호@Lightsail_IP주소:6379


redis에도 데이터 삽입 삭제가 잘되어있는걸 확인

4. 참고

https://www.npmjs.com/package/redis
https://zetawiki.com/wiki/Redis_URI
https://xn--lg3bu39b.xn--mk1bu44c/96

좋은 웹페이지 즐겨찾기