개요
Nexa SQL은 Windows · macOS · Linux에서 똑같이 생기고 똑같이 동작하는 가벼운 SQL 클라이언트(IDE) 와 명령줄 도구 nsql 을 한 묶음으로 제공합니다. 전부 Rust로 작성한 단일 실행 파일이며, 자체 CPU 래스터라이저로 화면을 직접 그려 Qt · WebView · Electron을 쓰지 않습니다.
DB 개발자와 DBA가 매일 쓰는 도구를 목표로 합니다.
- SQL*Plus식 스크립트를 모든 DBMS에서 —
VAR·EXEC :V := …·SELECT … INTO :V·PRINT·DEFINE/&치환· REF CURSOR · 편집기 안의CONNECT가 Oracle뿐 아니라 SQL Server · PostgreSQL · SQLite에서도 같은 문법으로 동작합니다. SQL Server에서는 여러 배치(GO)를 넘어 같은 변수를 이어 씁니다. - GUI와 CLI가 같은 엔진 — 화면에서 돌린 스크립트를
nsql run으로 그대로 배치 실행할 수 있고, 연결 프로필 · 설정 · 북마크를 GUI와 CLI가 공유합니다. - Sublime Text 관습의 편집기 — 단축키 기본값이 Sublime Text와 같고(Goto Anything
Ctrl+P· 명령 팔레트Ctrl+Shift+P· 다중 커서), 확장은 Sublime 패키지와 비슷한 폴더 구조로 설치합니다. - 결과 그리드에서 바로 편집 · 필터 — 단일 테이블 결과는 셀을 고쳐 한 트랜잭션으로 적용하고, 엑셀식 값 필터와 조건 바로 결과를 좁힙니다.
- 지원 DBMS(v0.7.0) — Oracle(Thin · OCI) · SQL Server · PostgreSQL · MySQL/MariaDB · SQLite · DuckDB · IBM Db2 · ClickHouse, 그리고 ODBC 드라이버가 있는 DBMS에 접속합니다(DBMS별 지원 수준 참고).
- 드라이버는 설치본과 분리 — 설치본에는 Oracle OCI 드라이버만 들어 있고, 나머지는 처음 접속할 때 서명된 패키지를 내려받아 설치합니다. 폐쇄망용 오프라인 번들도 있습니다(드라이버 설치).

참고 앱 소개 페이지는 /apps/nexa-sql에서 볼 수 있습니다. 소스 코드와 릴리스는 GitHub 저장소, 기능별 자세한 설명은 위키에 있습니다.
시스템 요구사항
| OS | 요구사항 | 제공 설치본 |
|---|---|---|
| Windows | Windows 10 1809(빌드 17763) 이상 · x64 | .msi (컴퓨터 단위 설치) |
| macOS | macOS 11 Big Sur 이상 · Apple Silicon · Intel 공용(Universal) | .pkg · .dmg · Homebrew Cask |
| Linux | x86_64 · glibc 2.34 이상 | .deb · .rpm · APT/DNF 저장소 |
- Linux 권장 패키지:
libx11-6·libxkbcommon0·libwayland-client0과 한글 표시를 위한fonts-noto-cjk(RPM은libxkbcommon·google-noto-sans-cjk-fonts)가 권장 의존으로 함께 설치됩니다. - 포터블(무설치) 판은 없습니다. 설치본만 배포합니다.
DBMS별로 따로 필요한 것
| DBMS | 따로 필요한 것 |
|---|---|
| Oracle (Thin · 기본) | 없음. 첫 접속 때 oracle-thin 드라이버가 자동 설치됩니다. 서버는 12c 이상이어야 합니다. |
| Oracle (OCI) | Oracle Instant Client가 필요합니다(Windows oci.dll · Linux libclntsh.so · macOS libclntsh.dylib). 설치본에 들어 있지 않으므로 Oracle 사이트에서 Basic 패키지를 받아 두세요. 없으면 접속 시 DPI-1047 오류가 납니다. TNS 별칭으로 접속하려면 tnsnames.ora가 있는 TNS_ADMIN 폴더도 필요합니다. Oracle 11g 서버와 Thin이 못 하는 기능은 이 경로를 씁니다. |
| SQL Server · PostgreSQL · MySQL/MariaDB · SQLite · DuckDB · ClickHouse | 없음(첫 접속 때 드라이버 패키지 자동 설치) |
| IBM Db2 (LUW) | 없음(네이티브 DRDA 드라이버 · IBM 클라이언트 불필요). ?driver=odbc로 ODBC 경로를 고를 때만 IBM clidriver가 필요합니다. |
| ODBC 경유(Tibero · Altibase · CUBRID · SAP HANA · Informix · MS Access 등) | 벤더 ODBC 드라이버와 필요하면 DSN. Linux · macOS의 ODBC 드라이버 패키지는 드라이버 관리자를 함께 담고 있어 unixODBC를 따로 설치하지 않아도 됩니다. MS Access는 Windows ACE, Linux · macOS MDBTools를 씁니다. |
참고 Tibero · Altibase · CUBRID · SAP HANA · Informix는 ODBC 프리셋이며, MS Access 지원은 실험 단계입니다. 벤더 서버 전부를 실서버로 검증했다고 확인되지는 않았습니다.
설치와 제거
모든 설치 파일은 GitHub Releases에 있고, 함께 올라가는 sha256sums.txt로 내려받은 파일을 검증할 수 있습니다.
주의 현재 빌드는 코드 서명이 없습니다. 직접 내려받아 실행하면 Windows SmartScreen이나 macOS Gatekeeper 경고가 뜹니다. 아래 OS별 안내를 따르세요.
설치 채널 현황
각 채널을 2026-11-07에 직접 조회한 결과입니다.
| 채널 | 명령 | 상태 |
|---|---|---|
| GitHub Releases | 설치 파일 직접 받기 | 0.7.0 |
| Homebrew Cask (macOS) | brew install --cask kiros33/tap/nexa-sql | 0.7.0 |
| APT · DNF 저장소 (Linux) | sudo apt install nexa-sql / sudo dnf install nexa-sql | 0.7.0 (저장소 등록 필요) |
| Chocolatey (Windows) | choco install nexa-sql | 0.7.0 (2026-11-07 승인) |
| winget (Windows) | winget install SosomLab.NexaSQL | 아직 등록 전 — 첫 제출 PR #447007(현재 0.5.0)이 사람 검토 대기 중 |
참고 winget만 아직 등록 전입니다. Windows에서는 Chocolatey나 GitHub Releases의 MSI를 쓰세요. Chocolatey는 0.2.8 · 0.2.9를 건너뛰는 등 일부 버전만 올라갑니다.
Windows
- Releases에서
nexa-sql-0.7.0-windows-x64.msi를 받습니다. - 더블클릭해 설치합니다. 설치 중에
nsql을 PATH에 추가하는 항목과.sql파일 연결(선택)을 고를 수 있습니다. - SmartScreen이 “Windows의 PC 보호” 창을 띄우면 추가 정보 → 실행을 누릅니다.
조용한 설치(관리 스크립트용):
msiexec /i nexa-sql-0.7.0-windows-x64.msi /qn
받은 파일 검증:
Get-FileHash .\nexa-sql-0.7.0-windows-x64.msi -Algorithm SHA256
제거: 설정 ▸ 앱(프로그램 추가/제거)에서 Nexa SQL을 제거합니다.
macOS
Homebrew로 설치 (권장)
brew install --cask kiros33/tap/nexa-sql
Cask는 설치할 때 macOS 격리 표식을 떼어 주므로 경고 없이 바로 실행되고, nsql도 Homebrew의 bin에 연결됩니다. 갱신은 brew upgrade --cask kiros33/tap/nexa-sql입니다.
설치 파일로 설치
nexa-sql-0.7.0-macos-universal.pkg— 설치기를 실행하면/Applications/Nexa SQL.app과/usr/local/bin/nsql링크가 만들어집니다.nexa-sql-0.7.0-macos-universal.dmg— 앱을 응용 프로그램 폴더로 끌어 놓습니다. CLI 링크 방법은 dmg 안의 안내문을 보세요.
직접 받은 앱이 Gatekeeper에 막히면 격리 표식을 떼어 냅니다.
xattr -dr com.apple.quarantine "/Applications/Nexa SQL.app"
제거
# pkg/dmg로 설치한 경우
sudo "/Applications/Nexa SQL.app/Contents/Resources/uninstall.sh"
# Homebrew로 설치한 경우(설정·프로필까지 지우려면 --zap)
brew uninstall --cask kiros33/tap/nexa-sql
Linux
패키지 저장소 등록 후 설치 (권장 — apt upgrade/dnf upgrade로 갱신)
APT (Debian · Ubuntu)
저장소 등록 (최초 1회) — 다른 SosomLab 앱으로 이미 등록했다면 건너뜁니다.
sudo curl -fsSLo /usr/share/keyrings/sosomlab-archive-keyring.gpg https://pkg.sosomlab.com/sosomlab-archive-keyring.gpg
sudo curl -fsSLo /etc/apt/sources.list.d/sosomlab.sources https://pkg.sosomlab.com/apt/sosomlab.sources
설치
sudo apt update && sudo apt install nexa-sql
RPM (Fedora · RHEL 계열)
저장소 등록 (최초 1회) — 다른 SosomLab 앱으로 이미 등록했다면 건너뜁니다.
sudo curl -fsSLo /etc/yum.repos.d/sosomlab.repo https://pkg.sosomlab.com/rpm/sosomlab.repo
설치
sudo dnf install nexa-sql
설치 파일로 설치
sudo apt install ./nexa-sql_0.7.0_amd64.deb # 또는 sudo dpkg -i …
sudo dnf install ./nexa-sql-0.7.0-1.x86_64.rpm
제거: sudo dpkg -r nexa-sql 또는 sudo dnf remove nexa-sql.
참고 앱을 제거해도 설정과 연결 프로필은 사용자 폴더에 남습니다(설정과 데이터 저장 위치). 완전히 지우려면 그 폴더를 직접 삭제하세요.
시작하기
첫 실행
- 앱을 실행합니다. 화면 언어는 기본값 시스템이라 한국어 OS에서는 한국어로, 그 밖에는 영어로 뜹니다.
Ctrl+Alt+L(macOS⌘⌥L)을 누를 때마다 시스템 → English → 한국어 순으로 바뀝니다. - 처음 실행하면 “로컬 SQLite 데모를 만들까요?” 라고 묻습니다. 지금 만들기를 누르면 서버 없이 바로 써 볼 수 있는
Demo프로필이 생깁니다(SCOTTdept/emp표와sales5,000행). 나중에 도움말 ▸ 샘플 데이터 만들기(Demo 프로필)… 로도 만들 수 있습니다. 데모에는 SQLite 드라이버가 필요합니다. 만들기가 실패하면 데모 만들기가 실패해요를 보세요. - 접속 창(
Ctrl+Shift+N, macOS⌘⇧N)에서Demo를 고르거나 접속 문자열을 넣고 접속합니다. 필요한 드라이버가 없으면 내려받아 설치한 뒤 접속합니다. - 편집기에 문장을 쓰고
Ctrl+Enter(macOS⌘↩)로 캐럿이 있는 문장을,F5로 스크립트 전체를 실행합니다.
SELECT * FROM emp ORDER BY sal DESC;
실행 인자로 바로 열기
nexa-sql Demo # 저장된 프로필로 시작하면서 접속
nexa-sql -c "oracle://scott@dbhost:1521/ORCL" # 접속 문자열로 접속(비밀번호는 창으로 물음)
nexa-sql sqlite:demo.sqlite # SQLite 파일
nexa-sql --fill prod # 접속 폼만 채우고 접속하지 않음
nexa-sql . # 현재 폴더를 작업 폴더로(폴더 모드)
접속 관리
접속 문자열 형식
GUI 접속 창, 편집기의 CONNECT, CLI의 -c가 모두 같은 형식을 받습니다.
| DBMS | 형식 | 예 |
|---|---|---|
| Oracle | oracle://user:pass@host:port/service | oracle://scott:tiger@dbhost:1521/ORCL |
| Oracle (SQL*Plus 꼴) | user/pass@host:port/service | scott/tiger@dbhost:1521/ORCL |
| Oracle (관리자) | 끝에 as sysdba | oracle://sys@dbhost:1521/ORCL as sysdba |
| SQL Server | mssql://user:pass@host:port/db | mssql://sa@srv:1433/mydb |
| PostgreSQL | postgres://user:pass@host:port/db (postgresql:// · pg://도 됨) | postgres://app@dbhost:5432/appdb |
| MySQL · MariaDB | mysql://user:pass@host:port/db (mariadb://도 됨) | mysql://app@dbhost:3306/shop |
| IBM Db2 (LUW) | db2://user:pass@host:port/db | db2://db2inst1@dbhost:50000/SAMPLE |
| ClickHouse | clickhouse://user:pass@host:port/db | clickhouse://default@dbhost:8123/logs?tls=required |
| SQLite (파일) | sqlite:<경로> | sqlite:C:\data\app.db · sqlite:./app.db |
| SQLite (메모리) | sqlite::memory: | 서버 없이 시험할 때 |
| DuckDB | duckdb:<경로> · duckdb::memory: | duckdb:a.duckdb |
| ODBC | odbc:DSN=<이름> · odbc:Driver={…};Server=…;… | odbc:DSN=TIBERO_DEV |
| MS Access (실험) | access:<파일> | access:C:/data/file.accdb |
| PostgreSQL 호환 프리셋 | redshift:// · cockroach:// · yugabyte:// · greenplum:// · timescale:// | PostgreSQL 드라이버를 씁니다 |
| ODBC 프리셋 | tibero:// · altibase:// · cubrid:// · hana:// · informix:// | 벤더 ODBC 드라이버가 먼저 필요합니다 |
- 포트 생략 시 기본값: Oracle 1521 · SQL Server 1433 · PostgreSQL 5432 · MySQL 3306 · Db2 50000 · ClickHouse 8123(TLS 8443).
- 비밀번호를 빼면 접속할 때 숨김 입력 창으로 묻습니다. 사람이 직접 칠 때는 이 방법을 권장합니다.
- 비밀번호에 특수문자가 있으면 URL 형식(
scheme://)에서 퍼센트 인코딩합니다:@→%40,/→%2F,:→%3A,#→%23,%→%25. SQL*Plus 꼴은 인코딩을 풀지 않지만 마지막@를 호스트 구분자로 쓰므로 비밀번호 안의@는 그대로 통합니다. - 스킴 없이 방언만 지정하려면
?dialect=oracle처럼 붙입니다. 이때도@는 생략할 수 없습니다(사용자가 없으면@dbhost:1521/ORCL). - 끝에 붙이는 매개변수:
?driver=thin|oci|<id>(이 접속에 쓸 드라이버) ·?ssh=user@host[:port]와ssh_key=(SSH 터널) ·?tls=·?sslmode=(전송 암호화). - 간략 접속: 접속 창 맨 위 칸에 문자열을 넣고 바로 접속을 누르면 프로필이 자동 저장됩니다(이름 =
방언-호스트-DB). 비밀번호는 저장되지 않습니다.
주의 명령줄에 쓴 비밀번호는 셸 기록과 프로세스 목록에 남습니다. 자주 쓰는 서버는 아래 연결 프로필로 저장하세요.
연결 프로필
프로필은 방언 · 호스트 · 포트 · DB · 사용자 · 비밀번호를 이름 하나로 저장합니다. GUI와 CLI가 같은 프로필 폴더를 공유하므로 한쪽에서 저장하면 다른 쪽에서 바로 씁니다.
- GUI: 접속 창에서 이름 칸과 접속 정보를 채우고 저장합니다. 이후 이름만 골라 접속합니다.
- CLI:
nsql conn add prod "oracle://scott@dbhost:1521/ORCL" # 비밀번호는 숨김 입력으로 물음
nsql conn add pg1 -d postgres --host dbhost --port 5432 --db appdb --user app
nsql conn list # 이름 · 방언 · 비밀번호 저장 여부(✓/-) · 대상
nsql conn test prod # 실제로 붙어 보기
nsql conn env prod prd # 서버 유형을 운영(PRD)으로 표시
nsql conn readonly prod on # 읽기 전용 프로필로
nsql conn deleted # 지운 프로필 목록
nsql conn restore prod # 지운 프로필 되살리기
nsql conn import <파일> --overwrite # 내보낸 프로필 가져오기(내보내기는 nsql conn export)
nsql conn rm prod
nsql conn var prod SCHEMA=HR # 이 프로필의 변수 지정(NAME= 은 삭제)
- 프로필 이름은 영문 · 숫자 ·
_·.·-1~64자이며-c prod, 스크립트의CONNECT prod처럼 접속 문자열 자리에 그대로 씁니다. - 서버 유형(없음 · 개발 DEV · 테스트 TST · 운영 PRD)을 지정하면 운영 서버에는 PRD 칩이 표시되고, 운영 서버의 결과 그리드는 읽기 전용이 되며, 유형 변경은 두 번 확인합니다.
- 읽기 전용 프로필(v0.6.0~): GUI · 스크립트 · 가져오기에서 데이터와 스키마 변경을 막습니다.
nsql conn readonly나 접속 문자열?readonly=on으로 켭니다. - 지운 프로필 복구(v0.6.0~): 접속 창에서 지운 프로필은
profiles/.deleted/로 옮겨져 30일 보관되고(connect.deleted_keep_days) 토스트의 되돌리기나nsql conn restore로 되살립니다.nsql conn rm은 바로 지웁니다. - 프로필 옮기기(v0.6.0~): 파일 메뉴나
nsql conn export·nsql conn import로 비밀번호 없이 내보내고 가져옵니다.
비밀번호는 어떻게 보관되나
- 프로필의 비밀번호만 ChaCha20-Poly1305로 암호화해 저장하고, 호스트 · 사용자 이름은 목록에 보여야 하므로 평문입니다.
- 암호화 키는 이 PC의 기기 키(
device.key)에서 만듭니다. Windows는 DPAPI로 보호되어 같은 Windows 계정에서만 풀립니다. macOS · Linux는 소유자만 읽을 수 있는(0600) 파일로 보관합니다 — 폴더째 복사해 가면 함께 풀릴 수 있으니 주의하세요. - 프로필에 저장하지 않고 접속할 때 입력한 비밀번호는 이번 실행 동안만 메모리에 암호화해 들고 있다가 같은 서버 · 계정의 새 탭, 재접속, 객체 탐색기에 다시 씁니다. 디스크에는 쓰지 않으며, 설정
connect.remember_session_password를 끄면 매번 묻습니다.
Oracle 드라이버와 클라이언트 지정
Oracle 드라이버는 둘입니다. 기본값은 Thin(oracle.driver = thin)으로 Instant Client가 필요 없고, OCI는 Instant Client를 써서 실행 중 취소 · 암묵 결과 집합 · OS 인증 · 네이티브 네트워크 암호화 · 11g 서버까지 지원합니다. 접속 창의 DB 종류 Oracle (Thin) · Oracle (OCI)나 접속 문자열 ?driver=oci로 접속마다 고를 수 있습니다.
OCI를 쓸 때는 설정 ▸ DBMS ▸ Oracle에서 자동(기본) 또는 직접 지정을 고릅니다. 자동이면 NSQL_ORACLE_CLIENT_DIR → ORACLE_HOME → OS 라이브러리 검색 경로 → 잘 알려진 설치 폴더 순으로 찾고, 찾은 라이브러리 · 버전 · tnsnames.ora · sqlnet.ora 유무를 읽기 전용으로 보여 줍니다.
# 환경 변수로 지정(앱을 다시 시작해야 적용)
export NSQL_ORACLE_CLIENT_DIR=/opt/oracle/instantclient_21_13 # macOS · Linux
set NSQL_ORACLE_CLIENT_DIR=C:\oracle\instantclient_21_13 # Windows cmd
세션과 연결 끊김
- 기본은 연결 하나를 여러 탭이 공유합니다. 편집기에서
CONNECT를 실행한 탭은 그 탭 전용 세션을 가집니다. 열린 세션은 세션 창에서 확인합니다. - VPN이 끊기는 등 서버에 닿지 않으면 그 서버의 세션과 탐색기를 모두 끊김으로 표시하고, 영향받는 공유 세션 · 전용 탭을 토스트에 나열하며, 서버가 다시 응답하면 자동으로 복구합니다(설정
net.watch· Windows · macOS · Linux). 서버에는 닿는데 한 세션만 끊기면 그 세션만 다시 연결하는 토스트가 뜹니다. - 자동 커밋은 기본 켬입니다(
session.autocommit). 끄면Ctrl+Alt+C(커밋) ·Ctrl+Alt+R(롤백)으로 직접 확정합니다. - 호출 상한(
session.call_timeout_secs· 기본 0 = 끔): Oracle · SQL Server에서 서버 호출 하나가 이 시간을 넘으면 끝냅니다. SQL Server는 소켓을 닫고 다음 실행 때 다시 접속합니다. 긴 질의에도 걸리니 필요할 때만 켜세요.
드라이버 설치
설치본에는 Oracle OCI 드라이버만 들어 있습니다. 나머지 드라이버는 처음 접속할 때 공식 저장소(SosomLab/nexa-sql)의 drivers-v* 릴리스에서 자동으로 받습니다(driver.auto_install · 기본 켬). 패키지는 SHA-256과 Ed25519 서명을 확인한 뒤 <설정 폴더>/drivers/에 설치합니다.
- 드라이버 관리자: 보기 ▸ 드라이버에서 설치 · 갱신 · 삭제 · 파일에서 설치를 합니다.
- 갱신 안내(
driver.check_updates· 기본 켬): 기동할 때 하루 한 번 드라이버 색인을 읽어 새 버전이 있으면 드라이버당 한 줄로 알려 주고 [모두 갱신] 버튼을 보여 줍니다. - 접속 때 자동 갱신(
driver.auto_upgrade· 기본 켬 · v0.5.0~): 확장 드라이버로 접속할 때 캐시된 색인에 새 판이 있으면 먼저 내려받아 설치합니다. 실패해도 접속은 막지 않습니다. 설치된 판을 유지하려면 끄세요. - 명령줄:
nsql driver search # 색인과 설치 상태
nsql driver install db2 # 설치
nsql driver update --check # 갱신 목록만 보기
nsql driver list # 설치된 드라이버
nsql driver rm db2 # 삭제
nsql driver install --file nsql-drivers-all-0.1.10-windows-x86_64.zip # 폐쇄망: 오프라인 번들
- 폐쇄망:
driver.auto_install·driver.auto_upgrade·driver.check_updates를 끄고, 다른 PC에서 받은nsql-drivers-all-<버전>-<os>-<arch>.zip을 위 명령이나 드라이버 관리자로 설치하세요. 프록시는HTTPS_PROXY를 따릅니다. - 패키지는 Windows x64 · Linux x86_64 · Apple Silicon · Intel macOS용이 있습니다.
SSH 터널
모든 접속에 시스템 ssh 를 쓴 포트 포워딩을 붙일 수 있습니다. 접속 창의 SSH 칸이나 접속 문자열에 적으며, 프로필에 함께 저장됩니다(키는 경로만 저장).
nsql run -c "postgres://[email protected]:5432/appdb?ssh=me@bastion:22&ssh_key=~/.ssh/id_ed25519" report.sql
- 키 인증만 됩니다.
~/.ssh/config· 에이전트 · 기본 키를 그대로 쓰고 비밀번호를 묻지 않습니다. 모르는 호스트는StrictHostKeyChecking=accept-new로 처음 한 번 받아들입니다. - 같은 대상의 세션은
ssh프로세스 하나를 함께 쓰고, 마지막 세션이 닫히면 끝납니다. 설정은ssh.command(비우면 터널 비활성) ·ssh.connect_timeout_secs(기본 15초)입니다. - TLS와 함께 쓰면 드라이버가 보는 호스트가
127.0.0.1이므로verify_identity대신verify_ca를 쓰세요.
전송 암호화 (TLS)
- PostgreSQL: v0.4.0부터 TLS를 지원합니다.
pg.tls(또는?tls=·?sslmode=)로 고릅니다. 기본preferred는 TLS를 시도하고 안 되면 평문으로 접속합니다.required= 암호화만(인증서 검증 없음) ·verify_ca= 인증서 사슬 검증 ·verify_identity= 사슬 + 호스트 이름 검증. CA 파일은pg.tls_ca나sslrootcert=로 지정합니다. 클라이언트 인증서는 아직 지원하지 않습니다. - SQL Server:
mssql.encrypt로 전 구간 또는 로그인만 암호화합니다. 서버 인증서는 검증하지 않습니다. - MySQL · ClickHouse · Db2:
?tls=required처럼 접속 문자열로 지정합니다(MySQL은mysql.tls설정도 있음).
주의 신뢰할 수 없는 네트워크에서는 평문으로 떨어질 수 있는
preferred대신verify_ca이상을 쓰세요.
운영 접속 보호
서버 유형이 운영(PRD)인 접속의 GUI에는 다음 보호 장치가 있습니다. CLI nsql은 보류하지 않습니다.
- 보류 커밋: 변경은 명시 트랜잭션 안에서 실행되고 상단의 빨간 커밋 버튼을 두 단계로 눌러야 확정됩니다. 보류 카드에는 [롤백] · [커밋 후 계속] 버튼이 있습니다. 보류 중에는 스크립트의
COMMIT;이 거부되고, 암묵 커밋을 일으키는 DDL과 같은 연결의 다른 탭 변경이 막힙니다. - 객체 백업: DROP · CREATE OR REPLACE · ALTER · TRUNCATE · RENAME 전에 현재 DDL을
backups/objects/에 저장합니다. 운영 접속에서 백업이 실패하면 문장을 막습니다.
편집기
편집기는 Sublime Text의 관습을 따릅니다. 기본 단축키 세트도 Sublime Text와 같습니다(단축키).
주요 기능
- 다중 커서 · 다중 선택 —
Ctrl+D(다음 같은 낱말 추가) ·Alt+F3(같은 낱말 전부) ·Ctrl+Shift+L(선택을 줄마다 커서로) ·Ctrl+Alt+↑/↓(위아래 줄에 커서 추가). - 줄 편집 — 줄 복제 · 삭제 · 위아래로 옮기기 · 합치기, 주석 토글(
Ctrl+/), 대/소문자 변환(Ctrl+K, Ctrl+U/Ctrl+K, Ctrl+L). - 선택 되돌리기(Soft Undo) —
Ctrl+U로 커서 · 선택 이동만 되돌립니다. - 코드 완성(IntelliSense) — 문맥에 맞는 테이블 · 컬럼 · 루틴 · 데이터 타입 · 키워드를 제안합니다. 외래 키에서 JOIN 조건을 만들어 주고, 함수 인자는 시그니처 카드로 보여 줍니다. 직접 부를 때는
Ctrl+Space(macOS⌃Space), 메타 캐시를 새로 읽을 때는Ctrl+Shift+R. - Ctrl 객체 링크 —
Ctrl(macOS⌘)을 누르는 동안 테이블 · 컬럼 · 루틴 이름이 링크가 되어, 코멘트 툴팁과 동작 버튼(탐색기에서 보기 · 200행 보기 · 설명 복사)이 붙은 카드를 띄웁니다. v0.2.6부터 Ctrl+클릭은 캐럿 추가/제거이고 Ctrl+우클릭은 편집기 메뉴입니다(설정ctrl.click·ctrl.right_click으로 옛 동작 복원). Ctrl+Shift+클릭은이름 - 설명복사입니다.F4= 객체 탐색기에서 보기. - Goto Anything —
Ctrl+P로 열린 탭 → 최근 파일 → 프로젝트 폴더 순으로 파일을 퍼지 검색합니다. 접두어로>명령 ·:줄 번호 ·@심볼 ·%본문 ·?도움말을 고르고,이름:줄형식도 받습니다.Ctrl+R은 심볼로 바로 이동합니다. - SQL 포맷 —
Shift+Alt+F로 내장 포맷터를 적용합니다(선택 영역 · 캐럿 문장 · 문서 전체). 콤마 위치 · 공백/탭 ·WHERE 1=1· 별칭 정렬 같은 공통 옵션(format.*)이 있고, 미리보기 탭으로 결과를 먼저 볼 수 있습니다. 포맷 프리셋(format.preset: default · kiros33 · river · custom)은 한 번에 적용하고 5초 안에 되돌립니다. river(콤마 앞) 정렬과 PL/SQL · T-SQL · PL/pgSQL 블록 재들여쓰기(format.plsql)도 있습니다. 확장 포맷터를 기본으로 지정할 수도 있습니다. - 북마크 —
Ctrl+F2토글 ·F2/Shift+F2다음/이전 ·Ctrl+Shift+0~9번호 북마크 지정 ·Ctrl+0~9그 번호로 이동. 거터 · 미니맵 · 줄 끝 라벨로 표시되고 북마크 패널(Ctrl+Shift+B)에서 모아 봅니다. v0.5.0부터 서버 객체의 소스를 다시 여는 객체 DDL 북마크 · 메모 · 그룹 간 끌어 놓기가 있습니다. - 파일 검색 —
Ctrl+Shift+F로 폴더 전체를 검색합니다(.gitignore일부 규칙 반영). CLInsql grep과 같은 엔진입니다. - 글꼴 크기 —
Ctrl+=/Ctrl+-/Ctrl+휠로 포커스가 있는 영역(편집기 또는 결과 그리드)만 바꿉니다. - 한글 입력 — 조합 중 입력과 되돌리기가 한 단위로 처리됩니다.
- 오류 자리로 캐럿 — 문장이 실패하면 서버가 알려 준 위치로 캐럿이 갑니다(
editor.error_goto). 구문 오류면 그 앞에서 키워드와 한두 글자 다른 낱말(예DISTINC)을 찾아 그 자리로 옮기고, Output 탭에Suspected typo줄을 남깁니다(editor.error_analyze). - Insert Sequence —
Ctrl+Alt+N(macOS⌘⌥N)으로 다중 캐럿 자리에 숫자 · 문자 · 날짜 · 시각 · 목록을 차례로 넣습니다. 표현식은1+1처럼 쓰고 입력창에?를 치면 도움말이 나옵니다. 내장 확장이라 설정과 단축키는 확장 영역에 있습니다. - 아웃라인 — 선언된 이름(CREATE 대상 · 루틴 · CTE ·
DEFINE· 커서 등)을 트리로 보여 주고 캐럿을 따라갑니다. 일반 문장은 필터 옆 토글(Select · DML · DDL · Other)로 켭니다. - 찾기 —
Ctrl+F를 열면 검색어가 전체 선택됩니다. 여러 줄을 선택한 채 열면 선택을 그대로 두며, 자동 범위는editor.find_auto_scope로 고릅니다. 열 모드의 Home/End는 캐럿마다 자기 줄 안에서 움직입니다. - 이진 파일 — 이미지 · 압축 · 실행 파일은 읽기 전용 안내 탭으로 열립니다.
- 구문 색(v0.6.0~) — 자료형 · 접속한 방언의 내장 함수 · 바인드 변수 · 문장 종결자 · 명령에 각자 색을 씁니다. 프리셋은
editor.color_preset(nexa · dbeaver · golden)이고, 키워드 판정은 방언별 예약어 표를 따릅니다. - 미니맵(v0.5.0~) — 보기 ▸ 미니맵으로 켜고 끄며, 좁은 편집기와 유휴 때 자동으로 숨습니다. 배율(
editor.minimap_scale) · 왼쪽 배치 · 저장 뒤 수정 줄 · git 변경 줄을 지원합니다. - 줄 끝 선택(v0.6.0~) — 저장 창에서 유지 · LF · CRLF · CR을 고릅니다.

프로젝트와 작업 환경
| 모드 | 켜는 법 | 상태가 놓이는 곳 |
|---|---|---|
| 파일 모드 | 그냥 실행 | 사용자 설정 폴더 |
| 폴더 모드 | nexa-sql <폴더> | 그 폴더의 .nsql/ |
| 프로젝트 모드 | <이름>.nsql-project 파일 열기 | 프로젝트 파일 안 |
프로젝트 파일은 폴더 목록과 열린 탭 순서 · 캐럿 위치 · 북마크 · 미저장 스크립트 본문까지 담아, 다시 열면 마지막 작업 상태가 돌아옵니다. 자동 저장(project.autosave)은 기본 켬이며 30초마다 바뀐 것이 있을 때만 저장합니다. 마지막에 붙어 있던 접속은 표식만 남고 자동으로 다시 접속하지 않습니다.
- 프로젝트 설정(v0.5.0~):
.nsql-project안에 프로젝트별 설정 절이 있습니다. 설정 창의 프로젝트 스위치를 켜면 허용된 키만 보이고, 카드에 값의 출처가 표시됩니다. 문법별 들여쓰기와 열 때 들여쓰기 감지(editor.detect_indent)도 있습니다. - 미저장 탭 보관(
project.hot_exit· 기본always· v0.5.0~): 프로젝트 없이 미저장 탭을 둔 채 종료하면 묻지 않고 보관했다가 다음 시작 때 복원합니다. 종전처럼 물으려면off로 두세요. - Goto Anything 색인은 프로젝트 루트의
.gitignore를 따릅니다(project.gitignore· 기본 켬).
큰 파일
스크립트가 커지면 탭마다 단계를 정해 부담이 큰 부가 기능만 끕니다. 편집 · 선택 · 찾기 · 실행은 크기와 관계없이 그대로 됩니다.
| 단계 | 기준(둘 중 하나) | 꺼지는 것 |
|---|---|---|
| L1 | 5 MB 또는 100,000줄 | 미니맵 · 같은 낱말 강조 · 줄 변경 표시 · 괄호 색 |
| L2 | 20 MB 또는 300,000줄 | 위 + 구문 강조 |
| 열기 전 확인 | 50 MB | — |
이 탭만 모두 켜려면 명령 팔레트에서 Toggle Large File Optimizations (This Tab) 을 실행합니다.
쿼리 실행과 결과 그리드
실행
| 동작 | Windows · Linux | macOS |
|---|---|---|
| 캐럿이 있는 문장 실행 | Ctrl+Enter | ⌘↩ |
| 새 결과 탭에 실행 | Ctrl+\ | ⌘\ |
| 스크립트 전체 실행 | F5 | F5 |
| 다음 · 이전 문장으로 | Alt+↓ / Alt+↑ | ⌥↓ / ⌥↑ |
- 문장은 SQL*Plus처럼
;· 단독/·GO로 나뉩니다. - 실행 중에는 실행 상태 카드에 문장 · 시작 시각 · 경과 · 행 수 · 전송량이 보입니다. ■ 로 중지하고, 서버가 취소에 응하지 않으면 ■를 한 번 더 눌러 강제 중지합니다.
- 객체 탐색기에서 소스 열기로 연 프로시저 · 패키지 · 뷰 등의 탭에서
F5는 본문을 나누지 않고 한 단위로 보내 한 번에 컴파일합니다. - 실행 계획 검토: 실행 ▸ 실행 계획(
Ctrl+Alt+X, macOS⌘⌥X)은 문장을 실행하지 않고 계획 트리와 자동 검토 탭을 보여 줍니다. 실행 ▸ 실제 실행 계획은 문장을 실제로 실행해 실측 행 수 · 시간을 보여 주므로, DML이면 데이터가 바뀝니다. CLI는nsql explain [--analyze] [--raw]입니다.
결과 그리드
- 가져오기: 기본은 200행씩(
grid.max_rows) 가져오고, 스크롤 끝에서 다음 200행을 더 읽습니다. Σ로 건수를 세고 전체 조회로 끝까지 읽습니다. 행 상한을 0으로 두면 첫 묶음이 바로 보이고 나머지가 도착하는 대로 이어 붙습니다. 결과 메모리는 1 GB(grid.memory_budget_mb)에서 멈춥니다. - 결과 일관성: 서버 커서 없이 OFFSET으로 다음 페이지를 받을 때 앞 페이지 끝 행을 겹쳐 받아 비교하고, 서버 결과가 바뀌었으면 누락 · 중복 대신 오류로 멈춥니다(
grid.overlap_check· 기본 켬). 처음부터 다시 받아야 할 때는 먼저 묻습니다(grid.refetch_confirm). - 여러 결과: REF CURSOR나 결과 집합이 여럿이면
결과1·결과2… 탭이 열립니다. - 열 머리 타입 배지:
AZ(문자) ·09(숫자) ·DT(날짜) ·ID·TF·BI·EX로 열의 타입을 한눈에 보고, 머리에 마우스를 올리면 데이터 타입 카드가 뜹니다. - 필터: 열 머리 깔때기로 엑셀식 값 목록(모두 선택 · 검색 · 다중 선택)을 열고, 필터 칩 · OR 모드로 조합합니다. 그리드 아래 조건 바에 식을 쓰고 Enter를 누르면 서버에 다시 조회합니다(열 머리를 끌어다 놓아도 됨).
- 자연 정렬:
ITEM2 < ITEM10처럼 숫자 부분을 값으로 비교합니다(ui.sort_natural). - Output 탭:
DBMS_OUTPUT·PRINT/RAISERROR·RAISE NOTICE· 컴파일 결과 · 오류 · 문장 완료 줄이 모입니다(Ctrl+Shift+O). 오류 줄을 두 번 클릭하면 편집기의 그 줄로 갑니다. 오류 줄은 빨강, 경고 줄은 노랑이고, 탭 안에서Ctrl+F로 찾습니다. - Oracle 라이브 모니터(v0.6.0~): 실행 중
DBMS_PIPE(oracle.live.pipe)와V$SESSION_LONGOPS진행(oracle.live.longops)을 로그의 Live 종류로 봅니다. CLI는nsql run --live입니다. - 값 보기:
Shift+Enter· Shift+더블클릭으로 값 창을 엽니다. 편집 가능한 글 셀은 NULL · 빈 문자열 · 값 중에서 고릅니다. - 복사: 우클릭 메뉴에 머리글과 함께 복사(공백 · 콤마 · 탭)와 머리글만 복사가 있습니다.
- 트랜잭션 로그: 실행한 문장마다 시간 · 행 수 · 결과 · 트랜잭션 결과(커밋됨 · 롤백됨 · 대기)를 남기고, 행을 누르면 보낸 문장 / 바인드 변수 / 값을 치환한 문장 세 층으로 보여 줍니다.

그리드에서 데이터 편집
단일 테이블을 조회한 결과는 셀을 바로 고칠 수 있습니다. 고친 내용은 적용(✓) 을 누를 때까지 서버에 가지 않고, 적용은 한 트랜잭션으로 묶여 하나라도 실패하면 전부 되돌아갑니다.
- 편집 시작: Enter ·
F2· 더블클릭 · 그냥 타이핑. 확정: Enter · Tab. 취소: Esc. 날짜 · 시각 셀은Ctrl+;= 열 종류에 맞는 지금 ·Ctrl+Shift+;= 현재 시각. - 행 추가 · 복제(
Ctrl+D) · 삭제, 탭/줄로 구분된 표 붙여넣기, 그리드 전용 되돌리기, 보낼 SQL 미리보기를 지원합니다. - 행은 PK/UNIQUE 키 → (키가 결과에 없으면) 숨은 키 열 → DBMS 행 식별자(Oracle
ROWID· SQLiterowid· PostgreSQLctid) → 비교 가능한 모든 열 순서로 식별합니다. - JOIN · GROUP BY · DISTINCT · UNION · 식 열이 있는 결과, 뷰 · 프로시저 결과, 운영(PRD) 서버는 읽기 전용입니다. ClickHouse는 그리드 편집을 지원하지 않습니다.
객체 찾기와 탐색기 검색
객체 찾기 창(Ctrl+Alt+F, macOS ⌘⌥O · 보기 ▸ 객체 찾기)은 연결된 모든 서버에서 객체 이름 · 설명(코멘트) · 컬럼 이름 · 소스 본문을 한 번에 찾습니다.
- 대소문자 · 낱말 · 정규식 토글, 스키마 필터, 서버 다중 선택, SQL Server 전 데이터베이스 스위치, 결과 거르기 상자를 제공합니다. 언제든 중지할 수 있습니다.
- 일치 줄을 클릭하면 그 객체의 소스가 그 줄에서 미리보기 탭으로 열립니다(
findobj.preview_click). 더블클릭은 정식 탭, 객체 탐색기에서 보기는 컬럼까지 찾아 줍니다. - 객체 탐색기 필터는 기본으로 서버 전체를 찾습니다(
explorer.search_scope). 설명 포함 토글(explorer.search_desc)을 켜면 코멘트에도 일치합니다. - 탐색기 행을 편집기 · 필터 상자 · 조건 바로 끌어 놓으면 이름이 들어갑니다(Shift = 전체 이름).
세션 변수 (SQL*Plus 방식)
Nexa SQL의 대표 기능입니다. SQL*Plus의 변수 문법을 Oracle 밖의 DBMS에서도 그대로 쓰도록 엔진이 각 방언으로 바꿔 보냅니다.
두 종류의 변수
| 종류 | 문법 | 어디서 처리되나 |
|---|---|---|
| 바인드 변수 | VAR v NUMBER · EXEC :v := 값 · EXEC :v := 식 · 문장 안의 :v | 리터럴 대입은 클라이언트(서버 왕복 없음), 식은 서버에서 계산. 값은 진짜 바인드로 전달 |
| 치환 변수 | DEFINE v = 글 · &v · &&v · ${v[:형식]} · ${env:이름} | 문장을 보내기 전에 클라이언트가 글자로 바꿈 |
예제
-- 선언과 리터럴 대입(서버 왕복 없음)
VAR V_LIMIT NUMBER = 3
EXEC :V_DEPT := 'IT'
-- 서버 식 대입
EXEC :V_CNT := (SELECT COUNT(*) FROM emp)
-- 한 행을 여러 변수로(0행 · 여러 행이면 오류)
EXEC SELECT MAX(sal), MIN(sal) INTO :V_MAX, :V_MIN FROM emp WHERE dept = :V_DEPT;
-- 뒤 문장에서 바인드로 사용
SELECT * FROM emp WHERE sal >= :V_MIN AND ROWNUM <= :V_LIMIT;
PRINT V_MAX
SHOW VARIABLES
같은 스크립트가 Oracle에서는 BEGIN … END; 블록과 OUT 바인드로, SQL Server에서는 sp_executesql과 꼬리 SELECT로, PostgreSQL · SQLite에서는 $n 바인드와 한 행 조회로 바뀌어 실행됩니다. 어떻게 바뀌는지는 서버 없이 nsql plan -d mssql 파일.sql로 미리 볼 수 있습니다.
참고 SQL Server의
@이름은 T-SQL 자신의 변수라 배치(GO)가 끝나면 사라집니다. 배치를 넘어 값을 들고 다니려면:이름을 쓰세요.
범위(층)와 지우기
- 변수는 탭 → 연결 공유(SHARE) → 글로벌(GLOBAL) 층에 살고, 같은 이름이면 탭 값이 우선합니다. 선언하면서 층을 정할 수 있습니다:
VAR A NUMBER = 10 GLOBAL·VAR x VARCHAR2(30) SHARE. - 대입은 그 변수가 사는 층에 들어갑니다. 이 탭에서만 다른 값을 쓰려면 먼저
VAR A로 탭에 선언하세요. - 지우기:
VAR 이름 DROP [GLOBAL]·VAR CLEAR·VAR CLEAR GLOBAL·VAR CLEAR ALL. - 타입 없이 생긴 변수는 값에 따라 타입이 바뀌고, 타입을 적어 선언하면 고정됩니다.
- 변수 창(보기 ▸ Variables · 툴바 [변수])에서 모든 층의 이름 · 타입 · 값을 보고 고칠 수 있습니다.
PASSWORD처럼 비밀로 보이는 이름은 가려집니다. - 입력 창: 값이 없는 변수는 입력 창이 타입과 서버로 보낼 형태를 미리 보여 주며 묻습니다. 편집기에서 변수 위에 마우스를 올리면 값 카드가 뜹니다.
- 접속 프로필 변수: 프로필에 변수를 붙여 둡니다(
nsql conn var).DEFINE 이름 SHARE|LOCAL|GLOBAL로 치환 변수의 층도 정합니다. - 바인드 가시성: 실행 로그에
bind N·declare-prepend·inline N으로 값을 어떻게 보냈는지 나옵니다.

치환 변수와 &
${v:q}= SQL 문자열 상수로 감싸기 ·${v:id}= 식별자 인용 ·${env:PATH}= OS 환경 변수.- 스크립트 인자는
&1 &2 …로 받습니다(nsql run file.sql arg1 arg2). - DBMS별
&기본 동작(v0.1.9~): Oracle은 SQL*Plus처럼 정의 안 된&이름을 입력 창으로 묻습니다. SQL Server · PostgreSQL · SQLite는DEFINE·:setvar로 정의한 이름만 바꾸고 정의 안 된&x는 그대로 보내므로'R&D'에 입력 창이 뜨지 않습니다. 설정script.define(auto · on · off)이나 스크립트의SET DEFINE ON/OFF로 바꿉니다. 문자열 안의&를 글자 그대로 두려면script.define_in_strings를 끕니다(v0.5.0~ · 기본 켬). - 내장 변수:
${workspaceFolder}·${file}·${fileBasenameNoExtension}·${profile}·${dialect}·${config:키}등 VS Code와 같은 이름을 스크립트와 경로 설정에서 씁니다.
SPOOL ${workspaceFolder}/out/${fileBasenameNoExtension}.log
SELECT '${profile}' AS who FROM dual;
SPOOL OFF
자주 쓰는 SQL*Plus식 명령
CONNECT 대상 · SET DEFINE OFF · SHOW ERRORS · DESC 이름 · @파일 인자… · @@파일(호출한 스크립트 폴더 기준) · SPOOL 파일 [APPEND] / SPOOL OFF · WHENEVER SQLERROR EXIT. psql · sqlite3 · sqlcmd 사용자를 위해 \d · \dt · .tables · \i · :r · \c 같은 별칭도 대응됩니다. 글 한 줄 출력은 PROMPT를 씁니다. SQL Server 밖에서 PRINT '글'을 쓰면 안내 한 줄을 보여 주고 다음 문장으로 넘어갑니다.
데이터 내보내기
화면에서 복사
결과 그리드 우클릭 메뉴에서 머리글과 함께 복사 · CSV · 텍스트 · Markdown · JSON · SQL(SELECT/INSERT/UPDATE/DELETE/MERGE) 로 복사합니다. SQL 형식은 PK → 첫 유니크 인덱스 → 앞 3개 열 순서로 키를 고르고, 앞 3개 열로 떨어지면 경고 주석을 붙입니다.
주의 “앞 3개 열” 경고가 보이면 실행 전에
WHERE/ON절을 직접 확인하세요. 열 3개가 행을 유일하게 고르지 못하면 의도보다 많은 행이 바뀝니다.
파일로 내보내기
결과 그리드의 파일로 내보내기(Excel · CSV · TSV · JSON · JSON Lines · SQL INSERT · Parquet)로 저장합니다. 기본 파일 이름은 report_<시각>.xlsx이고(export.format · export.name_pattern), 재조회할지 화면 결과를 쓸지는 export.source로 고릅니다. 명령줄은 nsql export입니다.
nsql export -c prod -t EMP -f csv -o emp.csv
nsql export -c prod -q "SELECT * FROM emp WHERE deptno=10" -f json -o dept10.json
nsql export -c prod -t EMP -f insert:EMP_BACKUP -o seed.sql
nsql export -c pg1 -t big_table -f csv --fast -o big.csv # PostgreSQL COPY TO 사용
형식: csv(기본) · tsv · json · jsonl · insert[:테이블] · xlsx · parquet(v0.5.0~). 배치로 스트리밍해 쓰므로 결과 전체를 메모리에 올리지 않습니다. --fast는 서버가 직접 csv/tsv를 만들게 하며(PostgreSQL), 지원하지 않으면 안내 뒤 일반 경로로 내보냅니다. nsql run -f csv 질의.sql > out.csv처럼 스크립트 결과를 그대로 파일로 받을 수도 있습니다.
파일에서 넣기 (Import)
CSV · TSV · JSON · JSON Lines · xlsx · Parquet(v0.6.0~)를 표에 INSERT만 합니다(기존 행은 고치지 않음). 인코딩과 구분자는 자동으로 판정하고, 형을 추천받아 새 표를 만들 수도 있습니다.
- 화면: 실행 ▸ 파일에서 데이터 가져오기… 또는 객체 탐색기에서 표 우클릭 ▸ 데이터 가져오기 → 원천 선택 → 미리보기 · 열 매핑 · 배치 · 커밋 간격 확인 → Start.
- 명령:
nsql import -c prod -t EMP emp.csv
nsql import -c prod -t EMP -f tsv --map emp_no=EMPNO,name=ENAME --commit-every 5000 emp.tsv
nsql import -c prod -t SALES --create -f xlsx --sheet 2024 --dry-run sales.xlsx # 새 표 · 시험 실행
auto 경로는 DBMS의 빠른 길을 고릅니다: Oracle OCI 배열 DML · PostgreSQL COPY … FROM STDIN · SQL Server TDS 벌크 적재 · MySQL LOAD DATA LOCAL INFILE. 빠른 길이 없으면(Oracle Thin · SQLite 등) 다중 행 INSERT를 씁니다. 배치가 실패하면 한 행씩 다시 넣어 파일의 몇 번째 행 · 줄에서 무슨 오류가 났는지 알려 주고, 그 앞까지 커밋된 행 수를 보고합니다. 전부-아니면-무로 하려면 커밋 간격을 0으로 두세요.

CLI nsql
nsql은 GUI와 같은 엔진 · 같은 프로필 · 같은 설정 파일을 쓰는 명령줄 도구입니다. 결과 데이터는 stdout, 접속 알림 · 진행 · 경고는 stderr로 나가므로 > 파일로 데이터만 받을 수 있습니다.
명령 목록
| 명령 | 하는 일 |
|---|---|
run | 스크립트(파일 또는 - = 표준 입력)를 실행하고 결과 출력 |
shell | 대화형 셸(sqlplus/psql식 · 세션 동안 변수 유지) |
export | 질의나 테이블 전체를 파일로 |
import | csv/tsv/json/jsonl/xlsx/parquet을 표에 대량 적재 |
format | 내장 포맷터로 SQL 정리 |
explain | 실행 계획과 자동 검토(--analyze = 실제 실행 · --raw = DBMS 원문) |
plan | 접속 없이 스크립트 분석(문장 분리 · 변수 · 방언별 재작성) |
conn | 연결 프로필 관리 |
cat | 카탈로그 — 스키마 · 객체 · 컬럼 · 소스 · 컴파일 오류 · DDL 생성 |
config | 설정 보기 · 바꾸기(GUI와 공유) · export / import로 내보내기 · 가져오기 |
grep | 파일 내용 검색(GUI 파일 검색과 같은 엔진) |
bookmark | 북마크(GUI와 같은 워크스페이스 파일) |
license | 라이선스 상태 · 요청 코드 · 설치 |
driver | 드라이버 패키지 검색 · 설치 · 갱신 · 삭제 |
ext | 확장 저장소 도구(check · pack · verify · list) |
nsql --help, nsql <명령> --help가 인자 · 옵션 · 예제의 최종 기준입니다. nsql --help 첫 줄에 버전과 판(lite/full)이 나옵니다.
예제
# 서버 없이 바로 해 보기
echo "SELECT 'hello' AS a, 1+1 AS n;" | nsql run -c "sqlite::memory:" -
# 스크립트 실행 · 출력 형식
nsql run -c prod report.sql
nsql run -c prod -f markdown query.sql > result.md
nsql run -c prod --max-rows 1000 --timing big.sql
nsql run -c prod -v deptno=10 report.sql # 실행 전에 치환 변수 정의(&deptno)
# 대화형 셸
nsql shell -c prod
# 카탈로그
nsql cat -c prod tables
nsql cat -c prod -s HR columns EMPLOYEES
nsql cat -c prod source packages PKG_ORDER
nsql cat -c prod gen merge EMPLOYEES
# 접속 없이 방언별 재작성 보기
nsql plan -d mssql session-vars.sql
# 설정
nsql config set ui.lang ko
nsql config get grid.max_rows
대화형 셸
터미널에서 nsql shell을 띄우면 자체 줄 편집기가 켜집니다.
| 동작 | 키 |
|---|---|
| 커서 이동 | ← → · Home / End · Ctrl+A / Ctrl+E |
| 단어 이동 | Alt+B / Alt+F · Ctrl+←→ · Alt+←→ |
| 지우기 | Ctrl+U · Ctrl+K · Ctrl+W · Alt+D · Alt+Backspace |
| 되돌리기 · 다시 · 붙이기 | Ctrl+Z · Ctrl+Y · Alt+Y |
| 기록 | ↑ ↓ · Ctrl+R(거꾸로 찾기) |
| 완성 | Tab — GUI와 같은 문맥 엔진(키워드 · 표 · 컬럼) |
| 여러 줄 | Alt+Enter로 줄 바꿈 · 기록은 문장 단위 |
- 기록은 설정 폴더의
shell_history에 평문으로 저장됩니다(cli.history_max· 기본 500 · 0 = 끔). 접속 문자열에 적은 비밀번호도 그대로 남을 수 있습니다. SHOW VERSION·SHOW AUTOCOMMIT, 셸show(설정 표)를 지원합니다. 셸은session.autocommit을 따르고,nsql run은 수동 커밋 + 끝날 때 커밋입니다.nsql*n>프롬프트의 n은 대기 중인 트랜잭션 수입니다.autocommit=을 프로필과 접속 문자열에 쓸 수 있고, 표준 입력이 터미널이 아니면 대화형으로 묻지 않습니다.
비밀번호 전달 방법
찾는 순서는 -p → 환경 변수 NSQL_PASSWORD → (터미널이면) 숨김 입력입니다. --no-prompt면 묻지 않고 실패합니다(CI용). 명령줄 · 셸 기록에 남기지 않으려면 --password-stdin으로 표준 입력 첫 줄에서 읽습니다.
echo "$PW" | nsql run --password-stdin -c "oracle://scott@dbhost:1521/ORCL" script.sql
NSQL_PASSWORD='s3cr3t' nsql run -c "postgres://app@dbhost:5432/appdb" --no-prompt migrate.sql
출력 형식과 종료 코드
-f:grid(기본) ·markdown·csv·tsv·json·jsonl·sql:select|insert|update|delete|merge·insert:<테이블>.- 표 모양:
--width <n|auto>·--max-col-width <n>·--overflow none|wrap|truncate|expanded·-x(레코드 보기). 셸 안에서는set format markdown·\x·copy markdown(직전 결과를 클립보드로). - 영구 기본값은
nsql config set cli.format markdown처럼 설정합니다. 우선순위는 셸set> 명령줄 플래그 >cli.*설정입니다. - 종료 코드: 0 = 전부 성공 · 1 = 하나 이상 실패(실패마다 stderr에 줄 번호) · 2 = 사용법 · 접속 오류.
- CLI는 기본으로 글로벌 변수를 쓰지 않습니다(배치가 화면의 값에 영향받지 않게). 이어 쓰려면
nsql config set vars.cli_global on.
확장 (Sublime 패키지)
Nexa SQL의 확장은 Sublime Text의 Package Control과 비슷한 방식입니다. 저장소(폴더 또는 URL)의 index.json에서 패키지 목록을 읽고, 패키지마다 extension.json이 파일과 SHA-256을 밝혀 검증한 뒤 설치합니다.
확장 관리자 켜기
확장 관리자는 기본으로 꺼져 있습니다(extensions.enabled). 명령 팔레트(Ctrl+Shift+P)에서 Extension Manager: Enable Extension Manager를 실행하면 켜지고, 그다음 Install Extension · Remove · List · Enable/Disable · Add Repository 명령을 씁니다. 저장소는 관리자 명령을 실행할 때만 읽고 자동으로 조회하지 않습니다.
공식 저장소의 확장 (v0.6.0 기준)
| 확장 | 버전 | 내용 |
|---|---|---|
| Rainbow Pairs | 1.1.2 | 괄호 · 따옴표 짝을 깊이별 색으로 · 짝/형제/부모/자식으로 이동 |
| SQL Formatter for kiros33 | 1.3.5 | 탭 정렬 AS · 연산자, WHERE 1=1, 집합 연산자 구분선 스타일 포맷터 |
| Project Explorer Menus | 0.2.0 | 열린 파일과 프로젝트 탐색기 행의 우클릭 메뉴(열기 · 위치 보기 · 경로 복사) |
| Insert Sequence | 0.1.1 | 다중 캐럿 순번 넣기의 WASM 판 — 설치하면 내장 기능을 대신함 |
| Uppercase Selection | 0.1.0 | 상태 있는 확장 예제(ABI 1.3) — 편집기 읽기/쓰기 API로 선택 영역을 대문자로 |
| Hello Extension | 0.3.0 | SDK 예제 — 로그 한 줄을 쓰는 명령 |
- 코드 확장은 WASM으로 동작하며 연료 · 메모리 · 시간 상한 안에서 실행됩니다. 설치 · 삭제에 앱 재시작이 필요 없습니다.
- 문법 · 테마 · 스니펫 · 키맵 같은 데이터 패키지는
<설정 폴더>/Packages/<패키지>/에 배치됩니다. 사용자 구문 정의는<설정 폴더>/Packages/<패키지>/<이름>.nexa-syntax형식으로 두면 내장 구문을 덮어씁니다. - 기본 저장소는
https://raw.githubusercontent.com/SosomLab/nexa-sql/main/extensions이며, 같은 구조의 폴더나 URL을 Add Repository로 더할 수 있습니다. 확장을 만들려면 저장소의extensions/sdk/(Rust →wasm32-unknown-unknown)를 참고하세요.
참고 v0.6.0의 구문 파일 형식은 자체
.nexa-syntax입니다. 패키지 폴더 배치 방식과 키맵 파일(.sublime-keymap)은 Sublime을 따르지만.sublime-syntax를 그대로 읽지는 않습니다. 확장 저장소를 만들 때는nsql ext check·pack·verify로 검사합니다.
단축키
Windows · Linux의 Ctrl은 macOS에서 ⌘입니다. 아래 표에서 macOS 열이 다른 것만 따로 적었습니다(⌃ = Control, ⌥ = Option). 모든 단축키는 설정 key.<명령 id> 또는 단축키 캡처 창에서 바꿀 수 있고, key.preset(auto · windows · macos · linux)으로 기본 세트를 고릅니다.
파일 · 탭 · 보기
| 동작 | Windows · Linux | macOS |
|---|---|---|
| 명령 팔레트 | Ctrl+Shift+P | ⌘⇧P |
| Goto Anything(파일 · 명령 · 심볼) | Ctrl+P | ⌘P |
| 새 탭 | Ctrl+N / Ctrl+T | ⌘N / ⌘T |
| 열기 · 저장 · 다른 이름으로 저장 | Ctrl+O · Ctrl+S · Ctrl+Shift+S | ⌘O · ⌘S · ⌘⇧S |
| 탭 닫기 | Ctrl+W | ⌘W |
| 다음 · 이전 탭 | Ctrl+Tab · Ctrl+Shift+Tab (Ctrl+PgDn/PgUp) | ⌃Tab · ⌃⇧Tab (⌘⌥→/←) |
| 환경 설정 | Ctrl+, | ⌘, |
| 접속 창 | Ctrl+Shift+N | ⌘⇧N |
| 객체 탐색기 | Ctrl+Shift+E | ⌘⇧E |
| 파일 검색 패널 | Ctrl+Shift+F | ⌘⇧F |
| 북마크 패널 | Ctrl+Shift+B | ⌘⇧B |
| Output 탭 | Ctrl+Shift+O | ⌘⇧O |
| 로그 창 | F10 | F10 |
| 객체 찾기 | Ctrl+Alt+F | ⌘⌥O |
| 확장 패널 | Ctrl+Shift+X | ⌘⇧X |
| 테마 · 화면 언어 전환 | Ctrl+Alt+T · Ctrl+Alt+L | ⌘⌥T · ⌘⌥L |
| 글꼴 크게 · 작게 | Ctrl+= · Ctrl+- | ⌘= · ⌘- |
실행 · 결과
| 동작 | Windows · Linux | macOS |
|---|---|---|
| 문장 실행 | Ctrl+Enter | ⌘↩ |
| 새 결과 탭에 실행 | Ctrl+\ | ⌘\ |
| 전체 실행 | F5 | F5 |
| 커밋 · 롤백 | Ctrl+Alt+C · Ctrl+Alt+R | ⌘⌥C · ⌘⌥R |
| 실행 계획 | Ctrl+Alt+X | ⌘⌥X |
| 값 보기 창 | Shift+Enter | Shift+↩ |
| 날짜 · 시각 셀: 지금 · 현재 시각 | Ctrl+; · Ctrl+Shift+; | ⌘; · ⌘⇧; |
| 결과 탭 닫기 | Ctrl+Shift+W | ⌘⇧W |
| 다음 · 이전 결과 탭 | Ctrl+Alt+→ · Ctrl+Alt+← | ⌃⌥→ · ⌃⌥← |
| 객체 탐색기에서 보기 | F4 | F4 |
| 객체 정보를 탭으로 | Shift+F4 | Shift+F4 |
| 객체 탐색기: 선택 항목 메뉴 | Shift+F10 | Shift+F10 |
편집
| 동작 | Windows · Linux | macOS |
|---|---|---|
| 다음 같은 낱말 추가 · 건너뛰기 | Ctrl+D · Ctrl+K, Ctrl+D | ⌘D · ⌘K, ⌘D |
| 같은 낱말 전부 선택 | Alt+F3 | ⌃⌘G |
| 선택을 줄마다 커서로 | Ctrl+Shift+L | ⌘⇧L |
| 위 · 아래 줄에 커서 추가 | Ctrl+Alt+↑/↓ | ⌃⇧↑/↓ |
| 줄 선택 · 복제 · 삭제 · 합치기 | Ctrl+L · Ctrl+Shift+D · Ctrl+Shift+K · Ctrl+J | ⌘L · ⌘⇧D · ⌃⇧K · ⌘J |
| 줄 위 · 아래로 옮기기 | Ctrl+Shift+↑/↓ | ⌃⌘↑/↓ |
| 줄 주석 · 블록 주석 | Ctrl+/ · Ctrl+Shift+/ | ⌘/ · ⌘⌥/ |
| 들여쓰기 · 내어쓰기 | Ctrl+] · Ctrl+[ / Shift+Tab | ⌘] · ⌘[ |
| 대문자 · 소문자 | Ctrl+K, Ctrl+U · Ctrl+K, Ctrl+L | ⌘K, ⌘U · ⌘K, ⌘L |
| SQL 포맷 | Shift+Alt+F | ⇧⌥F |
| Insert Sequence | Ctrl+Alt+N | ⌘⌥N |
| 코드 완성 | Ctrl+Space | ⌃Space |
| 인텔리센스 캐시 새로 고침 | Ctrl+Shift+R | ⌘⇧R |
| 심볼로 이동 · 줄로 이동 | Ctrl+R · Ctrl+G | ⌘R · ⌃G |
| 짝 괄호로 · 괄호 안 선택 | Ctrl+M · Ctrl+Shift+M | ⌃M · ⌃⇧M |
| 되돌리기 · 다시 하기 | Ctrl+Z · Ctrl+Y / Ctrl+Shift+Z | ⌘Z · ⌘⇧Z |
| 선택 되돌리기 · 다시 하기 | Ctrl+U · Ctrl+Shift+U | ⌘U · ⌘⇧U |
찾기 · 북마크
| 동작 | Windows · Linux | macOS |
|---|---|---|
| 찾기 · 바꾸기 | Ctrl+F · Ctrl+H | ⌘F · ⌘⌥F |
| 다음 · 이전 찾기 | F3 · Shift+F3 | ⌘G · ⌘⇧G |
| 대소문자 · 낱말 · 정규식 토글 | Alt+C · Alt+W · Alt+R | ⌥C · ⌥W · ⌥R |
| 모두 찾기 · 모두 바꾸기 | Alt+Enter · Ctrl+Alt+Enter | ⌥↩ · ⌘⌥↩ |
| 북마크 토글 | Ctrl+F2 (Ctrl+K, Ctrl+K) | ⌘F2 (⌘K, ⌘K) |
| 다음 · 이전 북마크 | F2 · Shift+F2 | F2 · Shift+F2 |
| 번호 북마크 지정 · 이동 | Ctrl+Shift+0~9 · Ctrl+0~9 | ⌘⇧0~9 · ⌘0~9 |
참고 결과 그리드에 포커스가 있을 때는
F2= 셀 편집,Ctrl+D= 행 복제로 동작합니다.
사용자 키맵 파일
단축키 창(보기 ▸ 단축키) 외에 Sublime 형식의 키맵 파일을 쓸 수 있습니다. <설정 폴더>/Packages/User/Default.sublime-keymap과 OS별 Default (Windows).sublime-keymap · Default (OSX).sublime-keymap · Default (Linux).sublime-keymap을 읽으며, 2단 코드와 조건(context)을 지원합니다.
[
{ "keys": ["ctrl+k", "ctrl+9"], "command": "file.new",
"context": [ { "key": "selection_empty" } ] }
]
파일 바인딩은 단축키 창에 “(파일)” 로 표시되며, 창의 지정보다 파일이 우선합니다. v0.5.0부터 selector(source.sql string 같은 구문 스코프) 조건도 씁니다. 기본 단축키가 없는 view.minimap 같은 명령도 단축키 창에서 지정할 수 있습니다.
설정과 데이터 저장 위치
사용자 설정 폴더
| OS | 경로 |
|---|---|
| Windows | %APPDATA%\nexa-sql |
| macOS | ~/Library/Application Support/nexa-sql |
| Linux | ~/.config/nexa-sql |
환경 변수 NSQL_HOME을 지정하면 그 폴더를 대신 씁니다(시험 · 격리용). 폴더 경로는 nsql config path · nsql conn path로 확인합니다.
| 항목 | 위치 | 내용 |
|---|---|---|
| 설정 | settings.conf | GUI 환경 설정 창과 nsql config가 같은 파일을 봅니다 |
| 연결 프로필 | profiles/ | 프로필 1개 = 파일 1개 · 비밀번호만 암호화 |
| 기기 키 | device.key | 비밀번호 암호화 키의 재료(Windows는 DPAPI 보호 · 그 밖은 0600) |
| 글로벌 변수 | vars/global.sql | GLOBAL 층 변수(디스크에 보존) |
| 라이선스 | license/ | 설치한 라이선스 파일 |
| 데모 DB | demo.sqlite | Demo 프로필의 SQLite 파일 |
| 확장 | extensions/ · Packages/ | 설치한 확장과 배치된 패키지 파일 |
| 드라이버 | drivers/ | 내려받은 드라이버 패키지(<id>/<버전>/) |
| 객체 DDL 백업 | backups/objects/ | 객체를 바꾸거나 지우기 전의 DDL |
| 셸 기록 | shell_history | nsql shell에 입력한 문장(평문) |
| SSH 터널 원장 | run/ssh-tunnels.pids | 비정상 종료 뒤 남은 ssh를 정리하기 위한 프로세스 번호 |
| 지운 프로필 | profiles/.deleted/ | 복구용으로 보관하는 프로필(비밀번호 없음 · 기본 30일) |
- 폴더 모드의 상태(북마크 등)는 그 폴더의
.nsql/, 프로젝트 모드의 상태는.nsql-project파일에 저장됩니다. - 설정 창(
Ctrl+,)은 검색 + 분류 트리로 되어 있고, 바꾸는 즉시 저장 · 적용됩니다. 카드의 키 이름 복사 버튼으로 키를 복사해nsql config get/set에 그대로 쓸 수 있습니다. 자주 바꾸지 않는 설정은 고급 스위치를 켜야 보입니다. - 설정은
nsql config export·nsql config import로 옮길 수 있습니다.
개인정보와 네트워크
- Nexa SQL은 사용 통계나 원격 측정을 보내지 않고, 질의문 · 결과 데이터를 회사로 보내지 않습니다. 라이선스도 오프라인 파일로 확인합니다.
- DB 서버: 사용자가 지정한 서버에 접속합니다. SSH 터널을 쓰면 지정한 SSH 서버에도 시스템
ssh로 접속합니다. - 드라이버 다운로드(v0.2.8~): 필요한 드라이버가 없을 때 GitHub(
raw.githubusercontent.com·github.com과 그 다운로드 호스트)에서 색인과 패키지를 받습니다. 기동할 때 하루 한 번 드라이버 색인도 읽고, 접속 때 새 판이 있으면 먼저 설치합니다. 모두 GET 요청이며, 끄려면driver.auto_install·driver.auto_upgrade·driver.check_updates를 끄세요. - 확장 관리자: 켜 둔 상태에서 관리자 명령을 실행할 때만 확장 저장소(기본 GitHub)를 읽습니다.
- GitHub 같은 호스팅 사업자는 일반 웹 요청처럼 IP 주소와 요청 시각을 알 수 있습니다.
DBMS별 지원 수준
| DBMS | v0.6.0 상태 | 드라이버 · 비고 |
|---|---|---|
| Oracle | 지원 | Thin(기본 · 12c 이상 · Instant Client 불필요) · OCI(설치본 내장 · Instant Client 필요 · 11g 가능) · TNS 별칭 · AS SYSDBA · REF CURSOR · DBMS_OUTPUT · 패키지 오버로드 · 컴파일 오류 표시 |
| SQL Server | 지원 | 순수 Rust(TDS) · 다중 배치 변수 공유 · PRINT/RAISERROR 실시간 · SSMS식 탐색기 · 3부 이름 완성 · TDS 벌크 적재 |
| PostgreSQL | 지원 | 순수 Rust · RAISE NOTICE 실시간 · refcursor · COPY 적재/내보내기 · TLS 지원(v0.4.0~) |
| MySQL · MariaDB | 지원 | 순수 Rust · LOAD DATA LOCAL INFILE 적재 · TLS |
| SQLite | 지원 | 파일 하나 = 서버 하나로 탐색기에 표시 · 확장 모듈 로드 꺼짐 |
| DuckDB | 지원 | 파일 · 메모리 DB · 패키지가 가장 큼(Windows 약 19.6 MB) |
| IBM Db2 (LUW) | 지원 | 네이티브 DRDA · 12.1에서 검증 · 서버 커서 · LOB · CALL 결과 집합/OUT · 취소 · 암호화 로그인 · EXPLAIN 트리 · 10.5 페이징 폴백(10.5 실서버는 미검증) |
| ClickHouse | 지원 | HTTP(8123) · HTTPS(8443) · 서버 측 매개변수 · 트랜잭션 없음 · 그리드 편집 미지원 |
| Redshift · CockroachDB · YugabyteDB · Greenplum · TimescaleDB | 프리셋 | PostgreSQL 드라이버로 접속 |
| Tibero · Altibase · CUBRID · SAP HANA · Informix | 프리셋 | ODBC 경유 · 벤더 드라이버 필요 · REF CURSOR 미지원 |
| MS Access | 실험 | ODBC 경유 |
문제 해결
Oracle에 접속하면 DPI-1047 오류가 나요
Instant Client를 찾지 못한 것입니다. OCI 드라이버를 쓸 때만 나는 오류이므로, Oracle 12c 이상이면 Thin으로 바꾸면 Instant Client 없이 접속됩니다(oracle.driver = thin · ?driver=thin). OCI가 필요하면 Instant Client(Basic)를 설치한 뒤 설정 ▸ DBMS ▸ Oracle에서 폴더를 직접 지정하거나 NSQL_ORACLE_CLIENT_DIR 환경 변수를 설정하고 앱을 다시 시작하세요. 클라이언트 라이브러리는 실행마다 첫 Oracle 접속 때 한 번 로드됩니다.
TNS 별칭으로 접속하면 ORA-12154가 나요
TNS_ADMIN 폴더에 tnsnames.ora가 있는지 설정 ▸ DBMS ▸ Oracle의 읽기 전용 항목에서 확인하세요. host:port/service 형식 접속은 tnsnames.ora 없이도 됩니다.
PostgreSQL 서버에 접속이 거부돼요
서버의 pg_hba.conf와 TLS 설정을 확인하세요. v0.4.0부터 PostgreSQL TLS를 지원하며, 기본 preferred는 TLS를 먼저 시도합니다. 인증서 검증을 요구하면 pg.tls · pg.tls_ca를 확인하세요. ~/.pgpass · pg_service.conf는 읽지 않으니 비밀번호는 프로필이나 입력 창으로 주세요.
다른 PC나 다른 Windows 계정으로 옮긴 프로필이 안 열려요
“비밀번호 봉투를 열 수 없습니다”는 다른 계정 · 다른 PC의 기기 키로 암호화된 프로필이라는 뜻입니다(Windows DPAPI는 같은 계정에서만 풀림). 그 계정에서 nsql conn add <이름> …으로 다시 저장하세요.
'R&D' 같은 문자열에 입력 창이 떠요
Oracle 탭에서는 SQL*Plus처럼 &를 치환 변수로 봅니다. 스크립트 앞에 SET DEFINE OFF를 쓰거나 설정 script.define을 off로 바꾸세요. 다른 DBMS 탭에서는 v0.1.9부터 정의하지 않은 &x는 그대로 보냅니다.
결과가 200행에서 멈춰요
기본 가져오기 단위가 200행입니다(grid.max_rows). 스크롤을 끝까지 내리면 더 읽고, 전체 조회로 끝까지 가져옵니다. CLI는 --max-rows N으로 올리며, 잘렸을 때는 “more rows available”이라고 명시합니다. 200행 뒤마다 “처음부터 다시 받을까요?”가 뜨면 드라이버가 낡은 것입니다. 드라이버 관리자나 nsql driver update로 drivers-v0.1.7 이상으로 갱신하세요.
VPN이 끊긴 뒤 실행이 계속 실패해요
v0.1.8부터 탭 전용(CONNECT) 세션도 네트워크가 돌아오면 자동으로 다시 접속합니다. 이전 버전을 쓰고 있다면 최신 버전으로 올리세요. 토스트를 눌러 바로 다시 접속할 수도 있습니다. 멈춘 호출이 풀리지 않으면 session.call_timeout_secs도 확인하세요.
macOS에서 “확인되지 않은 개발자” 경고가 떠요
서명 · 공증 전 빌드라서 그렇습니다. Homebrew Cask로 설치하거나, xattr -dr com.apple.quarantine "/Applications/Nexa SQL.app"으로 격리 표식을 떼어 내세요.
SQLite 경로를 못 열어요
Windows에서는 Windows 경로를 그대로 쓰세요(sqlite:C:\data\app.db). Git Bash의 /c/... 꼴은 Windows 실행 파일이 읽지 못합니다.
한국어로 바꾸고 싶어요
Ctrl+Alt+L(macOS ⌘⌥L)로 바꾸거나 nsql config set ui.lang ko를 실행하세요. 설정은 GUI와 CLI에 함께 적용됩니다.
드라이버를 내려받지 못해요
접속할 때 드라이버 설치가 실패하면 네트워크나 프록시를 확인하세요(HTTPS_PROXY). 인터넷이 없는 환경이면 다른 PC에서 릴리스의 drivers-v* 항목에 있는 nsql-drivers-all-<버전>-<os>-<arch>.zip을 받아 nsql driver install --file <파일>로 설치합니다. 내려받은 파일은 SHA-256과 서명을 통과해야 설치됩니다.
데모 만들기가 실패해요
데모 DB에는 SQLite 드라이버가 필요한데, 설치본에는 들어 있지 않습니다. 드라이버 관리자나 nsql driver install sqlite로 먼저 설치한 뒤 다시 만드세요. sqlite::memory:로 접속하면 드라이버가 자동으로 설치됩니다.
SSH 터널 접속이 실패해요
터미널에서 ssh user@host가 비밀번호 없이 되는지 먼저 확인하세요. 터널은 키 인증만 쓰고 묻지 않습니다. ssh가 PATH에 없으면 ssh.command에 전체 경로를 적습니다.
버전 변경 이력
버전 흐름 요약 — 2026-09-28 v0.1.0 첫 공개(설치본 5종 + Homebrew) → v0.1.2 SQL 포맷터 · Ctrl 객체 링크 · 그리드 필터 → v0.1.3 Output 탭 · SSMS식 SQL Server 탐색기 · 서버 유형 → v0.1.4 DBMS 아이콘 · 화면 언어 “시스템” → v0.1.5 Linux 저장소 · Chocolatey · winget 채널 개시 → v0.1.6 Goto Anything · 조건 바 · 엑셀식 값 필터 → v0.1.7 점진 결과 표시 · 데이터 타입 완성 · CREATE 문 비교 → v0.1.8 전용 세션 자동 재접속 → v0.1.9 macOS 네트워크 · 폴더 감시와 DBMS별 & 치환 규칙 → v0.2.0 Instant Client 없는 Oracle Thin → v0.2.2 객체 찾기 · 운영 보류 커밋 → v0.2.6 오타 의심 자리 · Ctrl+클릭 캐럿 → v0.2.8 드라이버 분리 · MySQL/MariaDB · DuckDB · ODBC → v0.2.9 실행 계획 검토 → v0.3.0 IBM Db2 · ClickHouse · 아웃라인 재설계 → v0.3.1 확장 드라이버 서버 커서 → v0.4.0 SSH 터널 · PostgreSQL TLS · 키맵 파일 · nsql 셸 줄 편집기 → v0.5.0 포맷 프리셋 · xlsx/parquet 내보내기 · 드라이버 자동 갱신 · 프로젝트 설정 → v0.6.0 xlsx/parquet 가져오기 · 읽기 전용 프로필 · 구문 색 프리셋 · Oracle 라이브 모니터 → v0.7.0 버퍼 비교 · 로컬 히스토리 · 오브젝트 소스 시점 · 선언 차이 비교 · 안전한 그리드 편집 · 창 투명도.
v0.7.0 — 2026-11-07
추가
- 비교 · 로컬 히스토리: 편집기 두 버퍼 비교(
edit.compare_with) ·F7/Shift+F7차이 이동 · 편집기 거터의 git 변경 띠(editor.git_gutter·Alt+F7) · 저장한 파일의 로컬 히스토리(edit.history· 앱 데이터 폴더history/). - 오브젝트 소스 시점: 소스 탭을 열 때와 컴파일(
F5) 직전마다 시점을 남기고, **로컬 히스토리에서 복원…**으로 편집기 탭에 되돌립니다(실행 전에는 서버에 보내지 않음). - 실제 객체와 비교에 선언 차이: 테이블 열(추가 · 삭제 · 타입/NULL · 순서)과 프로시저/함수 인자 · 반환 타입 차이를 비교 머리 줄과 Output 탭에 요약합니다.
- 창 투명도(
window.transparency·window.transparency_blur· Windows · macOS · X11).
개선
- 더 안전한 그리드 편집: UNIQUE 키는 열이 모두 NOT NULL일 때만 행 식별에 쓰고, 적용 전에 키 값 중복을 서버에서 한 번에 확인합니다(
grid.edit_key_check) · 행 식별 방식 머리 배지(KEY · RID · ALL). - 방언 수정: PostgreSQL · DuckDB · ClickHouse
SHOW통과 · 필수 인자 수로 오버로드 선택 · PostgreSQLSET search_path/SET SCHEMA세션 반영 · MySQL 8.0.19+MERGE행 별칭. - 드라이버 drivers-v0.1.11: SQL Server
geography·geometry·hierarchyid·sql_variant열 읽기 · Db2 zonedNUMERIC· 로케이터 디코드.
수정
- 가져오기 오류에서 Skip/Stop을 고르면 커밋 안 된 앞 배치가 누락되던 문제 ·
nsql import --create가 아무것도 못 가져오면 만든 표를 지움 · ClickHouse 결과 그리드 읽기 전용.
동작이 바뀌는 기본값(각각 설정에서 끌 수 있음)
- 창 투명도 기본 켜짐(포커스 5% · 비활성 10%) — 둘 다
0이면 종전처럼 불투명. grid.refetch_confirm기본off— 결과 다시 받기가 묻지 않고 진행(행이 교체되면 경고 토스트 1회).history.enabled기본 켬(항목당 50개 · 전체 200MB) ·grid.edit_key_check기본 켬(키 확인 조회 1회 추가).
v0.6.0 — 2026-11-05
추가
- 데이터 가져오기: csv/tsv(인코딩 · 구분자 자동 판정) · json/jsonl · xlsx · parquet. 미리보기 · 열 매핑 · 형 추천으로 새 표 만들기.
nsql import에-f json|xlsx|parquet·--sheet·--delim·--encoding·--create/--types·--skip·--on-error·--dry-run·--trim·--null-text. - 접속 프로필: 지운 프로필 복구(
nsql conn deleted|restore) · 읽기 전용 프로필 · 비밀번호 없는 내보내기/가져오기. - Oracle 라이브 모니터(
oracle.live.pipe·oracle.live.longops·nsql run --live) · 실행 로그 세션별 필터. - 저장 창 줄 끝 선택 · 서식 있는 잘라내기(
editor.cut_rich) · 완성 열의 키 표시(PK/FK/UQ) ·nsql ext check|pack|verify|list.
변경
- 내보내기 기본값: 저장 창이
result.csv대신report_<시각>.xlsx를 제안합니다(export.format·export.name_pattern). 파일로 내보내기는 형식별 하위 메뉴입니다. - 구문 색: 함수 · 자료형 · 바인드 변수 ·
;· 명령에 각자 색 · 프리셋editor.color_preset· 키워드는 접속한 방언을 따름. - 프로필 삭제가 30일 보관으로 바뀌었습니다(
connect.deleted_keep_days).
개선
- 방언별 SQL 어휘(중첩 블록 주석 ·
E'…'·GO n·U&"…"· 예약어 표) · 한 세션만 끊긴 경우의 전용 토스트 · 보류 카드의 [롤백] · [커밋 후 계속] · 2 MB 파일 타이핑 프레임당 약 52 ms → 6 ms.
수정
- 토스트 버튼 커서 · 파일 창 편집 메뉴 겹침 · 브레드크럼 빈 곳 클릭.
v0.5.0 — 2026-11-03
추가
- SQL 포매터: river 정렬 · PL/SQL · T-SQL · PL/pgSQL 블록 재들여쓰기 · 포맷 프리셋(
format.preset) ·nsql fmt --preset. - 내보내기: GUI와
nsql export의 스트리밍 내보내기 · 새 형식 xlsx · parquet. - 프로젝트 설정 절 · 문법별 들여쓰기 · 열 때 들여쓰기 감지.
- 키맵: 충돌 덧말 · 단축키 창 검색 ·
selectorcontext · 툴바 그룹 순서와 숨김. - 미니맵 토글 · 자동 숨김 · 배율 · 왼쪽 배치 · 변경 줄 표시. 북마크: 객체 DDL · 메모 · 그룹 간 끌기.
변경
driver.auto_upgrade(기본 켬): 접속할 때 캐시된 색인에 새 판이 있으면 먼저 설치합니다. 이제 드라이버 코드가 사용자 조작 없이 갱신될 수 있습니다.project.hot_exit(기본always): 프로젝트 없이 종료할 때 묻지 않고 미저장 탭을 보관합니다.project.gitignore(기본 켬): Goto 색인이.gitignore를 따릅니다.
개선
- 절 위치 인식 자동 완성 · Output 줄 색(⚠ · ✖)과
Ctrl+F· 실행 로그 세션 열 · 상태줄 ⚡ ·&세그먼트 · drivers-v0.1.10.
수정
nsql shell여러 줄 문장: 0.4.0 노트에 적혔지만 0.4.0 바이너리에 빠져 있던 기능을 실제로 넣었습니다.- 구문 오류가 “다시 실행” 확인을 띄우던 오탐 ·
FROM t(DuckDB/ClickHouse) ·TABLE t(PostgreSQL) 조회 취급.
v0.4.0 — 2026-10-30
추가
- SSH 터널: 모든 접속에
?ssh=user@host[:port](+ssh_key) 또는 접속 창 SSH 칸 · 시스템ssh사용 · 키 인증만. - PostgreSQL TLS:
sslmode/tls_ca·pg.tls기본preferred· 접속 상한 20초 · 접속 오류 원인 사슬. - 사용자 키맵 파일(
.sublime-keymap): context 키 · 2단 코드 · 단축키 창의 파일 바인딩과 조건 행. nsql shell줄 편집기: 단어 이동 · 되돌리기/다시/붙이기 · 기록 파일 +Ctrl+R· Tab 완성.SHOW VERSION·SHOW AUTOCOMMIT·--timing=json.- Insert Sequence 내장 확장(다중 캐럿 순번) · “머리글과 함께 복사”와 “머리글만 복사”.
- SQL Server 호출 상한(
session.call_timeout_secs): 멈춘 호출은 소켓을 닫고 다음 실행에서 재접속. 확장 드라이버는 drivers-v0.1.9 필요. - 확장 ABI 1.3: 상태 있는 확장 · 편집기 읽기/쓰기 API · 사건 배달.
개선
- 결과 일관성: OFFSET 재질의가 직전 페이지 끝 1행을 겹쳐 받아 서버 결과가 바뀌면 오류로 멈춤(
grid.overlap_check). - IBM Db2: 서버 커서 · 다중 커서 섹션 풀 · 10.5 페이징 폴백.
- SQLite · SQL Server의 Execute/Fetch 단계 계측 분리 · 드라이버 관리자 갱신 알림 · 셸은
session.autocommit을 따름.
수정
- SQL 포맷이 SELECT 목록 안 주석을 잃던 문제 · 뒤에 별칭이 있는데 완성이 별칭을 또 붙이던 문제 · Db2 DDM 확장 길이.
v0.3.1 — 2026-10-27
수정
- 확장 드라이버에서 200행 뒤 자동 페치가 “처음부터 다시 받을까요?”를 묻거나 조용히 멈추던 문제 — ABI가 커서 핸들을 싣습니다. drivers-v0.1.7로 갱신하면 서버 커서로 이어 받고, 옛 드라이버는 확인 재질의로 동작합니다.
v0.3.0 — 2026-10-26
추가
- IBM Db2(LUW · 12.1 검증) 네이티브 DRDA 드라이버(IBM 클라이언트 불필요 · LOB ·
CALL결과 집합/OUT · 취소 · 암호화 로그인 · EXPLAIN 트리). - ClickHouse 드라이버(HTTP · 서버 측 매개변수) · MS Access(ODBC · 실험).
- 접속 프리셋: Redshift · CockroachDB · YugabyteDB · Greenplum · TimescaleDB(PostgreSQL 드라이버) · SAP HANA · Informix(ODBC).
- 변수: 입력 창의 타입 · 전달 미리보기 · 접속 프로필 변수(
nsql conn var) · hover 값 카드 ·DEFINE 이름 SHARE|LOCAL|GLOBAL. - 설정 내보내기/가져오기(
nsql config export/import).
변경
- 아웃라인 재설계: 선언 이름 위주 · 문장 토글 · 트리/접기 · 캐럿 추종.
- 운영 Commit/Run 2단 확인 통일 · Linux · macOS ODBC 확장이 드라이버 관리자를 포함.
개선
- 바인드 가시성(
bind N·declare-prepend·inline N) · Linux 서식 복사 · 시스템 테마 실시간 추종 · 기동과 큰 파일 줄 변경 표시 속도.
수정
- ODBC 자동 커밋 끔 상태의 커밋 멈춤 · Linux SQL Server ODBC 취소 충돌 · 트랜잭션 로그에 서버 문장만 표시.
v0.2.9 — 2026-10-23
추가
- 실행 계획 검토: 실행 계획 · 실제 실행 계획 ·
nsql explain [--analyze] [--raw]. - 드라이버 관리자 내장 열 · 올라간 드라이버 삭제 · 파일 대화상자 기본 확장자.
수정
- 설치된 Oracle Thin 확장을 쓰지 않고 OCI로 폴백해 Instant Client를 요구하던 v0.2.8의 문제.
nsql explain/import/export/cat이 드라이버 설정 · 자동 설치를 따르도록 수정. CLI 문구가ui.lang을 따릅니다.
v0.2.8 — 2026-10-23
변경
- 드라이버 분리 설치본: 설치본에는 Oracle OCI 드라이버만 넣고, 나머지는 첫 접속 때 서명된 패키지를 내려받아 설치합니다(
driver.auto_install· 오프라인 번들). 이 판부터 드라이버 다운로드와 하루 1회 갱신 확인을 위한 인터넷 통신이 생겼습니다.
추가
- MySQL · MariaDB · DuckDB 드라이버 · ODBC 전 OS · 접속 매개변수
?driver=. - 드라이버 관리자(보기 ▸ 드라이버) ·
nsql driver· 접속 폼의 Oracle Thin/OCI 선택 · 툴바 [변수].
참고 이 버전은 winget · Chocolatey에 올리지 않았습니다.
v0.2.7 — 2026-10-21
변경
- Linux 글자 기본값을 macOS와 같게(
ui.text_hint·ui.text_snap끔 ·ui.text_weight0 ·ui.text_contrast100). 직접 정한 값은 유지됩니다.
추가
- Oracle Thin 안내에 “다시 보지 않기”(
notice.oracle_thin) · 한정 이름(FROM 스키마.)에도 자동 별칭.
개선
- 조회 뒤 카드 표시 구간 CPU 2.4~3.0초 → 약 0.45초 · 표 약 570개 Oracle 스키마 미리 읽기 중 CPU 초당 29 → 21 ms.
수정
- OS별 기본값이 실제로 적용되지 않던 문제 · Linux UI 글꼴의 한자가 중국식 자형으로 그려지던 문제.
v0.2.6 — 2026-10-20
추가
- 구문 오류의 오타 의심 자리로 캐럿(
editor.error_analyze): 예DISTINC→DISTINCT?. 끝까지 검증한 것은 SQLite입니다. - 새 설정 분류 Ctrl 키(
ctrl.click·ctrl.right_click·ctrl.shift_click).
변경
- Ctrl+클릭 = 캐럿 추가/제거, Ctrl+우클릭 = 편집기 메뉴(종전 = 설명 복사 · 링크 메뉴). 설정으로 옛 동작을 고를 수 있고 옛 키 값은 자동으로 옮겨집니다.
v0.2.5 — 2026-10-20
추가
- 오류 위치로 캐럿 이동(
editor.error_goto) · 찾기 규칙 정리(editor.find_auto_scope· Esc 복귀).
개선
- 열 모드 Home/End가 캐럿마다 자기 줄 안에서 이동 · 스크립트 엔진 메시지가 화면 언어를 따름.
수정
- 객체 탐색기 “끊김” 헤더가 남던 문제.
v0.2.4 — 2026-10-17
수정
- macOS 화면 깜빡임 치명 결함: 창 서버가 보여 주는 표면에 다시 그려 빈 프레임이 나오던 문제. macOS 사용자는 업데이트하세요.
v0.2.3 — 2026-10-17
추가 (macOS)
- Finder · Dock ·
open -a로 파일 열기.
변경
- 기본 단축키: 실행 계획
Ctrl+Alt+X(macOS⌥⌘X) · macOS 객체 찾기⌥⌘O. 직접 바꾼 키는 유지됩니다.
수정
- macOS에서 한글 붙여넣기가
?로 바뀌던 문제 · Instant Client 19.x의SET SERVEROUTPUT ON출력 소실 · SQL Server 밖의PRINT '글'이 문법 오류로 나가던 문제.
v0.2.2 — 2026-10-16
추가
- 객체 찾기 창(
Ctrl+Alt+F): 연결된 모든 서버의 이름 · 설명 · 컬럼 · 소스 본문 검색 · 미리보기. - 운영 보류 커밋 · 객체 백업(
backups/objects/). - 내장 명령 자동 완성 · 탐색기 노드 끌어 놓기 · 모든 노드에 이름 복사 · 메모리 창 상세 스위치.
수정
- Windows
.sql·.nsql-project파일 연결 재등록 · AltGr 자판의Ctrl+Alt+F· 객체 찾기 입력란의 복사 · 붙여넣기.
v0.2.1 — 2026-10-15
추가
- 객체 탐색기 설명 포함 토글 · 검색 범위(
explorer.search_scope· 기본 전체 DBMS). SQL Server도 서버 전체를 찾습니다.
개선
- 모든 입력란이 한/영 상태를 함께 씁니다 · 서버 유형을 바꾸면 그리드 편집 가능 여부가 바로 반영됩니다.
수정
- 이름에 “db2”가 든 PostgreSQL 연결의 아이콘 · 필터 상자 툴팁 위치.
v0.2.0 — 2026-10-14
추가
- Oracle Thin 드라이버(기본 · 순수 Rust · Instant Client 불필요).
oracle.driver로 OCI와 전환. - Ctrl을 누른 동안 줄 끝 라벨 · 이진 파일 안내 탭 · 값 창의 NULL/빈 문자열/값 ·
Ctrl+;지금 넣기 · 열 머리 끌어 놓기 · 설정 창 “변경” 스위치. - Linux 네트워크 변경 · 폴더 변경 감시.
개선
- 명령 팔레트가 영어 이름 · 지역화 이름 · 명령 id로 찾기 ·
nsql cat의 SQL Server 3부 이름.
수정
- SQL Server 행 0 결과에 앞 결과가 남던 문제 · 프로젝트 없이 탭을 옮길 때 파일 목록 지연.
v0.1.9 — 2026-10-10
추가
- 객체 탐색기 우클릭 메뉴에 아이콘 표시(
ui.menu_icons). - 이름 복사 + Shift = 전체 이름 복사(
스키마.객체·스키마.패키지.멤버· SQL ServerDB.스키마.객체, 인용은editor.quote_idents). - 패키지 멤버 ▸ Generate SQL ▸ Call = 그 오버로드의 이름 지정 바인드 호출문. 패키지 전체 Call은 오버로드마다 블록을 만듭니다.
변경
&이름치환의 DBMS별 기본값(새 설정script.define= auto · on · off): Oracle은 SQL*Plus처럼 정의 안 된 이름을 묻고, SQL Server · PostgreSQL · SQLite · MySQL 방언은DEFINE·:setvar로 정의한 이름만 바꿔'R&D'에 입력 창이 뜨지 않습니다. CLI도 같은 규칙을 따릅니다.- 패키지 메타데이터 · 설치/제거 안내 · 동봉 고지의 기본 글을 영어로 바꿨습니다(한국어는 지역화로 덧붙임).
개선 (macOS)
- 네트워크 변경 감지: VPN 연결/해제 · Wi-Fi 변경을 알아채고 다음 동작 전에 서버 응답을 먼저 확인합니다(종전 Windows만).
- 폴더 변경 감시: 앱 밖에서 만들거나 바꾸거나 지운 파일이 프로젝트 탐색기 · Goto Anything 색인에 바로 반영됩니다.
- 창이 잠시 쉬면 그리기 표면을 줄여 유휴 메모리를 약 40 MB 줄였습니다.
수정
- 수십만 행 결과의 스크롤바를 끌 때 위치 계산이 넘쳐 앱이 끝나거나 엉뚱한 위치로 가던 문제.
- Oracle 패키지 오버로드가 두 멤버의 인자를 합쳐 보여 주던 문제 — 멤버마다
#1·#2와 자기 인자만 표시. - PostgreSQL 함수의 Arguments 폴더가 늘 비어 있던 문제 — 이름 없는 인자도
$1·$2로 표시. - 한글 조합 첫 자음이 선택 영역을 지운 뒤 되돌리기로 복구되지 않던 문제.
v0.1.8 — 2026-10-09
수정
- 탭 전용(
CONNECT) 세션이 네트워크 복구 뒤 자동으로 다시 접속하지 않아 매번DPI-1010: not connected가 나던 문제. 재접속 대상은 비밀번호 없이 기억하고, 비밀번호는 메모리 안 암호화 보관소에서 꺼내 씁니다. - 재접속할 정보가 없을 때 복구된 것처럼 보이던 표시를 “끊김”으로 바로잡았습니다.
v0.1.7 — 2026-10-09
추가
- 점진 결과 표시(기본): 행 상한 0이면 첫 묶음이 바로 보이고 나머지는 도착하는 대로 이어 붙습니다. 중지 · 진행 · 메모리 예산이 묶음 단위로 적용됩니다(설정 그룹 Result Fetch).
- 자연 정렬(
ui.sort_natural): 결과 그리드 · 탐색기 · 북마크 등에서ITEM2 < ITEM10. - CREATE 문 ↔ 서버 객체 비교: 나란히 보기 diff 뷰어(추가 · 삭제 · 변경 줄 배경, 동기 스크롤, 다음/이전 변경).
- 데이터 타입 완성:
CAST(x AS,DECLARE @x, PL/SQL 선언, 컬럼 정의 등에서 방언별 내장 타입과 서버의 사용자 정의 타입. 현재 스키마의 함수 · 패키지를 접두 없이 제안,COLLATE이름, 이름 지정 인자.
개선
- 서버 상태 전파: 네트워크가 끊기면 같은 서버의 세션 · 탐색기를 모두 끊김으로 표시하고, 서버가 응답하면 자동 복구(Windows).
- 서버가 취소에 응하지 않으면 ■를 한 번 더 눌러 강제 중지.
- 클릭은 버튼을 놓을 때 동작, 편집기 · 결과 영역 최소 높이 설정, 우클릭 메뉴 배타 설정.
수정
- 행 상한 0으로 중지한 뒤 같은 질의를 다시 돌리면 200행만 오던 문제.
- 32 KB가 넘는 CLOB 편집이 Oracle · PostgreSQL · SQL Server에서 올바로 커밋되지 않던 문제.
- SQL Server
ALTER TABLE의 데이터 타입 팝업이 “불러오는 중”에 머물던 문제.
v0.1.6 — 2026-10-08
추가
- Goto Anything(
Ctrl+P): 파일 퍼지 검색 ·이름:줄·>명령 ·:줄 ·@심볼 ·%본문 ·?도움말. 큰 폴더 열거 45초 → 0.3초, 제외 폴더project.exclude. - 조건 바: 그리드 아래에 조건을 쓰고 Enter로 재조회, 열 머리 끌어 놓기, 셀 우클릭 ▸ 조건.
- 엑셀식 값 필터(모두 선택 · 검색 · 다중 선택) · 필터 칩 · OR 모드 · 서버 재조회. 열 머리 타입 배지와 데이터 타입 카드.
- 글꼴 크기
Ctrl+=/Ctrl+-/Ctrl+휠, 메뉴의 단축키 표시, 탭 이동 기록(MRU). - 객체 링크 카드의 동작 버튼, FK 기반 JOIN 조건 스니펫, 시그니처 카드, SQL Server 3부 이름.
- 변수:
VAR x DROP [GLOBAL]·VAR CLEAR [GLOBAL|ALL]· 선언과 층을 한 줄로 ·SHOW VARIABLES의 Active 열. CLI 글로벌 변수는 선택(vars.cli_global). - 외부에서 파일이 바뀌면 토스트(받아들이기 · 다시 읽기 · 3-way 병합).
개선
- 메모리 창: 그룹 소계 · 증감 표시 · 힙 정리. 창이 열려 있을 때 유휴 CPU를 크게 줄였습니다.
수정
- SQL Server 대량 적재: 3부 표 이름 · Decimal 자릿수 불일치로 중단되던 문제.
- Oracle
SELECT INTO자동 타입 변수, 모르는 확장자 파일을 일반 텍스트로 열기.
v0.1.5 — 2026-10-05
추가
- 배포 채널 확대: Linux APT/RPM 저장소(pkg.sosomlab.com) 개시, Chocolatey · winget 제출 시작.
- 객체 동작을
Shift+F10과 명령 팔레트에서 실행, 시그니처 카드, 참조 행 보기, 결과 필터 값 고르기 · 재조회 · OR.
개선
- 릴리스 노트를 영어 · 한국어로 함께 제공.
v0.1.4 — 2026-10-04
추가
- DBMS 아이콘 173종(밝은/어두운 테마)을 객체 탐색기 서버 머리글과 연결 행에 표시.
- 상태바 항목 편집(순서 · 표시), 툴바 · 상태바 우클릭 메뉴와 툴바 설정.
- 화면 언어 “시스템”(기본값): OS 표시 언어를 따름.
개선
- SQL 포맷터:
EXEC문,${이름:형식},N'…'/q'[…]',::캐스트, PL/SQL 블록 뒤 문장. 확장 SQL Formatter for kiros33 1.3.3.
수정
${이름:형식}실행 시 입력 창이 잘못 뜨던 문제,EXEC블록 안 특정 줄에서 실행이 끊기던 문제, macOS Retina에서 툴바 표시가 작던 문제.
v0.1.3 — 2026-10-02
추가
- Output 탭(서버 메시지 · 컴파일 결과 · 오류 · 완료 줄)과 객체 소스 탭의
F5= 한 단위 실행. - 객체 삭제(DDL 백업 후 삭제 · 운영 서버는 백업 실패 시 삭제 안 함), 서버 유형(NON · DEV · TST · PRD).
- SQL Server SSMS식 탐색기(데이터베이스 층 · 연결된 서버 · 서버 보안 · DB 용량), 툴바 작업 단위(DB/스키마) 전환, 3부 이름 완성.
- Ctrl 링크 ▸ 객체 탐색기에서 보기, 시스템 객체 링크.
변경
- 시간 설정을 ms 단위 규칙으로 정리(옛 키는 자동 이전).
v0.1.2 — 2026-09-30
추가
- SQL 포맷터(
Shift+Alt+F· 내장 Basic · 미리보기 탭). - Ctrl 객체 링크와 코멘트 툴팁, 그리드 필터와 필터 질의, 고속 스크롤, 객체 용량 표시, 확장 관리.
참고 v0.1.1은 GitHub 릴리스 초안으로만 남아 공개되지 않았습니다. Homebrew는 0.1.0에서 0.1.2로 바로 올라갔습니다.
v0.1.1 — 2026-09-28
변경
- 기본 화면 언어 = OS 표시 언어(지원하지 않으면 영어).
- 라이선스 없이도 모든 기능이 동작하도록 기능 제한 기본 끔.
개선
- 객체 탐색기에서 SQLite 파일 하나를 서버 하나로 표시, 자동 저장 방식 개선, 패널 타입어헤드 한글 지원.
v0.1.0 — 2026-09-28
추가
- 첫 공개 릴리스. Windows
.msi· macOS.pkg/.dmg(Universal) · Linux.deb/.rpm설치본과 Homebrew Cask 채널. - Oracle · SQL Server · PostgreSQL · SQLite 접속, SQL*Plus식 세션 변수 엔진, 결과 그리드, 객체 탐색기, CLI
nsql.
알려진 제한
- SQL Server는 서버 인증서를 검증하지 않습니다(신뢰 처리). Windows 통합 인증 · Kerberos 지원 여부는 확인되지 않았습니다.
- PostgreSQL 기본 TLS 모드
preferred는 평문으로 떨어질 수 있고, 클라이언트 인증서(sslcert·sslkey)는 지원하지 않습니다. - Oracle Thin의 제한 — 실행 중 취소(■는 다음 배치 경계에서 멈춤 · 두 번째 ■ = 강제 중지) · 암묵 결과 집합 · OS 인증 · 네이티브 네트워크 암호화 · 12c 미만 서버 · 배열 DML 적재가 안 됩니다. 필요하면 OCI를 쓰세요(Instant Client 필요).
- 드라이버는 처음 쓸 때 인터넷으로 받습니다. 폐쇄망에서는 오프라인 번들을 미리 설치해야 합니다.
- SSH 터널은 키 인증만 됩니다. 시스템
ssh가 필요합니다. - ClickHouse는 트랜잭션과 그리드 편집이 없습니다. ODBC는 REF CURSOR를 지원하지 않고, MS Access는 실험 단계입니다.
- 코드 서명이 없습니다 — Windows SmartScreen · macOS Gatekeeper 경고가 뜹니다.
- macOS · Linux의 기기 키는 0600 평문 파일입니다(Keychain · Secret Service 연동은 계획 단계). 설정 폴더를 통째로 복사하면 저장된 비밀번호도 함께 풀릴 수 있습니다.
- Windows는 x64만, Linux는 x86_64만 제공합니다. 포터블 판은 없습니다.
- winget은 아직 등록 전입니다(첫 제출 PR 검토 대기). Chocolatey는 일부 버전만 올라갑니다(0.2.8 · 0.2.9는 건너뜀).
- 네트워크 변경 감지와 폴더 변경 감시는 Windows · macOS · Linux에서 동작합니다.
라이선스
Nexa SQL은 PolyForm Noncommercial 1.0.0 라이선스입니다(비공식 한글본 — 영문본이 우선).
- 개인 · 비상업 용도는 무료입니다. 비영리 단체 · 교육 · 공공 연구 · 정부 기관의 사용도 허용됩니다.
- 상업적 사용은 별도 유료 라이선스가 필요합니다. 문의: [email protected]
- 무료판은 상태줄에
Free · non-commercial use only가 보입니다. 현재는 라이선스가 없어도 모든 기능이 동작합니다(기능 제한 설정license.gates기본 끔). 앞으로 일부 편의 기능이 Pro로 제한될 수 있습니다.
라이선스 파일 받기
라이선스는 서명된 오프라인 파일이며 서버에 접속하지 않습니다.
- 앱 도움말 ▸ License…(또는 상태줄 배지)에서 이름 · 이메일을 넣고 요청 코드 복사. 명령줄은
nsql license request "이름" 이메일. 요청 코드에는 이 PC 기기 ID의 해시만 담깁니다. - 요청 코드 한 줄을 [email protected] 으로 보내면
nexa-sql.license파일을 받습니다. - 라이선스 창 ▸ 라이선스 파일 열기… 또는
nsql license install <파일>로 설치하고nsql license status로licensed를 확인합니다.
개인 라이선스는 등록한 PC(최대 5대)에서 유효하고, 기본 유효기간은 발급일부터 3년입니다. 백업은 nsql license export <파일>, 제거는 nsql license remove입니다.