Redis 로 데이터 반응 빠르게 하기 (선택)
전략이 쓰는 외부 데이터는 기본적으로 **주기 조회**로 들어옵니다. Redis 를 붙이면 새 값이 들어온 순간 에이전트가 깨어나 바로 다시 읽습니다. 값 자체는 언제나 DB 조회로 옵니다 — Redis 로는 "새 값이 들어왔다"는 신호만 다닙니다.
1. 내 구성은 어느 쪽인가
발행하는 쪽(수집기)과 구독하는 쪽(에이전트)이 같은 Redis 를 볼 수 있어야 합니다. 그 조건만 맞으면 어느 방식이든 됩니다.
한 대에 다 있다 — 자체 설치 (가장 간단·무료)
수집기와 에이전트가 같은 서버에 있으면 그 서버에 Redis 를 깔면 끝입니다. 네트워크를 안 타서 가장 빠르고, 주소가 기계 밖으로 나갈 일도 없습니다. 기본 설정이 이미 127.0.0.1 만 듣기 때문에 비밀번호 없이 써도 외부에 열리지 않습니다.
sudo apt install -y redis-server sudo systemctl enable --now redis-server redis-cli ping # PONG
redis://127.0.0.1:6379내 서버가 여러 대다 — 한 대에 두고 사설망으로
수집기와 에이전트가 다른 서버면 한 대에만 Redis 를 두고 나머지가 붙습니다. 같은 클라우드·같은 리전이면 사설망 IP 로 붙이는 게 가장 안전합니다. ★ bind 를 0.0.0.0 으로 열고 비밀번호를 안 걸면 인터넷 스캐너에 금방 잡힙니다. 공인망을 꼭 타야 하면 긴 비밀번호 + 방화벽 + TLS(rediss://) 세 개를 다 거세요.
# /etc/redis/redis.conf bind 10.0.0.5 127.0.0.1 # ★ 0.0.0.0 금지 requirepass <긴-무작위-비밀번호> # 방화벽: 내 서버 IP 만 6379 허용
redis://:비밀번호@10.0.0.5:6379네트워크가 갈린다 — 관리형 무료 티어
수집기와 에이전트가 다른 클라우드·집·회사처럼 서로 못 닿는 곳에 있으면 가운데에 관리형 Redis 를 둡니다. 깨우기는 저장을 거의 안 써서 무료 한도로 충분한 편입니다.
rediss://…남이 발행한다 — 팀·기관에서 직접 쏘기
우리 수집기를 안 써도 됩니다. 채널 이름과 페이로드 규칙만 맞추면 어떤 프로그램이든 발행할 수 있습니다. 채널은 sori:data:v1: 뒤에 표 이름(스키마 제외)을 붙입니다. 페이로드는 커서 힌트일 뿐이라 값을 실어도 쓰이지 않습니다 — 깨어난 쪽은 자기 쿼리를 다시 돌립니다.
PUBLISH sori:data:v1:fear_greed '{"v":1,"last":1757462400000,"n":1}'2. 켜는 순서 — 세 곳이 다 맞아야 켜집니다
하나라도 빠지면 **에러 없이** 주기 조회로 돕니다. 값은 그대로 맞고 지연만 길어져서, 안 켜진 걸 모르고 지나가기 쉽습니다.
발행 쪽 — 수집기에 주소를 알려준다
수집기는 새 행을 넣은 뒤에 발행합니다. 주소가 없으면 발행을 건너뛰고 그 사실을 실행 결과에 적습니다.
# ~/soritrading-fetchers/.env SORI_WAKE_REDIS_URL=redis://127.0.0.1:6379
구독 쪽 — 에이전트에 슬롯을 저장한다
웹에서 별칭과 주소를 넣고 [연결 확인] 을 누르면 그 기기가 실제로 붙는지 바로 답합니다. 주소는 그 기기 키스토어에만 저장됩니다 — 서버로 가지 않고 로그에도 남지 않습니다.
선언 — 어느 표를 어느 슬롯으로 들을지 정한다
같은 화면 아래쪽 [데이터셋 선언] 에서 방식을 redis 로 바꾸고, 슬롯 이름과 표 이름을 채웁니다. 표 이름이 필요한 이유는 채널 이름이 표에서 나오기 때문입니다.
mode: redis · redisAlias: main · tableName: fear_greed
- Redis 는 깨우기일 뿐입니다. 메시지를 놓쳐도(에이전트 재시작 중 등) 다음 주기 조회가 따라잡으므로 값이 틀어지지 않습니다.
- 서버리스 제공사의 REST 엔드포인트로는 구독이 안 됩니다. redis:// 또는 rediss:// 로 시작하는 TCP 주소를 넣으세요.
- 무료 티어가 유휴 연결을 끊으면 조용히 주기 조회로만 돌 수 있습니다. 에이전트는 끊김을 감지해 다시 붙지만, 자주 끊긴다면 그 티어가 이 용도에 안 맞는 것입니다.
- 슬롯 이름과 DB 별칭은 다른 이름공간입니다. 둘 다 'main' 이어도 서로 다른 서버를 가리킵니다.
- 접속 주소는 에이전트 기기에만 저장됩니다. 우리 서버는 이 경로에 없고, 저장·조회 어느 쪽에서도 주소를 받지 않습니다.
- 슬롯을 지워도 이미 열려 있는 구독은 다음 재연결 때 끊깁니다. 그동안에도 값은 같고 지연만 짧습니다.