
monitor v0.41.0
이상 탐지, ACL 감사 및 Prometheus 메트릭 내보내기를 지원하는 Valkey 및 Redis 데이터베이스용 실시간 모니터링 및 slowlog 분석 도구입니다.
BetterDB Monitor
Valkey가 마땅히 받아야 할 모니터링 레이어.
BetterDB는 Valkey가 버려버리는 것들(slowlog, 명령 패턴, 클라이언트 활동, 이상 신호)을 영속화하여, 지금 일어나고 있는 일뿐만 아니라 새벽 3시에 무슨 일이 있었는지도 디버깅할 수 있게 해줍니다. COMMANDLOG, CLUSTER SLOT-STATS, 스레드별 I/O 메트릭을 기본 지원하는 Valkey 8.x용으로 제작되었습니다. 그 외의 모든 기능은 Redis 6+와 호환됩니다.
웹사이트 | Docker Hub | npm | 문서 | 블로그
BetterDB는 OCV Open Charter에 따라 운영되는 공익 법인인 BetterDB Inc.가 구축했습니다.

빠른 시작 (Docker)```bash
docker run -d --name betterdb -p 3001:3001 betterdb/monitor:latest
브라우저에서 `http://localhost:3001`로 접속하세요. 특정 인스턴스를 모니터링하려면:```bash
docker run -d \
--name betterdb \
-p 3001:3001 \
-e DB_HOST=your-valkey-host \
-e DB_PORT=6379 \
-e DB_PASSWORD=your-password \
betterdb/monitor:latest
호스트 머신의 데이터베이스에 연결하시나요? 컨테이너 내부에서
localhost는 컨테이너 자체를 가리키며 호스트가 아닙니다 — 따라서 데이터베이스 호스트로host.docker.internal을 사용하세요. **Docker Desktop (macOS/Windows)**에서는 기본적으로 동작하며, Linux에서는docker run명령에--add-host=host.docker.internal:host-gateway를 추가하여 이름이 해석되도록 해야 합니다. 대시보드의 원클릭 "로컬 인스턴스에 연결" 버튼은 이를 자동으로 감지하여 올바른 호스트를 미리 채워줍니다.
두 가지 이미지 변형이 게시되며, 둘 다 멀티 아키텍처(linux/amd64, linux/arm64)를 지원합니다:
| 태그 | 설명 |
|---|---|
latest, X.Y.Z-no-ai | 기본 이미지 - 모든 모니터링 기능 포함, 실험적인 로컬 LLM AI 헬퍼를 위한 종속성은 제외 |
X.Y.Z | 실험적인 AI 헬퍼 추가 (자체 Ollama 필요, AI_ENABLED로 기본 비활성화) |
영구 스토리지, 사용자 지정 포트, 라이선스 및 에어갭 환경에 대해서는 Docker 프로덕션 배포를 참조하세요.
빠른 시작 (Kubernetes / Helm)```bash
helm repo add betterdb https://docs.betterdb.com/charts
helm repo update
helm install betterdb-monitor betterdb/betterdb-monitor
--namespace betterdb --create-namespace
--set db.host=my-valkey.default.svc.cluster.local
--set db.password=yourpassword
그런 다음 `kubectl port-forward -n betterdb svc/betterdb-monitor 3001:3001`을 실행하고 `http://localhost:3001`을 열거나 차트의 인그레스를 활성화하세요. PostgreSQL 기반 히스토리, 자체 보유 Secrets, 그리고 에어갭 라이선싱은 모두 [Kubernetes 가이드](https://docs.betterdb.com/kubernetes)와 [차트 README](https://github.com/betterdb-inc/monitor/blob/master/charts/betterdb-monitor/README.md)에서 다룹니다.
## 빠른 시작 (CLI)
Docker 없이 BetterDB Monitor를 실행하세요:```bash
npx @betterdb/monitor
첫 실행 시 대화형 설정 마법사가 데이터베이스 연결, 저장 백엔드(SQLite, PostgreSQL 또는 인메모리), 서버 설정을 안내합니다. 구성은 ~/.betterdb/config.json에 저장됩니다.```bash
npm install -g @betterdb/monitor # global install
betterdb --setup # re-run setup wizard
betterdb --port 8080 # override server port
betterdb --db-host 1.2.3.4 # override database host
betterdb --help # all options
Node.js >= 20.0.0과 모니터링 대상 Valkey 또는 Redis 인스턴스가 필요합니다. SQLite 저장소를 사용하려면 `npm install -g better-sqlite3`도 필요합니다.
## 제공 기능
### 모든 것을 보고, 모든 것을 보존
- **히스토리 분석** - 모든 시간 범위에 걸쳐 slowlog, 명령 패턴, 클라이언트 활동, 지연 시간을 조회할 수 있습니다. 로그 순환 후 사라지던 데이터를 그대로 유지합니다.
- **COMMANDLOG 지원** - Valkey 8.1+ 전용 기능입니다. 느린 요청뿐만 아니라 대용량 요청과 대용량 응답도 기록합니다.
- **MONITOR 캡처 세션** - 필요 시 실시간 트래픽을 기록합니다: 실시간 추적, 필터링, 재생, JSON/CSV 내보내기, 연결 기록과의 교차 참조가 가능합니다.
- **핫 키 추적** - 접근 빈도 기준 상위 키와 시간에 따른 순위 변동을 표시합니다. Key Analytics(Pro, 조기 액세스 기간 무료)는 실시간 샘플링을 통해 유형, TTL, 크기 분포를 추가로 제공합니다.
- **클러스터 가시성** - 토폴로지 그래프, SLOT-STATS 히트맵, 슬롯별 CPU 및 키 분포를 제공합니다.
- **CPU 및 I/O 스레드 메트릭** - 어떤 Redis 도구도 제공하지 못하는 스레드별 가시성을 제공합니다.
- **클라이언트 분석** - 클라이언트 이름과 패턴별로 어떤 서비스가 무엇을 담당하는지 정확히 확인할 수 있습니다.
- **ACL 감사 추적** - 누가 무엇에 접근했는지 추적하고, 규정 준수 및 사고 후 디버깅을 위해 영구 보존합니다.
### 이해하고 대응
- **이상 탐지**(Pro, 조기 액세스 기간 무료) - 상관 이벤트와 평이한 영어 진단을 포함한 자동 기준선 학습을 제공합니다. 20개 이상의 탐지기, 수동 임계값 불필요.
- **용량 예측** - 메모리, ops/sec, CPU, 단편화에 대한 예상 한계 도달 시간을 제공합니다.
- **웹훅** - HMAC 서명된 알림 전달, 재시도 및 전체 전달 로그를 지원합니다.
- **실시간 마이그레이션** - 3단계 분석, 실행, 검증 워크플로우로 Redis와 Valkey 간 이동을 지원합니다.
### AI 시대에 맞춰 설계
- **벡터 검색 관찰 가능성** - [valkey-search](https://github.com/valkey-io/valkey-search) 및 RediSearch에 대한 FT.SEARCH ops/sec 및 지연 시간, 인덱스별 상태를 제공합니다. [docs/vector-ai](https://github.com/betterdb-inc/monitor/blob/master/docs/vector-ai/README.md) 참조.
- **추론 지연 시간** - 인덱스별 p50/p95/p99, SLA 위반 알림 포함(Pro, 조기 액세스 기간 무료).
- **시맨틱 캐시 인텔리전스**(Pro, 조기 액세스 기간 무료) - 적중률 상태, 유사도 임계값 권장, 승인/거부 제안 워크플로우를 제공합니다. 에이전트 메모리 관찰 가능성 포함.
- **AI 트레이스** - AI 애플리케이션의 OTLP 스팬 워터폴을 각 요청 아래의 실시간 Valkey 상태와 연계하여 제공합니다. [docs/opentelemetry.md](https://github.com/betterdb-inc/monitor/blob/master/docs/opentelemetry.md) 참조.
### 모든 것과 연동
- **MCP 서버** - [`@betterdb/mcp`](https://github.com/betterdb-inc/monitor/blob/master/packages/mcp)를 통해 Claude Code, Cursor 또는 모든 MCP 클라이언트용 60개 도구를 제공합니다.
- **Prometheus 엔드포인트** - 100개 이상의 `betterdb_*` 메트릭을 제공합니다. [docs/prometheus-metrics.md](https://github.com/betterdb-inc/monitor/blob/master/docs/prometheus-metrics.md) 참조.
- **OpenTelemetry** - OTLP 트레이스를 수집하고 메트릭과 이벤트를 모든 OTLP 백엔드로 미러링합니다. [docs/opentelemetry.md](https://github.com/betterdb-inc/monitor/blob/master/docs/opentelemetry.md) 참조.
- **REST API** - UI의 모든 기능은 API 호출로 구현되며 OpenAPI로 문서화되어 있습니다.
## 원하는 방식으로 데이터에 접근
| 인터페이스 | 세부 사항 |
|-----------|---------|
| 웹 UI | `http://localhost:3001` |
| MCP 서버 | `npx @betterdb/mcp` (stdio) - 설정 → MCP 토큰에서 토큰 생성 |
| Prometheus | `http://localhost:3001/api/prometheus/metrics` |
| REST API (OpenAPI) | `http://localhost:3001/docs` |
| 상태 확인 | `http://localhost:3001/api/health` |
> **참고**: 프로덕션 빌드(Docker, CLI)에서는 API 경로가 `/api` 접두사 아래에 제공됩니다. 로컬 개발(`pnpm dev`)에서는 접두사가 없습니다 - 예: `http://localhost:3001/health`.
## 지원 데이터베이스
| 데이터베이스 | 최소 버전 | 지원 기능 |
|----------|----------------|-------------------|
| **Valkey** | 8.0+ | COMMANDLOG(8.1+) 및 CLUSTER SLOT-STATS를 포함한 모든 기능 |
| **Redis** | 6+ | Valkey 전용 COMMANDLOG 및 CLUSTER SLOT-STATS를 제외한 모든 기능 |
백엔드는 와이어 호환 `iovalkey` 클라이언트 위에 통합 어댑터를 사용하며, `INFO` 응답(`DB_TYPE=auto`)에서 Valkey와 Redis를 자동 감지합니다. COMMANDLOG 및 SLOT-STATS와 같은 기능은 버전별로 감지되며, 기능을 사용할 수 없을 때 UI는 자동으로 축소된 형태로 표시됩니다.
관리형 서비스도 지원됩니다 - AWS ElastiCache, MemoryDB, Redis Cloud, Upstash 가이드는 [docs/providers](https://github.com/betterdb-inc/monitor/blob/master/docs/providers)에 있으며, [`@betterdb/agent`](https://github.com/betterdb-inc/monitor/blob/master/packages/agent)는 아웃바운드 WebSocket을 통해 VPC 전용 인스턴스에 연결합니다.
## Docker 프로덕션 배포
Docker 이미지에는 모니터링 애플리케이션(백엔드 + 프론트엔드)이 포함되어 있습니다. 필요 사항:
1. 모니터링 대상 Valkey/Redis 인스턴스
2. 데이터 영속화를 위한 PostgreSQL 인스턴스(또는 메모리 저장소 사용)
### PostgreSQL 저장소로 실행```bash
docker run -d \
--name betterdb-monitor \
-p 3001:3001 \
-e DB_HOST=your-valkey-host \
-e DB_PORT=6379 \
-e DB_PASSWORD=your-password \
-e STORAGE_TYPE=postgres \
-e STORAGE_URL=postgresql://user:pass@postgres-host:5432/dbname \
betterdb/monitor
사용자 지정 포트에서 실행
PORT 환경 변수를 설정하고 -p 매핑을 일치시키세요:```bash
docker run -d
--name betterdb-monitor
-p 8080:8080
-e PORT=8080
-e DB_HOST=your-valkey-host
betterdb/monitor
### 호스트 네트워크로 실행 (localhost 서비스 접근)
Valkey와 PostgreSQL이 동일한 호스트에서 실행 중인 경우:```bash
docker run -d \
--name betterdb-monitor \
--network host \
-e DB_HOST=localhost \
-e DB_PORT=6380 \
-e DB_PASSWORD=devpassword \
-e STORAGE_TYPE=postgres \
-e STORAGE_URL=postgresql://dev:devpass@localhost:5432/postgres \
betterdb/monitor
환경 변수
| 변수 | 필수 | 기본값 | 설명 |
|---|---|---|---|
DB_HOST | 예 | localhost | 모니터링할 Valkey/Redis 호스트 |
DB_PORT | 아니요 | 6379 | Valkey/Redis 포트 |
DB_PASSWORD | 아니요 | - | Valkey/Redis 비밀번호 |
DB_USERNAME | 아니요 | default | Valkey/Redis ACL 사용자 이름 |
DB_TYPE | 아니요 | auto | 데이터베이스 유형: auto, valkey 또는 redis |
STORAGE_TYPE | 아니요 | memory | 스토리지 백엔드: memory 또는 postgres |
STORAGE_URL | 조건부 | - | PostgreSQL 연결 URL (STORAGE_TYPE=postgres인 경우 필수) |
PORT | 아니요 | 3001 | 애플리케이션 HTTP 포트 |
NODE_ENV | 아니요 | production | Node 환경 |
ANOMALY_DETECTION_ENABLED | 아니요 | true | 이상 탐지 활성화 |
ANOMALY_PROMETHEUS_INTERVAL_MS | 아니요 | 30000 | Prometheus 요약 업데이트 간격 (ms) |
BETTERDB_LICENSE_KEY | 아니요 | - | 온라인 라이선스 키 (Pro/Enterprise), 네트워크를 통해 검증됨 |
BETTERDB_OFFLINE_LICENSE_FILE | 아니요 | - | 에어갭(air-gapped) 호스트용 서명된 오프라인 라이선스 .jwt 파일 경로 (아래 참조) |
BETTERDB_OFFLINE_LICENSE | 아니요 | - | 인라인 JWT 문자열 형태의 오프라인 라이선스 토큰 |
BETTERDB_DATA_DIR | 아니요 | /app/data | 영구 저장된 라이선스 상태용 디렉터리 (쓰기 가능한 볼륨 마운트) |
ENCRYPTION_KEY | 아니요 | - | 저장된 연결 비밀번호와 SSH 터널 시크릿을 저장 시 봉투 암호화하는 데 사용되는 키 (최소 16자). 설정하지 않으면 시크릿이 평문으로 저장됨 |
BETTERDB_SSH_KEY_DIR | 아니요 | - | 서버 측 SSH 개인 키가 위치해야 하는 디렉터리. SSH 터널의 "서버 파일 경로" 키 소스를 활성화함. 연결의 키 경로는 이 디렉터리 내부에 있어야 함. 설정하지 않으면 파일 기반 키가 비활성화됨 (인라인 붙여넣기 키는 계속 작동) |
BETTERDB_TELEMETRY | 아니요 | true | 익명 텔레메트리를 비활성화하려면 false로 설정 |
AI, 웹훅 튜닝, 헬스 게이트 임계값을 포함한 전체 참조: docs/configuration.md. OTLP 트레이스 수집 및 메트릭/이벤트 내보내기는 docs/opentelemetry.md를 참조하세요.
SSH 터널
연결은 직접 연결하는 대신 SSH 배스천/점프 호스트를 통해 데이터베이스에 도달할 수 있습니다. 이는 프라이빗 서브넷, ElastiCache 또는 MemoryDB의 Valkey/Redis에 유용합니다. 연결을 추가할 때 SSH 터널을 통한 연결을 활성화하고 SSH 호스트, 포트, 사용자 이름을 제공하세요. 단일 홉이 지원됩니다.
인증은 비밀번호 또는 개인 키 중 하나입니다. 개인 키는 다음 두 가지 소스 중 하나에서 제공됩니다:
- 키 붙여넣기 (인라인): PEM 키 콘텐츠가 연결과 함께 제출됩니다.
ENCRYPTION_KEY가 설정된 경우에만 저장 시 암호화되어 저장됩니다 (봉투 암호화). 해당 키가 없으면 연결 비밀번호와 마찬가지로 평문으로 저장됩니다. 관리형/클라우드 배포를 포함한 모든 환경에서 작동합니다. - 서버 파일 경로: 키가 이미 모니터 서버의 파일 시스템에 있으며 경로로 참조됩니다. 이를 위해서는
BETTERDB_SSH_KEY_DIR환경 변수를 허용된 키가 있는 디렉터리로 설정해야 하며, 참조된 경로는 해당 디렉터리 내부에 있어야 합니다. 따라서 API가 임의의 파일을 읽도록 강제될 수 없습니다. 이 옵션을 비활성화하려면BETTERDB_SSH_KEY_DIR을 설정하지 않은 상태로 두세요.
선택적으로 연결에 SSH 서버의 호스트 키 지문 (SHA256:...)을 고정할 수 있습니다. 설정하면 서버가 일치하는 키를 제시하지 않는 한 터널이 거부되어 배스천 경로에 대한 중간자 공격을 방지합니다. 비워 두면 서버 ID가 검증되지 않습니다 (경고가 기록됨).
터널은 127.0.0.1을 통해 데이터베이스로 전달됩니다. TLS가 활성화된 경우에도 인증서는 실제 데이터베이스 호스트 이름에 대해 계속 검증됩니다. SSH 비밀번호, 키 암호문, 인라인 키가 저장 시 암호화되도록 ENCRYPTION_KEY를 설정하세요.
알려진 제한 사항 — 클러스터/Sentinel 토폴로지: 구성한 연결만 터널링됩니다. 클러스터 및 Sentinel 모니터링은 해당 노드가 광고하는 주소 (CLUSTER NODES / Sentinel)를 사용하여 다른 노드로 확장되며, 이러한 노드별 연결은 터널을 통하지 않고 직접 이루어집니다. 다른 노드가 배스천을 통해서만 도달 가능한 경우 (예: 프라이빗 서브넷의 ElastiCache/MemoryDB), 노드별 보기가 불가능합니다. 단일 노드/프라이머리 모니터링에는 SSH 터널을 사용하거나, 클러스터 노드에 직접 도달할 수 있는 위치에 모니터를 배치하세요.
라이선스 및 에어갭 지원
BetterDB Monitor는 호스트의 인터넷 접속 여부에 따라 다음 두 가지 방식 중 하나로 Pro/Enterprise 기능을 잠금 해제합니다:
- 온라인 라이선스 키 -
BETTERDB_LICENSE_KEY를 설정하세요. 모니터가 이를betterdb.com에 대해 검증하고 로컬에서 검증된 서명 토큰을 캐시하므로, 짧은 중단과 재시작 중에도 티어가 계속 작동합니다. - 오프라인 / 에어갭 라이선스 토큰 - 인터넷 접속이 전혀 없는 호스트용 (아래 참조).
에어갭 라이선스 작동 방식
모든 권한은 서명된 RS256 JWT입니다. 모니터는 이미지에 내장된 공개 키를 사용하여 로컬에서 검증합니다. 토큰을 신뢰하기 위해 라이선스 서버에 연결할 필요가 전혀 없습니다. 따라서 에어갭 호스트는 연결 없이 유료 티어를 실행할 수 있습니다:
- 인터넷에 연결된 머신에서 betterdb.com/account/licenses에 로그인하고
오프라인 라이선스 토큰 (
.jwt, Pro/Enterprise)을 다운로드하세요. 여기에는 시크릿이 포함되어 있지 않으며 변조할 수 없습니다. 편집하면 서명이 깨집니다. - USB, 구성 관리, Docker/Kubernetes 시크릿 마운트 등 원하는 방식으로 에어갭 호스트에 전송하세요.
BETTERDB_OFFLINE_LICENSE_FILE(경로),BETTERDB_OFFLINE_LICENSE(인라인 문자열)로 제공하거나 UI의 설정 → 라이선스 → "에어갭 환경인가요? 오프라인 라이선스를 활성화하세요." 에서 붙여넣으세요.
오프라인 토큰이 구성되고 BETTERDB_LICENSE_KEY가 설정되지 않은 경우,
모니터는 외부 요청을 전혀 보내지 않습니다 - 라이선스 확인, 텔레메트리, 업데이트
알림이 모두 비활성화됩니다. 토큰이 만료될 때까지 (영구 라이선스는 매년 재다운로드) 부여된 티어를 실행한 후 Community로 되돌아갑니다.```bash
fully offline - no network required
docker volume create betterdb-data docker run --rm -v betterdb-data:/d alpine chown 1001:1001 /d # volume writable by UID 1001 (one-time)
docker run -d --name betterdb-monitor -p 3001:3001
-e DB_HOST=your-valkey-host -e DB_PORT=6379 -e DB_PASSWORD=your-password
-v /path/to/betterdb-license.jwt:/run/secrets/betterdb-license.jwt:ro
-e BETTERDB_OFFLINE_LICENSE_FILE=/run/secrets/betterdb-license.jwt
-v betterdb-data:/app/data
betterdb/monitor
`GET /api/license/status`로 확인 → `source: offline-token`, `mode: offline`,
`airGapped: true`.
> **지속성(Persistence):** `/app/data`에 쓰기 가능한 볼륨을 마운트하여 오프라인 라이선스와
> 온라인 장애 유예 토큰이 재시작 후에도 유지되도록 하세요. 컨테이너는 **UID 1001**로 실행되므로,
> 새로 생성된 볼륨은 해당 UID로 `chown`해야 합니다(위에 표시됨). 그렇지 않으면
> `EACCES … license.jwt` 오류로 지속성이 실패합니다.
전체 흐름, 검증 우선순위, 키 교체 런북은
**[오프라인 및 에어갭 라이선스](https://github.com/betterdb-inc/monitor/blob/master/docs/offline-licenses.md)** 및
**[구성 참조](https://github.com/betterdb-inc/monitor/blob/master/docs/configuration.md#license-configuration)**를 참조하세요.
### Docker 이미지 세부 정보
- **기본 이미지(Base Image)**: `node:20-alpine`
- **압축 크기**: 약 360MB(`latest` / `-no-ai`) / 약 640MB(실험적 AI Helper의 로컬 LLM 의존성을 포함한 버전 이미지)
- **지원 플랫폼**: `linux/amd64`, `linux/arm64`
- **포함 내용**: 백엔드 API + 프론트엔드 정적 파일(Fastify가 제공)
- **제외 내용**: SQLite 지원(PostgreSQL 또는 Memory 스토리지 사용)
### 컨테이너 작업```bash
docker logs -f betterdb-monitor # follow logs
docker stop betterdb-monitor # stop
docker rm betterdb-monitor # remove
스토리지 백엔드
BetterDB Monitor는 감사 추적, 분석, 캡처 및 이상 징후 데이터를 다음 네 가지 백엔드 중 하나에 저장합니다:
| 백엔드 | 사용 사례 | 참고 사항 |
|---|---|---|
memory | 테스트, 임시 환경 | Docker 기본값; 재시작 시 모든 데이터 손실 |
postgres | 프로덕션 | STORAGE_TYPE=postgres + STORAGE_URL=postgresql://user:pass@host:port/db |
turso | 프로덕션 / 서버리스 SQLite | STORAGE_TYPE=turso + STORAGE_URL=libsql://... + STORAGE_AUTH_TOKEN; Docker에서 작동 |
sqlite | 로컬 개발 / CLI | 네이티브 모듈이 latest Docker 이미지에서 제거됨; STORAGE_SQLITE_FILEPATH 선택 사항 |
Prometheus 메트릭
메트릭은 Prometheus 텍스트 형식으로 GET /api/prometheus/metrics 엔드포인트에 노출됩니다: ACL 감사, 클라이언트 연결, slowlog/commandlog 패턴, 메모리, 처리량, 키스페이스, 복제, 클러스터 슬롯 통계 및 Node.js 런타임 메트릭 - 모두 betterdb_ 접두사가 붙습니다.```yaml
scrape_configs:
- job_name: 'betterdb-monitor'
metrics_path: '/api/prometheus/metrics'
static_configs:
- targets: ['your-monitor-host:3001']
전체 메트릭 참조: [docs/prometheus-metrics.md](https://github.com/betterdb-inc/monitor/blob/master/docs/prometheus-metrics.md) 및 [docs/prometheus-integration.md](https://github.com/betterdb-inc/monitor/blob/master/docs/prometheus-integration.md).
## 개발
### 프로젝트 구조```
betterdb-monitor/
├── apps/
│ ├── api/ # NestJS backend (Fastify)
│ └── web/ # React frontend (Vite)
├── packages/ # Published packages (see below)
├── docs/ # Documentation site (Jekyll)
├── docker-compose.yml # Local Valkey (port 6380) and Redis (port 6382) for testing
└── package.json # Workspace root
패키지
이 모노레포는 여러 독립 실행형 패키지를 제공합니다. 전체 목록은 packages/를 참조하세요.
| 패키지 | 언어 | 레지스트리 |
|---|---|---|
@betterdb/monitor | TypeScript | npm |
@betterdb/mcp | TypeScript | npm |
@betterdb/agent | TypeScript | npm |
@betterdb/semantic-cache | TypeScript | npm |
betterdb-semantic-cache | Python | PyPI |
@betterdb/agent-cache | TypeScript | npm |
betterdb-agent-cache | Python | PyPI |
cache-benchmark | Python | 시맨틱 캐시 벤치마킹용 재생 하네스 |
기술 스택
- 백엔드: Fastify 어댑터를 사용하는 NestJS, Valkey/Redis 연결용
iovalkey, TypeScript 엄격 모드. 포트 3001. - 프론트엔드: React + TypeScript, Vite, TailwindCSS, Recharts. 개발 서버는 포트 5173.
- 모노레포: pnpm 워크스페이스 + Turborepo.
로컬 설정
사전 요구 사항: Node.js >= 20.0.0, pnpm >= 9.0.0, Docker.```bash pnpm install cp .env.example .env pnpm docker:dev # local Valkey (6380) and Redis (6382) pnpm dev # web on :5173, api on :3001
Redis 대신 Valkey에 연결하려면 `.env`에서 `DB_PORT=6382`로 설정하세요.```bash
pnpm dev:api # API only
pnpm dev:web # frontend only
pnpm docker:dev:down # stop local databases
pnpm build # production build
pnpm test # API tests
Docker 이미지 빌드:```bash pnpm docker:build # local build pnpm docker:publish # multi-arch build & push (requires buildx)
### 새 기능 추가
1. `apps/api/src/`에 새 엔드포인트 추가
2. `apps/web/src/api/`에 해당 API 호출 추가
3. `packages/shared/src/types/`에 공유 타입 추가
### 코드 스타일
- TypeScript 엄격 모드, 명시적 반환 타입, `any` 금지
- ESLint + Prettier 구성됨
## 라이선스
- `docs/` 아래의 콘텐츠는 CC BY-SA 4.0에 따라 라이선스가 부여됩니다.
- `proprietary/` 아래의 콘텐츠는 상업용 라이선스가 적용됩니다(`proprietary/LICENSE` 참조). 이러한 기능은 얼리 액세스 기간 동안 무료입니다.
- 그 외 모든 것은 [MIT](https://github.com/betterdb-inc/monitor/blob/master/LICENSE)입니다.