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.how | Tailscale 내부망 |
| 운영 랜딩 | https://redis.codebase.how | 공개 소개 |
| 로컬 개발 | http://localhost:7051 | 직접 포트 접근 |
자동 등록 스크립트
RedisInsight는 설치 후 수동으로 DB를 하나씩 등록해야 하지만, 자동 등록 스크립트를 제공합니다.
실행
# 20+ 프로젝트 Redis를 자동 탐지 + 일괄 등록
ops/scripts/devtools/redisinsight-register.sh
동작 원리
- shared-network 연결 — RedisInsight 컨테이너를
${PLATFORM_NAME}-shared-network에 합류 - Redis 컨테이너 스캔 —
${PLATFORM_NAME}-*-redis패턴으로 도커 목록 조회 - 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 제약 — 아래 참조) |
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'