개인정보처리방침
Nexa SQL(이하 “소프트웨어”)는 SosomLab(이하 “회사”)가 배포하는 Windows·macOS·Linux용 데이터베이스 SQL 클라이언트(GUI와 명령줄 도구 nsql)입니다. 이 개인정보처리방침은 소프트웨어가 어떤 데이터를 다루고, 어디에 저장하며, 네트워크로 무엇이 나가는지, 그리고 회사가 개인정보를 받는 유일한 경우인 라이선스 발급 요청을 어떻게 처리하는지를 설명합니다.
1. 요약
- 소프트웨어에는 분석·텔레메트리·광고·추적·크래시 보고 기능이 일절 없습니다. 계정 가입도 없고, 자동 업데이트 확인도 하지 않습니다.
- 소프트웨어가 접속하는 곳은 이용자가 직접 지정한 데이터베이스 서버뿐입니다. 질의문·결과 데이터·스키마 정보는 이용자의 PC와 그 DB 서버 사이에서만 오가며, 회사는 이를 받지도 볼 수도 없습니다.
- 유일한 예외는 확장 관리자입니다. 기본값은 꺼짐이며, 이용자가 켠 뒤 확장 패널을 열거나 새로 고침·설치를 실행할 때만 확장 저장소에서 목록과 파일을 내려받습니다(제4항).
- 저장한 연결 비밀번호는 이용자 기기에 ChaCha20-Poly1305로 암호화되어 저장됩니다(제3항).
- 라이선스는 오프라인 파일로 확인하며 서버와 통신하지 않습니다. 라이선스 발급을 원하는 이용자가 직접 이메일로 요청 코드를 보낼 때에만 회사가 이름·이메일 등을 받습니다(제5항).
2. 기기에 저장되는 데이터
소프트웨어는 사용자 설정 폴더에 파일을 만듭니다. Windows는 %APPDATA%\nexa-sql, macOS는 ~/Library/Application Support/nexa-sql, Linux는 ~/.config/nexa-sql이며, 환경 변수 NSQL_HOME을 지정하면 그 폴더를 씁니다. GUI와 CLI(nsql)는 같은 폴더를 공유합니다.
| 항목 | 내용 | 저장 방식 |
|---|---|---|
| 설정 | 화면·편집기·그리드·실행·로그 등 옵션(settings.conf) | 평문 |
| 연결 프로필 | 프로필 이름·DBMS 종류·호스트·포트·데이터베이스·사용자명·역할(profiles/) | 평문 (비밀번호 제외) |
| 연결 비밀번호 | 이용자가 “저장”을 선택한 경우에만 | 암호화 (ChaCha20-Poly1305 · 제3항) |
| 기기 키 | 비밀번호 암호화에 쓰는 32바이트 무작위 키(device.key) | Windows: DPAPI로 보호 · macOS/Linux: 소유자만 읽는 파일(0600) |
| 접속 시도 목록 | 한 번 이상 접속을 시도한 프로필 이름(connected.list) — 접속 창에서 서버 상태를 보여 주는 데 사용 | 평문 |
| 객체 이름 캐시 | 접속한 DB의 스키마·객체 종류·객체 이름(meta/) — 다음 실행 때 검색·완성을 빠르게 하기 위함. 파일 이름은 해시이며 비밀번호는 담기지 않음 | 평문 |
| 작업 환경·편집 기록 | 열린 탭·프로젝트 상태(workspaces/), 파일별 실행 취소 기록(undo/), 미저장 탭 본문 스냅숏(backups/files/ · 기본 7일 후 정리), 보존 변수(vars/) | 평문 |
| 객체 삭제 전 DDL 백업 | 탐색기에서 객체를 삭제할 때 미리 만든 DDL(backups/drop/ · 설정 explorer.drop_backup, 기본 켜짐) | 평문 |
| 라이선스 파일 | 설치한 경우에만(license/) — 라이선스 ID·이용자 이름/이메일·기기 ID 해시·등급·기한 | 평문 (Ed25519 서명) |
| 로그 파일 | 이용자가 설정 log.file에 경로를 지정한 경우에만(기본 비어 있음 = 파일로 남기지 않음) | 평문 |
폴더 모드(nexa-sql <폴더>)로 실행하면 북마크 등 일부 작업 상태는 그 폴더의 .nsql/ 아래에 저장됩니다.
실행 로그와 트랜잭션 로그(보낸 문장·바인드 값·소요 시간·행 수)는 실행 중 메모리에만 보관되며, 이용자가 로그 파일을 지정하거나 직접 복사·내보내기 하지 않는 한 디스크에 기록되지 않습니다. 로그·설정·트랜잭션 로그에는 비밀번호를 남기지 않도록 설계되어 있습니다.
이 파일들은 기기 밖으로 나가지 않습니다. 이용자는 각 파일을 직접 삭제할 수 있으며, 설정 폴더 전체를 삭제하면 모든 데이터가 영구히 제거됩니다. 소프트웨어를 제거해도 설정 폴더는 자동으로 삭제되지 않을 수 있습니다.
2-1. 질의 결과와 이용자 데이터
소프트웨어는 이용자가 실행한 질의의 결과를 화면에 표시하기 위해 메모리에 둡니다. 결과를 파일로 내보내기(CSV·JSON 등)하거나 클립보드로 복사하는 것은 이용자가 직접 실행할 때만 이뤄지며, 그 파일의 관리는 이용자의 책임입니다. DB 서버에 들어 있는 데이터와 질의 결과는 회사로 전송되지 않습니다.
3. 연결 비밀번호의 보호
- 연결 프로필에 비밀번호를 저장하면 비밀번호만 ChaCha20-Poly1305로 봉인해 프로필 파일에 기록합니다. 봉인에는 프로필 이름이 함께 묶이므로 한 프로필의 암호문을 다른 프로필로 옮겨도 열리지 않습니다.
- 봉인 키는
device.key에서 나옵니다. Windows에서는 이 키를 DPAPI(CryptProtectData· 현재 Windows 계정 범위)로 보호하므로 같은 Windows 계정에서만 풀 수 있고, 폴더를 다른 PC나 다른 계정으로 복사하면 열리지 않습니다. macOS·Linux에서는 키를 소유자만 읽을 수 있는 파일(권한 0600)로 둡니다. 운영체제 키체인과는 연동하지 않습니다. - 따라서 macOS·Linux에서는 설정 폴더 전체가 유출되면 같은 폴더의
device.key로 저장된 비밀번호를 열 수 있습니다. 이 방식은 프로필 파일만 따로 유출되는 경우를 막는 것이지, 이용자 계정이나 기기 자체에 접근한 공격자를 막지 못합니다. - 저장하지 않은 비밀번호는 재접속을 위해 실행 중 메모리 안에서만 무작위 키로 암호화해 보관하며, 디스크에 기록하지 않습니다.
4. 네트워크 통신
4-1. 이용자가 지정한 데이터베이스 서버
소프트웨어는 이용자가 연결 프로필이나 명령줄에 지정한 DB 서버(Oracle · SQL Server · PostgreSQL)에 접속해 인증 정보와 질의문을 보내고 결과를 받습니다. SQLite는 로컬 파일이므로 네트워크를 쓰지 않습니다. 또한 접속 창이 열려 있는 동안 한 번 이상 접속을 시도한 프로필의 호스트·포트에 대해 서버가 살아 있는지 TCP 연결만 시도합니다(로그인 없음). 이 통신의 상대는 모두 이용자가 지정한 서버이며, 회사는 어느 경로로도 그 내용을 받지 않습니다.
전송 구간의 암호화는 DBMS와 서버 설정에 따릅니다. SQL Server는 TLS(설정 mssql.encrypt로 전 구간 또는 로그인만), Oracle은 이용자가 설치한 Oracle Instant Client와 그 네트워크 설정을 따릅니다. 현재 판의 PostgreSQL 연결은 TLS를 지원하지 않아 평문으로 전송됩니다. 신뢰할 수 없는 네트워크에서는 VPN·SSH 터널 등을 이용하시기 바랍니다.
4-2. 확장 관리자 (선택 기능 · 기본 꺼짐)
확장 관리자는 설정 extensions.enabled가 꺼져 있는 것이 기본값이며, 꺼져 있는 동안에는 어떤 확장 저장소에도 접속하지 않습니다. 이용자가 켠 경우에도 확장 패널을 열거나 새로 고침·설치를 실행할 때만 운영체제의 curl로 다음을 내려받습니다. 자동·주기 조회는 없습니다.
- 공식 확장 저장소:
https://raw.githubusercontent.com/SosomLab/nexa-sql/main/extensions(GitHub가 호스팅) - 확장 파일이 따로 주소를 지정한 경우 그 주소(예: GitHub Releases 자산)
- 이용자가 직접 추가한 저장소(
extensions.repositories)
이 요청은 목록(index.json)과 확장 파일을 읽는 GET 요청뿐이며 이용자 데이터를 보내지 않습니다. 다만 일반적인 웹 요청과 마찬가지로 저장소를 호스팅하는 측(GitHub 등)은 이용자의 IP 주소와 요청 시각을 알 수 있으며, 이는 해당 호스팅 사업자의 정책을 따릅니다. 내려받은 파일은 SHA-256으로 검증한 뒤 설치되고, 코드 확장은 샌드박스(WASM)에서 실행됩니다.
4-3. 그 밖의 통신
위의 경우 외에 소프트웨어는 인터넷으로 통신하지 않습니다. 라이선스 확인·업데이트 확인·사용 통계 전송은 없습니다.
5. 라이선스 발급 요청 시 처리하는 개인정보
소프트웨어는 라이선스 없이도 개인·비상업 용도로 모든 기능을 쓸 수 있습니다(라이선스 기능 제한 설정 license.gates는 기본 꺼짐). 라이선스 파일을 발급받으려는 이용자만 아래 절차를 거치며, 이 경우가 회사가 개인정보를 받는 유일한 경우입니다.
5-1. 처리 방식
이용자는 소프트웨어(도움말 ▸ 라이선스) 또는 nsql license request로 요청 코드를 만들어, 이를 이용자가 직접 이메일로 [email protected]에 보냅니다. 소프트웨어가 자동으로 전송하는 것은 없습니다.
5-2. 처리 항목
| 항목 | 내용 |
|---|---|
| 이름·이메일 주소 | 이용자가 요청 코드에 입력한 값, 그리고 이메일을 보낸 주소 |
| 기기 ID 해시 | 운영체제의 기기 식별자(Windows MachineGuid · macOS IOPlatformUUID · Linux machine-id)를 도메인 태그와 함께 SHA-256으로 해시한 20바이트 값. 원래 식별자는 요청 코드에 담기지 않으며 해시로부터 역산할 수 없습니다 |
| 요청 메타데이터 | 앱 버전, 운영체제 종류, 요청 일자 |
| 이메일에 적은 내용 | 이용자가 이메일 본문에 덧붙인 내용(소속·용도 등) |
| 유료(상업) 라이선스 | 계약·대금 처리에 필요한 정보(구매자·조직명·주문 정보 등) — 해당 거래에서 별도로 안내합니다 |
5-3. 처리 목적
- 이용자의 PC에 묶인 라이선스 파일의 발급·재발급(기기 추가·교체·갱신)
- 발급 내역 관리(라이선스 ID·기기 ID 해시·이용자·발급일을 기록한 발급 대장)와 분실 시 재발급 확인
- 라이선스와 관련한 문의 응대
이 정보를 광고·마케팅에 쓰거나 제3자에게 판매·제공하지 않습니다. 다만 법령에 따라 요구되는 경우는 예외로 합니다.
5-4. 보유 기간
라이선스의 발급·관리에 필요한 기간(라이선스 유효기간과 재발급 대응 기간) 동안 보유하며, 이용자가 삭제를 요청하면 지체 없이 삭제합니다. 다만 관계 법령이 일정 기간 보존을 요구하는 정보(예: 유료 거래의 계약·대금 기록)는 그 기간 동안 보관합니다. 삭제 후에는 그 라이선스의 재발급 확인이 어려울 수 있습니다.
5-5. 처리 위탁과 국외 이전
회사는 라이선스 요청을 이메일로 받으므로, 이메일 내용은 회사가 사용하는 이메일 서비스 제공자의 서버에 저장됩니다. 그 외에 처리를 위탁하거나 제3자에게 제공하지 않습니다.
6. 제3자 구성요소
소프트웨어는 제3자 분석·광고·크래시 보고 서비스를 사용하지 않습니다. Oracle 접속에는 이용자가 따로 설치한 Oracle Instant Client를 사용하며, 이 구성요소의 동작과 데이터 처리는 Oracle의 정책을 따릅니다. 확장 관리자가 사용하는 curl은 운영체제에 포함된 도구이며, 이용자가 설치한 제3자 확장은 각 제작자의 책임입니다.
7. 아동에 관한 사항
소프트웨어는 데이터베이스 전문가용 도구로서 아동을 대상으로 하지 않습니다. 회사는 아동의 개인정보를 알면서 수집하지 않습니다.
8. 이용자의 권리
- 제2항~제4항의 데이터는 모두 이용자 기기 안에 있으며 이용자가 직접 통제하고 삭제할 수 있습니다. 회사는 이에 접근하지 않습니다.
- 라이선스 발급을 위해 회사에 보낸 정보(제5항)에 대해서는 열람·정정·삭제·처리 정지를 요청할 수 있습니다. 아래 연락처로 요청하시면 본인 확인 후 지체 없이 처리합니다.
9. 문의처
- 이메일: [email protected]
10. 방침의 변경
이 개인정보처리방침이 변경되는 경우 개정된 내용과 시행일을 이 페이지에 게시합니다. 중요한 변경 — 특히 소프트웨어가 새로운 네트워크 통신을 시작하거나 회사가 처리하는 개인정보의 범위가 넓어지는 경우 — 은 시행일로부터 최소 7일 전에 공지합니다.