Node.js Redis 외부 접속하기
실제 구조는 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
Author And Source
이 문제에 관하여(Node.js Redis 외부 접속하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@c1typ0p/Node.js-Redis-외부-접속저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)