본문으로 건너뛰기

RedisInsight

모든 프로젝트의 Redis 인스턴스를 단일 웹 UI에서 통합 관리하는 도구입니다.

개요

항목내용
위치workspace/_devtools/redisinsight/
용도Redis 20+ 인스턴스 통합 관리 (캐시/세션/큐 시각화)
기반 이미지redis/redisinsight:2.58
포트7051
어드민 도메인redis.devtools.codebase.how (🔒 Tailscale 제한)
랜딩 도메인redis.codebase.how (🌐 공개 소개)

주요 기능

  • 다중 DB 관리 — 20+ 프로젝트 Redis 인스턴스 동시 모니터링
  • 자동 등록auto-register.sh 스크립트로 shared-network 내 Redis 컨테이너 일괄 등록
  • 시각적 쿼리 빌더 — CLI 없이 GUI로 Keys/Hash/Set/Stream 탐색
  • Slow log / Latency 분석 — 성능 병목 감지
  • 메모리 분석 — 큰 Key 식별, TTL 관리
  • Pub/Sub 뷰어 — 실시간 메시지 흐름 관찰

시작하기

# 컨테이너 시작
make up NAME=_devtools/redisinsight

# 상태 확인
make status NAME=_devtools/redisinsight

# 로그
make logs NAME=_devtools/redisinsight

접속

용도URL비고
운영 어드민https://redis.devtools.codebase.howTailscale 내부망
운영 랜딩https://redis.codebase.how공개 소개
로컬 개발http://localhost:7051직접 포트 접근

자동 등록 스크립트

RedisInsight는 설치 후 수동으로 DB를 하나씩 등록해야 하지만, 자동 등록 스크립트를 제공합니다.

실행

# 20+ 프로젝트 Redis를 자동 탐지 + 일괄 등록
ops/scripts/devtools/redisinsight-register.sh

동작 원리

  1. shared-network 연결 — RedisInsight 컨테이너를 ${PLATFORM_NAME}-shared-network에 합류
  2. Redis 컨테이너 스캔${PLATFORM_NAME}-*-redis 패턴으로 도커 목록 조회
  3. REST API 호출 — RedisInsight API로 각 인스턴스 일괄 등록
# 스크립트 구조 예시
for redis_container in $(docker ps --format "{{.Names}}" | grep -- "-redis$"); do
host="$redis_container" # Docker DNS로 자동 해석
curl -X POST http://localhost:7051/api/databases \
-H "Content-Type: application/json" \
-d "{\"host\": \"$host\", \"port\": 6379, \"name\": \"$redis_container\"}"
done

새 프로젝트 추가 시

# 신규 Redis 컨테이너 추가된 후 재실행
ops/scripts/devtools/redisinsight-register.sh

이미 등록된 DB는 중복 건너뛰고 신규만 추가됩니다.

네트워크 구성

┌────────────────────────────────────────────────┐
│ ${PLATFORM_NAME}-shared-network │
│ │
│ msk-redisinsight │
│ │ │
│ ├──▶ msk-demo-redis:6379 │
│ ├──▶ msk-quant-how-redis:6379 │
│ ├──▶ msk-apis-how-redis:6379 │
│ └──▶ ... (20+ 프로젝트) │
└────────────────────────────────────────────────┘

shared-network 덕분에 Redis 인스턴스들의 호스트 이름(msk-{project}-redis)을 그대로 사용할 수 있습니다.

보안

항목설정
어드민 URL 접근NPM Access List — Tailscale 100.64.0.0/10 IP만 허용
인증RedisInsight 내부 Basic Auth (선택, 2차 보호)
Encrypt sensitive data⚠️ 비활성 (Docker 제약 — 아래 참조)
Encrypt Sensitive Information 비활성 사유

RedisInsight는 연결 정보(비밀번호)를 기본적으로 디스크에 AES 암호화하여 저장하려 하지만, Docker 볼륨 환경에서는 암호화 키 유지가 어려워 비활성화 상태입니다.

상쇄 수단: .devtools. 서브도메인을 Tailscale IP 제한으로 외부 접근 자체를 차단 → 비밀번호 평문 저장 위험을 내부망 한정으로 축소합니다.

환경변수 (.env)

# RedisInsight 포트
DEVTOOLS_REDIS_INSIGHT_PORT=7051

# 어드민 URL (운영 기준)
PLATFORM_REDIS_ADMIN_URL=https://redis.devtools.codebase.how

# 랜딩 URL
PLATFORM_REDIS_URL=https://redis.codebase.how

사용 시나리오

1. 캐시 히트율 분석

KEYS 패턴별 분포 확인 → TTL 관리 → 메모리 사용량 추세

2. 세션 저장소 관리

세션 키 스캔 → 만료 임박 세션 확인 → 강제 갱신/삭제

3. 큐 모니터링

Laravel Horizon의 `queues:*` 키 탐색
→ 병목 큐 식별 → 워커 스케일링 결정

4. Pub/Sub 디버깅

실시간 채널 구독 → 메시지 흐름 검증 → 이벤트 누락 여부 확인

백업 및 복원

RedisInsight 자체 설정(등록된 DB 목록)은 컨테이너 볼륨에 저장됩니다:

# 볼륨 백업
docker run --rm \
-v msk-redisinsight_data:/source \
-v $(pwd):/backup \
alpine tar czf /backup/redisinsight-backup.tar.gz -C /source .

주의: 실제 Redis 데이터는 각 프로젝트의 Redis 컨테이너에 있으며 RedisInsight에는 메타데이터만 저장됩니다.

자주 묻는 질문

Q. auto-register.sh가 일부 Redis만 등록됩니다.

A. 해당 Redis 컨테이너가 shared-network에 속해있는지 확인하세요:

docker network inspect ${PLATFORM_NAME}-shared-network | grep Name

누락된 컨테이너가 있으면 해당 프로젝트의 _docker/docker-compose.*.yml의 Redis 서비스에 networks: [default, shared] 추가.

Q. 비밀번호가 설정된 Redis는 어떻게 등록하나요?

A. 스크립트에서 password 필드 추가:

{
"host": "msk-secure-redis",
"port": 6379,
"name": "secure-project",
"password": "..."
}

또는 RedisInsight UI에서 해당 DB를 선택 후 Edit → Credentials 입력.

Q. 로컬 개발 Redis (localhost:6379)도 등록 가능한가요?

A. 가능하지만 Docker 컨테이너 내부에서 localhost는 컨테이너 자신을 가리킵니다. 호스트 Redis에 접근하려면 host.docker.internal 사용:

docker exec msk-redisinsight sh -c 'ping -c1 host.docker.internal'

관련 문서