Skip to content

Felix-LeeSM/table-view

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,290 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Table View

Table View는 Tauri 2, React 19, TypeScript, Rust로 만드는 로컬 데스크톱 데이터베이스 클라이언트입니다.

TablePlus처럼 빠르게 연결하고, 스키마와 컬렉션을 탐색하고, 데이터를 바로 확인·편집하는 흐름을 지향합니다. PostgreSQL이 가장 강한 RDBMS lane이고 MongoDB는 whitelisted document workflow가 활성입니다. MySQL, MariaDB, SQLite, DuckDB, Redis, Valkey, Elasticsearch, OpenSearch, MSSQL, Oracle은 SOT에 기록된 bounded runtime slice와 smoke/focused evidence 범위에서 지원합니다.

다중 창 워크스페이스, 변경 사항의 Preview/Commit 게이트, 운영 환경의 destructive 작업을 막는 Safe Mode를 통해 로컬 클라이언트의 속도와 데이터 작업의 안전장치를 함께 제공합니다.


🌟 주요 기능 (Key Features)

1. 다중 DBMS와 RDB/Document/KV/Search 패러다임 지원

  • PostgreSQL: 스키마, 테이블, 뷰, 인덱스, 제약 조건(PK/FK/CHECK/UNIQUE), 함수/트리거 소스 조회, 테이블/컬럼/인덱스/제약 DDL UI를 지원합니다.
  • MySQL/MariaDB: 데이터베이스 전환, 테이블/컬럼/인덱스/제약/뷰/함수/트리거 조회, SQL 실행, 테이블 페이징/필터/정렬, 주요 DDL UI 백엔드가 연결되어 있습니다. MySQL과 MariaDB는 connect/browse/query/edit/cancel runtime smoke baseline이 있고, MySQL-family 고유 문법의 클라이언트 분석은 아직 부분 지원입니다.
  • SQLite: 파일 기반 연결과 DB 파일 생성, 테이블/컬럼 탐색, 테이블 미리보기, 단일 쿼리 실행, 배치 실행과 dry-run을 지원합니다. DDL UI와 export parity는 아직 명시적으로 제한됩니다.
  • DuckDB: 파일 기반 .duckdb 연결과 raw SQL 실행, 로컬 CSV/Parquet/JSON/NDJSON 등록/preview, 등록된 source alias 대상 global editor SELECT smoke 경로를 지원합니다. 구조화된 DDL/write UI, COPY/ATTACH/DETACH, extension install/load, 자동 import/export, admin parity는 아직 명시적으로 제한됩니다.
  • MongoDB: 데이터베이스/컬렉션 탐색, 도큐먼트 그리드, find/aggregate/insert/update/delete/bulkWrite, 인덱스와 validator 관리, collection/server 진단 명령을 지원합니다. 임의 JavaScript를 실행하지 않고 허용된 db.... 워크플로우만 파싱해 dispatch 합니다.
  • Redis: 연결/profile, key browser, value preview/edit UI, guarded string write, TTL 변경, exact-key delete confirmation, bounded command editor를 지원합니다. full CLI/admin parity, stream consumer UI, cluster/pubsub/modules, broader command coverage는 후속입니다.
  • Valkey: 연결/profile, key scan/value preview, selected-key stream reader, bounded Redis-compatible command query, GET/HGETALL/XRANGE와 bounded SET/EXPIRE smoke 경로, direct UTF-8 string-key mutation controls가 있습니다. hash/list/set/zset writes와 full Redis compatibility는 후속입니다.
  • Elasticsearch/OpenSearch: Live HTTP connection/catalog, bounded _search query, Search DSL validation/completion, delete-by-query safety planning을 지원합니다. actual live admin execution, observability, profile/explain workflow는 후속입니다.
  • MSSQL: SQL authentication 연결/버전 probe, catalog browse, bounded SELECT/DML/DDL runtime, primary-key row edit, representative Safe Mode smoke, catalog-aware T-SQL editor assistance가 있습니다. TLS-required workflow, SQLCMD/admin/security/backup/jobs/users/roles, full T-SQL semantic parity는 후속입니다.
  • Oracle: 서비스명 기반 lifecycle과 bounded catalog/query/cancel/tabular runtime slice를 지원합니다. catalog metadata, SELECT/DML batch, cooperative cancellation, table-data query가 범위이며 editRows, structured DDL, raw DDL/admin, parser/completion, PL/SQL body/package authoring/source, routine smoke, admin/import/export/full workbench는 후속입니다.

세부 쿼리/자동완성 범위는 docs/product/query-language-support.md에 정리되어 있습니다.

2. 다중 창 워크스페이스 & 동기화

  • Launcher & Workspace: 연결 목록과 접속 설정은 런처 창에서 관리하고, 실제 DB 작업은 연결별 워크스페이스 창에서 수행합니다.
  • 상태 동기화: 연결/그룹, 테마, 주요 워크스페이스 상태, MRU/히스토리성 데이터가 로컬 저장소와 Tauri 이벤트를 통해 창 사이에서 일관되게 갱신됩니다.

3. 인라인 데이터 편집 & 변경 검토 게이트

  • RDB 그리드에서 행 추가/수정/삭제를 인라인으로 처리하고, 실행 전 SQL preview를 확인한 뒤 Commit 또는 Discard할 수 있습니다.
  • MongoDB 도큐먼트 편집도 MQL preview를 거쳐 적용되며, bulkWrite 기반 변경 흐름을 지원합니다.

4. 스키마/구조 편집 UI

  • PostgreSQL/MySQL 계열에서 테이블/컬럼 생성, 이름 변경, 삭제, 인덱스 생성/삭제, FK/CHECK/UNIQUE 제약 추가/삭제를 UI에서 다룹니다.
  • 실행 전 DDL statement preview와 Safe Mode 게이트를 거쳐 destructive 변경을 한 번 더 확인합니다.

5. Safe Mode

Important

운영(Production) 환경으로 표시된 연결에서는 WHERE 없는 UPDATE/DELETE, DROP, TRUNCATE, destructive Mongo command 같은 작업이 바로 실행되지 않습니다. 사용자는 preview와 type-to-confirm 대화상자를 거쳐 명시적으로 승인해야 합니다.

6. 쿼리 에디터

  • CodeMirror 6 기반 SQL/MQL 에디터를 사용합니다.
  • PostgreSQL, MySQL/MariaDB, SQLite, DuckDB, MSSQL은 DBMS별 SQL dialect highlighting과 bounded 테이블/컬럼 자동완성을 제공합니다. Oracle은 runtime query dispatch만 활성이고 Oracle-specific parser/completion claim은 아직 없습니다.
  • MongoDB는 컬렉션, 메서드, query operator, aggregation stage, accumulator, BSON literal 후보를 제공합니다.
  • Redis/Valkey command editor와 Elasticsearch/OpenSearch Search DSL editor는 검증된 bounded vocabulary와 현재 catalog/key context 기반 후보를 제공합니다.
  • PostgreSQL 테이블 설계 UI는 서버의 사용자 정의 타입 목록을 가져와 컬럼 타입 후보에 반영합니다.

7. 데이터 내보내기

  • 조회한 그리드 데이터를 CSV, TSV, SQL INSERT, JSON으로 내보낼 수 있습니다.
  • MongoDB row export는 Extended JSON v2 Relaxed 형태를 보존합니다.

🔒 보안 및 저장 (Security)

  • 비밀번호 보호: connection 비밀번호 평문은 렌더러로 다시 노출하지 않습니다. 저장 시 AES-256-GCM으로 암호화하고, 파일 키는 가능하면 OS keyring(macOS Keychain, Windows Credential Manager, Linux Secret Service)에 둡니다.
  • Linux fallback: Secret Service가 없는 최소 Linux 환경에서는 권한이 제한된 로컬 key 파일 fallback을 사용하고 사용자에게 디스크 암호화를 권장합니다.
  • 로컬 권한 제어: 앱 데이터는 로컬 사용자 데이터 디렉터리에 저장되며, Unix 계열에서는 민감 파일 권한을 0600으로 제한합니다.

🛠️ 개발 환경 셋업 (Development & Setup)

이 프로젝트를 로컬에서 빌드하고 기여하려는 개발자를 위한 안내입니다.

Contributor/agent routing:

1. 준비물

  • mise 또는 asdf — .tool-versions 기반 런타임 관리
  • OS별 Tauri 2 시스템 의존성

버전 기준은 .tool-versions입니다. Node.js, pnpm, Rust, lefthook, direnv 버전이 이 파일에 고정되어 있습니다.

2. 초기 셋업

신규 클론 후 런타임, cargo 보조 도구, git hook, npm 의존성을 한 번에 준비합니다.

bash scripts/setup.sh

이미 도구가 준비된 상태에서 JavaScript 의존성만 다시 받으려면:

pnpm install

3. 개발용 데이터베이스 실행

PostgreSQL, MongoDB, MySQL, MariaDB, MSSQL, Oracle, Redis compose 컨테이너를 띄우고 health check를 기다립니다.

pnpm db:up

MSSQL과 Oracle 컨테이너는 수동 연결과 explicit fixture load에 사용됩니다. Oracle은 #905 focused catalog/query/cancel/tabular evidence만 갖고, routine Runtime Happy Path smoke wiring은 #907 전까지 넓히지 않습니다. Fixture CLI의 기본 all/default target은 PostgreSQL/MongoDB/MySQL/SQLite/DuckDB/Redis만 로드하므로 MariaDB/MSSQL/Oracle은 필요할 때 명시 target으로 실행합니다.

pnpm fixtures:load development --target mariadb
pnpm fixtures:load development --target mssql
pnpm fixtures:load development --target oracle

Oracle은 서비스명 기반 XEPDB1 경로가 기준입니다. #905 범위는 catalog metadata, SELECT/DML batch, cooperative cancel, tabular table-data query까지입니다. SID/TNS alias/wallet/TLS, editRows, structured DDL, raw admin, parser/completion, runtime smoke, and full PL/SQL semantics는 후속입니다.

기본 접속 정보:

DBMS Host Port User Password Database / service
PostgreSQL localhost 15432 testuser testpass table_view_test
MySQL localhost 13306 testuser testpass table_view_test
MongoDB localhost 37017 testuser testpass table_view_test
MariaDB localhost 23306 testuser testpass table_view_test
MSSQL localhost 14333 sa Testpass123! table_view_test
Oracle localhost 1521 testuser testpass XEPDB1
Redis localhost 6379 0

PostgreSQL connection URL:

postgresql://testuser:testpass@localhost:15432/table_view_test

MongoDB는 auth source로 admin을 사용합니다.

컨테이너와 compose volume을 함께 정리하려면:

pnpm db:down

4. 개발 서버 실행

Vite 프론트엔드와 Tauri 백엔드를 함께 로컬 디버그 모드로 실행합니다.

pnpm tauri dev

앱이 부팅되면 런처 창에서 연결을 만들고 더블클릭으로 워크스페이스에 진입합니다.

5. 자주 쓰는 개발 명령어

pnpm dev                # Vite dev 서버 (Tauri 데스크톱 없이 브라우저 전용)
pnpm build              # TypeScript 타입 체크 + Vite production build
pnpm lint               # ESLint
pnpm format             # Prettier (src/)
pnpm format:docs        # Prettier (README, CLAUDE, docs, .claude markdown)
pnpm tauri dev          # Tauri 데스크톱 dev
pnpm tauri build        # Tauri 데스크톱 production build
pnpm wasm:size          # SQL/Mongo parser WASM gzip budget check

Parser WASM 산출물은 src/lib/**/wasm/ 아래에 체크인되어 있어 로컬 wasm-pack 없이도 앱을 빌드할 수 있습니다. 해당 산출물이나 Rust parser crate를 바꾸면 pnpm wasm:size가 계속 통과해야 합니다. SQL parser WASM은 gzip 200 KiB, Mongo parser WASM은 gzip 53 KiB가 상한입니다.


🧪 테스트 실행 (Testing)

1. 프론트엔드 단위 테스트

pnpm test
pnpm test -- --coverage

2. Rust 백엔드 단위 테스트

cargo test --manifest-path src-tauri/Cargo.toml --lib

3. 통합 테스트 (Docker 필요)

pnpm db:up으로 DB 컨테이너를 띄운 뒤 실행합니다.

cargo test --manifest-path src-tauri/Cargo.toml --test schema_integration --test query_integration

4. E2E Smoke 테스트 (Linux host / CI)

WebdriverIO + tauri-driver로 실제 Tauri 앱을 부팅해 PostgreSQL, MySQL, MariaDB, MSSQL, SQLite, DuckDB, MongoDB, Redis, Valkey, Elasticsearch, OpenSearch runtime happy path를 검증합니다. Oracle은 #905 focused runtime evidence만 갖고 routine smoke wiring은 #907 소유입니다. GitHub Actions에서는 PR과 main push의 blocking check로 실행됩니다.

로컬 Linux 환경에서는 필요한 서비스를 띄운 뒤 단일 spec을 지정해 실행합니다. pnpm db:up은 PostgreSQL/MySQL/MariaDB/MongoDB/MSSQL/Oracle/Redis를 준비합니다. Valkey, Elasticsearch, OpenSearch까지 포함한 전체 matrix는 GitHub Actions workflow가 기준입니다.

pnpm db:up
E2E_SPEC=e2e/smoke/postgres.spec.ts E2E_SPEC_KEY=postgres bash scripts/e2e-smoke-ci.sh

macOS/Windows 로컬에서는 tauri-driver의 Linux/GTK 의존성 차이 때문에 CI 검증을 기준으로 봅니다.


📦 빌드 상태 (Build)

배포 필수 플랫폼은 macOS arm64와 Windows x86_64입니다. 릴리스 태그 push, release workflow 수동 실행, draft release publish 전에는 docs/contributor-guide/testing-and-quality.md의 Pre-Release Verification Gate를 같은 commit SHA 기준으로 통과시킵니다. 이 gate는 CI와 Runtime Happy Path를 필수 원격 증거로 보고, deferred check를 명시하며, fixture-only evidence만으로 live support claim을 넓히는 것을 금지합니다.

pnpm build
pnpm tauri build --debug

macOS debug 앱 번들은 src-tauri/target/debug/bundle/macos/Table View.app에 생성됩니다. 배포용 패키징 상태와 남은 계획은 docs/PLAN.md, docs/ROADMAP.md, docs/product/known-limitations.md를 기준으로 확인합니다. 릴리스 노트의 지원 범위 요약과 fixture/smoke coverage는 docs/contributor-guide/release/release-notes-support-matrix.md를 기준으로 작성합니다. 버전/tag 결정, package artifact 기대값, post-release verification과 rollback note는 docs/contributor-guide/release/versioning-and-artifacts.md를 확인합니다.

🍺 Homebrew 배포 (Homebrew)

release 이벤트가 published로 바뀌면 이 저장소의 워크플로가 Homebrew tap을 갱신합니다. 현재 절차는 publish 수동 승인 후 반영됩니다.

brew tap Felix-LeeSM/table-view
brew install --cask table-view

설치 방법은 docs/contributor-guide/release/homebrew-cask.md를 확인하세요.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors