Skip to content

Latest commit

ย 

History

2,071 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

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์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. writable ํŒŒ์ผ์—์„œ๋Š” SQLite ๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐํ™” DDL(ํ…Œ์ด๋ธ” ์ƒ์„ฑ/์‚ญ์ œ/์ด๋ฆ„ ๋ณ€๊ฒฝ, ์ปฌ๋Ÿผ ์ถ”๊ฐ€/์‚ญ์ œ, ์ธ๋ฑ์Šค ์ƒ์„ฑ/์‚ญ์ œ)์ด ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค(#1804). ์ด๋ฏธ ์žˆ๋Š” ์ปฌ๋Ÿผ์˜ ํƒ€์ž…ยทNOT NULLยทDEFAULT ๋ณ€๊ฒฝ๊ณผ ๋…๋ฆฝ ์ œ์•ฝ(FOREIGN KEY / CHECK / UNIQUE) ์„ ์–ธ์€ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ , export parity ๋„ ์•„์ง ๋ช…์‹œ์ ์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.
  • DuckDB: ํŒŒ์ผ ๊ธฐ๋ฐ˜ .duckdb ์—ฐ๊ฒฐ๊ณผ raw SQL ์‹คํ–‰, ๋กœ์ปฌ CSV/Parquet/JSON/NDJSON ๋“ฑ๋ก/preview, ๋“ฑ๋ก๋œ source alias ๋Œ€์ƒ global editor SELECT smoke ๊ฒฝ๋กœ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. writable connection ์—์„œ๋Š” grid row edit ๊ณผ native ๊ตฌ์กฐํ™” DDL(ํ…Œ์ด๋ธ” ์ƒ์„ฑ/์‚ญ์ œ/์ด๋ฆ„ ๋ณ€๊ฒฝ, ์ปฌ๋Ÿผ ์ถ”๊ฐ€/์‚ญ์ œ/ํƒ€์ž…, ์ธ๋ฑ์Šค ์ƒ์„ฑ/์‚ญ์ œ)์ด ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค(ADR 0051 Stage 1/2, #1070). ์ œ์•ฝ ์ถ”๊ฐ€/์‚ญ์ œ์™€ identity ์ปฌ๋Ÿผ(Stage 2b), dry-run/๋‹ค์ค‘ statement ํŠธ๋žœ์žญ์…˜(Stage 3), 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๊ณผ Safe Mode confirm gate ๋’ค์˜ live _delete_by_query ์‹คํ–‰, _search profile ์‹คํ–‰ ๊ณ„ํš ๋ทฐ์–ด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. actual live index/settings admin execution, observability, _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 ๊ณ„์—ด, MSSQL, Oracle์—์„œ ํ…Œ์ด๋ธ”/์ปฌ๋Ÿผ ์ƒ์„ฑ, ์ด๋ฆ„ ๋ณ€๊ฒฝ, ์‚ญ์ œ, ์ธ๋ฑ์Šค ์ƒ์„ฑ/์‚ญ์ œ, FK/CHECK/UNIQUE ์ œ์•ฝ ์ถ”๊ฐ€/์‚ญ์ œ๋ฅผ UI์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค. DuckDB๋Š” ํ…Œ์ด๋ธ”/์ปฌ๋Ÿผ/์ธ๋ฑ์Šค๊นŒ์ง€ ๋‹ค๋ฃจ๊ณ  ์ œ์•ฝ ์ถ”๊ฐ€/์‚ญ์ œ์™€ identity ์ปฌ๋Ÿผ์€ ์•„์ง ์ œ์™ธ์ž…๋‹ˆ๋‹ค(ADR 0051 Stage 2b). SQLite๋„ ํ…Œ์ด๋ธ”/์ปฌ๋Ÿผ/์ธ๋ฑ์Šค๊นŒ์ง€ ๋‹ค๋ฃจ๊ณ , ์ œ์•ฝ ์ถ”๊ฐ€/์‚ญ์ œ์™€ identity ์ปฌ๋Ÿผ, ์ด๋ฏธ ์žˆ๋Š” ์ปฌ๋Ÿผ ์ •์˜ ๋ณ€๊ฒฝ์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(#1804).
  • ์‹คํ–‰ ์ „ DDL statement preview์™€ Safe Mode ๊ฒŒ์ดํŠธ๋ฅผ ๊ฑฐ์ณ destructive ๋ณ€๊ฒฝ์„ ํ•œ ๋ฒˆ ๋” ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

5. Safe Mode

Important

์šด์˜(Production) ํ™˜๊ฒฝ์œผ๋กœ ํ‘œ์‹œ๋œ ์—ฐ๊ฒฐ์—์„œ๋Š” WHERE ์—†๋Š” UPDATE/DELETE, DROP, TRUNCATE, destructive Mongo command ๊ฐ™์€ ์ž‘์—…์ด ๋ฐ”๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” preview์™€ Yes/No ํ™•์ธ ๋Œ€ํ™”์ƒ์ž๋ฅผ ๊ฑฐ์ณ ๋ช…์‹œ์ ์œผ๋กœ ์Šน์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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๊ฐ€ ์ฐธ๊ณ ํ•  ๋ฌธ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. ์ค€๋น„๋ฌผ

  • mise ๋˜๋Š” asdf: .tool-versions๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋Ÿฐํƒ€์ž„์„ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ
  • OS๋ณ„ Tauri 2 ์‹œ์Šคํ…œ ์˜์กด์„ฑ

๋ฒ„์ „ ๊ธฐ์ค€์€ .tool-versions์ž…๋‹ˆ๋‹ค. Node.js, pnpm, Rust, direnv ๋ฒ„์ „์ด ์ด ํŒŒ์ผ์— ๊ณ ์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

2. ์ดˆ๊ธฐ ์…‹์—…

ํ•œ ๋ฒˆ์— ์ค€๋น„ํ•ด ์ฃผ๋Š” ์…‹์—… ์Šคํฌ๋ฆฝํŠธ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋ฅผ ๊ฐ๊ฐ ์ค€๋น„ํ•˜์„ธ์š”.

mise install          # asdf install๋กœ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ๊ณ , .tool-versions๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค
pnpm install

Rust ๋ณด์กฐ ๋„๊ตฌ๋Š” ํ•„์š”ํ•  ๋•Œ ์ง์ ‘ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค (cargo install cargo-nextest cargo-llvm-cov cargo-deny). git hook ์€ ์„ค์น˜ํ•  ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค.

JavaScript ์˜์กด์„ฑ๋งŒ ๋‹ค์‹œ ๋ฐ›์œผ๋ ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

pnpm install

3. ๊ฐœ๋ฐœ์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹คํ–‰

PostgreSQL, MongoDB, MySQL, MariaDB, MSSQL, Oracle, Redis compose ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ธฐ๋™ํ•ฉ๋‹ˆ๋‹ค. docker compose up -d๋Š” health check ํ†ต๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์œผ๋ฏ€๋กœ, ์—ฐ๊ฒฐํ•˜๊ธฐ ์ „์— docker compose ps๋กœ healthy ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

pnpm db:up

MSSQL๊ณผ Oracle ์ปจํ…Œ์ด๋„ˆ๋Š” ์ˆ˜๋™ ์—ฐ๊ฒฐ๊ณผ explicit fixture load์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Oracle์€ #905 focused catalog/query/cancel/tabular evidence๋งŒ ๊ฐ–๊ณ , routine Runtime Happy Path smoke wiring์€ #907 ์ „๊นŒ์ง€ ๋„“ํžˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Fixture seeding CLI(pnpm db:seed)๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋‚จ์•„ ์žˆ๋Š” pnpm fixtures:start / fixtures:stop์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ธฐ๋™ํ•˜๊ณ  ์ •์ง€ํ•  ๋ฟ seed๋ฅผ ๋„ฃ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ fixtures:stop์€ docker compose down -v๋ผ์„œ ๋ณผ๋ฅจ๊นŒ์ง€ ์ง€์›๋‹ˆ๋‹ค. seed ๋ฐ์ดํ„ฐ ์ž์ฒด๋Š” e2e/fixtures/์— ๊ทธ๋Œ€๋กœ ์žˆ์œผ๋ฏ€๋กœ, ์ปจํ…Œ์ด๋„ˆ์— ์ง์ ‘ ๋„ฃ๊ฑฐ๋‚˜ e2e/fixtures/seed-smoke.ts๋กœ smoke seeding์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DBMS๋ณ„ seed๋Š” e2e/fixtures/<dbms>/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋“ค์–ด ์žˆ์ง€๋งŒ, MSSQL๊ณผ Oracle์˜ seed๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ e2e/fixtures/seed.mssql.sql๊ณผ e2e/fixtures/seed.oracle.sql ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

pnpm db:up            # ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋™ (docker compose up -d)
docker compose exec -T mariadb mysql -utestuser -ptestpass table_view_test \
  < e2e/fixtures/mariadb/query/seed.sql

Oracle์€ ์„œ๋น„์Šค๋ช… ๊ธฐ๋ฐ˜ XEPDB1 ๊ฒฝ๋กœ๊ฐ€ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. #905 ๋ฒ”์œ„๋Š” catalog metadata, SELECT/DML batch, cooperative cancel, tabular table-data query๊นŒ์ง€์ž…๋‹ˆ๋‹ค. SID/TNS alias/wallet/TLS, raw admin, parser/completion, runtime smoke, 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               # Biome (์ผ๋ฐ˜ ๊ทœ์น™) + ESLint (repo ๊ณ ์œ  ๊ฐ€๋“œ)
pnpm format             # Biome ํฌ๋งท ์ ์šฉ
pnpm format:check       # Biome ํฌ๋งท ๊ฒ€์‚ฌ (์“ฐ๊ธฐ ์—†์Œ)
pnpm tauri dev          # Tauri ๋ฐ์Šคํฌํ†ฑ dev
pnpm tauri build        # Tauri ๋ฐ์Šคํฌํ†ฑ production build

Parser WASM ์‚ฐ์ถœ๋ฌผ์€ src/lib/**/wasm/ ์•„๋ž˜์— ์ฒดํฌ์ธ๋˜์–ด ์žˆ์–ด ๋กœ์ปฌ wasm-pack ์—†์ด๋„ ์•ฑ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. gzip ์ƒํ•œ(SQL parser 120 KiB, Mongo parser 62 KiB)์€ CI์˜ WASM Size Budget (non-blocking) job์ด wasm-pack์œผ๋กœ ์ƒˆ๋กœ ๋นŒ๋“œํ•ด์„œ ์žฝ๋‹ˆ๋‹ค. ์ด job์€ advisory๋ผ์„œ ์ƒํ•œ์„ ๋„˜๊ฒจ๋„ ๋จธ์ง€๊ฐ€ ๋ง‰ํžˆ์ง€ ์•Š์œผ๋‹ˆ, ์‚ฐ์ถœ๋ฌผ์ด๋‚˜ Rust parser crate๋ฅผ ๋ฐ”๊พธ๋ฉด ๊ทธ job์„ ์ง์ ‘ ํ™•์ธํ•˜์„ธ์š”. ๋กœ์ปฌ์—์„œ ์ฒดํฌ์ธ๋œ ์‚ฐ์ถœ๋ฌผ์„ ์žฌ๋ ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

bash scripts/check-wasm-size.sh

์ƒˆ๋กœ ๋นŒ๋“œํ•œ ์‚ฐ์ถœ๋ฌผ์„ ์žฌ๋ ค๋ฉด ์•ž์— pnpm run build:sql-wasm && pnpm run build:mongosh-wasm์„ ๋ถ™์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ๋ช…๋ น์€ ์ฒดํฌ์ธ๋œ ์‚ฐ์ถœ๋ฌผ๊ณผ ๊ทธ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ .gitignore๋ฅผ ๋ฎ์–ด์“ฐ๋ฏ€๋กœ ์ž‘์—… ํŠธ๋ฆฌ์— ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์ด ๋‚จ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‚ฐ ๊ทผ๊ฑฐ์™€ ์žฌํ˜„ ๋ช…๋ น์€ scripts/check-wasm-size.sh ๋จธ๋ฆฌ๋ง์— ์ ํ˜€ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿงช ํ…Œ์ŠคํŠธ ์‹คํ–‰ (Testing)

1. ํ”„๋ก ํŠธ์—”๋“œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

pnpm test
pnpm exec vitest run --coverage

pnpm test -- --coverage๋Š” ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. pnpm 10์€ --๋ฅผ ๊ทธ๋Œ€๋กœ ๋„˜๊ฒจ์„œ vitest run -- --coverage๊ฐ€ ๋˜๊ณ , vitest๋Š” -- ๋’ค์— ์˜ค๋Š” ์ธ์ž๋ฅผ ํ”Œ๋ž˜๊ทธ๋กœ ์ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์€ exit 0์œผ๋กœ ๋๋‚˜์ง€๋งŒ ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ์ˆ˜์ง‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

2. Rust ๋ฐฑ์—”๋“œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

Rust crate๋Š” ๋ชจ๋‘ src-tauri/๋ฅผ root๋กœ ํ•˜๋Š” Cargo workspace์— ์†ํ•ฉ๋‹ˆ๋‹ค (#2161). lib ํ…Œ์ŠคํŠธ๋Š” ๋‹ค์Œ ํ•œ ์ค„๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

cd src-tauri && cargo test --workspace --lib

--workspace๊ฐ€ member ์ „๋ถ€๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ crate๊ฐ€ ๋Š˜์–ด๋„ ์ด ๋ช…๋ น์€ ๊ทธ๋Œ€๋กœ์ž…๋‹ˆ๋‹ค. ํ•œ crate๋งŒ ๋ณผ ๋•Œ๋Š” cd src-tauri && cargo test -p table-view-core --lib์ฒ˜๋Ÿผ -p๋กœ ๊ณ ๋ฅด์„ธ์š”. ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๊นŒ์ง€ ํฌํ•จํ•œ ๋ฆด๋ฆฌ์Šค ์ „ ์ˆœ์„œ๋Š” docs/contributor-guide/testing-and-quality.md์˜ Pre-Release Verification Gate Rust lane ยท Docker integration lane์ด SOT์ž…๋‹ˆ๋‹ค.

3. ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ (Docker ํ•„์š”)

pnpm db:up์œผ๋กœ DB ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ธฐ๋™ํ•œ ๋’ค ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

cd src-tauri && cargo test --test schema_integration --test query_integration

4. E2E Smoke ํ…Œ์ŠคํŠธ (Linux host)

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 ์†Œ์œ ์ž…๋‹ˆ๋‹ค.

CI์—์„œ๋Š” ๋ณ€๊ฒฝ ์˜์—ญ๋งŒํผ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. .github/workflows/e2e-smoke.yml์˜ Runtime Happy Path job์ด e2e/scope-map.mjs๋กœ PR์˜ ๋ณ€๊ฒฝ ๊ฒฝ๋กœ๋ฅผ spec ๋ถ€๋ถ„์ง‘ํ•ฉ์— ๋งคํ•‘ํ•ด ๊ทธ ๋ถ€๋ถ„์ง‘ํ•ฉ๋งŒ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. e2e์™€ ๋ฌด๊ด€ํ•œ PR์€ selected 0 specs๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  green์œผ๋กœ ๋๋‚˜๋ฉฐ, main push์™€ ์•ผ๊ฐ„ schedule, workflow_dispatch๋Š” ์ „์ฒด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. e2e:full label์€ label ์ด๋ฒคํŠธ๋ฅผ ์ฒญ์ทจํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ถ™์ธ ๋’ค์— push ํ•ด์•ผ ์ „์ฒด๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ์ง์ ‘ ๊ตฌ๋™ํ•˜๋Š” ๊ฒฝ๋กœ๋„ ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

pnpm db:up
pnpm tauri build --debug --no-bundle --config src-tauri/tauri.e2e.conf.json
TABLE_VIEW_TEST_DATA_DIR=/tmp/table-view-smoke \
  E2E_SPEC_KEY=postgres pnpm exec tsx e2e/fixtures/seed-smoke.ts
TABLE_VIEW_TEST_DATA_DIR=/tmp/table-view-smoke \
  pnpm exec wdio run wdio.smoke.conf.ts --spec e2e/smoke/postgres.spec.ts

pnpm db:up์€ PostgreSQL/MySQL/MariaDB/MongoDB/MSSQL/Oracle/Redis๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ํ—ค๋“œ๋ฆฌ์Šค Linux์—์„œ๋Š” WEBKIT_DISABLE_DMABUF_RENDERER=1, WEBKIT_DISABLE_COMPOSITING_MODE=1, LIBGL_ALWAYS_SOFTWARE=1์„ ์ง์ ‘ exportํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค (#1261/#1293).

macOS์™€ Windows ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ๋Š” ์ด ์ ˆ์ฐจ๋ฅผ host-native๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. tauri-driver๊ฐ€ Linux ์ „์šฉ์ด๋ผ์„œ ๋‘ ํ”Œ๋žซํผ์˜ host-native ๊ฒ€์ฆ์ด ์‹คํ˜„ ๋ถˆ๊ฐ€๋ผ๊ณ  ADR 0020์ด ํŒ์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ADR 0020์€ Superseded ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ADR 0020์„ ๋Œ€์ฒดํ•œ ADR 0044์—๋Š” ์ด platform ํŒ์ •์„ ๋‹ค์‹œ ์ ์€ ๋ฌธ์žฅ์ด ์—†์Šต๋‹ˆ๋‹ค.


๐Ÿ“ฆ ๋นŒ๋“œ ์ƒํƒœ (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)

draft ๋ฆด๋ฆฌ์Šค๋ฅผ ์†์œผ๋กœ publishํ•˜๋ฉด .github/workflows/release.yml์˜ update-homebrew-tap job์ด Felix-LeeSM/homebrew-table-view tap์˜ Casks/table-view.rb๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

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

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages