Probe
.probe 파일 하나에 SQL과 HTTP 요청을 마크다운 코드 블럭으로 적어두고, 블럭 단위로 실행하는 VS Code 확장입니다. 스크래치패드처럼 쿼리·요청을 모아두고 버튼 한 번으로 돌립니다.
## 사용자 수
```sql
SELECT COUNT(*) FROM users;
```
## 헬스 체크
```rest
GET https://httpbin.org/get
```
각 코드 블럭 위에 ▶ Run Query / ▶ Send Request 버튼(CodeLens)이 뜨고, 커서를 블럭 안에 두고 Cmd+Enter로도 실행됩니다.
기능
.probe 언어: .probe 확장자를 전용 언어로 인식
- 블럭 실행: 마크다운 펜스로 감싼 블럭만 실행
```sql → 로컬 mysql CLI로 실행, 결과를 "Probe SQL" 출력 창에 표시
```rest → REST Client 확장의 Send Request 로 전송
- 실행 방법 3가지
- 블럭 위 CodeLens 버튼 클릭
- 커서를 블럭 안에 두고
Cmd+Enter
- 우클릭 → Probe: Run Query
- 안전장치: 닫는 펜스(
```)가 없는 미완성 블럭은 실행 대상에서 제외
요구 사항
| 대상 |
필요한 것 |
```sql 블럭 |
mysql CLI (PATH에 없으면 probe.mysql.path로 전체 경로 지정) |
```rest 블럭 |
VS Code 확장 humao.rest-client |
설정
Cmd+, → probe.mysql 검색, 또는 설정 JSON에 직접 입력합니다.
| 설정 | 기본값 | 설명 |
|------|--------|------|
| probe.mysql.path | mysql | mysql 실행 파일 경로 |
| probe.mysql.host | localhost | 호스트 (-h) |
| probe.mysql.user | root | 사용자 (-u) |
| probe.mysql.password | (빈 값) | 비밀번호 (`-p`). 비우면 `-p` 미첨부 | | `probe.mysql.database` | (빈 값) | 사용할 데이터베이스 |
보안: DB 접속 정보(특히 비밀번호)는 저장소에 커밋되는 워크스페이스 설정(.vscode/settings.json)이 아니라, 사용자 설정(User Settings) 에 넣는 것을 권장합니다. Cmd+Shift+P → Preferences: Open User Settings (JSON):
{
"probe.mysql.host": "localhost",
"probe.mysql.user": "여러분_사용자",
"probe.mysql.password": "여러분_비밀번호",
"probe.mysql.database": "여러분_DB"
}
사용법
- 아무
.probe 파일을 만든다 (예: queries.probe).
- 마크다운처럼 설명과 코드 블럭을 적는다.
- 실행할
```sql / ```rest 블럭 위 버튼을 누르거나, 블럭 안에서 Cmd+Enter.
sample.probe에 예시가 들어 있습니다.
개발
npm install # 의존성 설치
npm run compile # TypeScript(→ out/) 컴파일
npm run watch # 변경 감지 컴파일
npm test # 단위 테스트 (bun)
VS Code에서 이 폴더를 열고 F5 → 확장이 로드된 새 창(Extension Development Host)이 뜹니다. 소스를 고치면 새 창에서 Cmd+R로 리로드합니다.
- 언어: TypeScript 7 (
tsc로 빌드/타입체크)
- 포매팅: Prettier (세미콜론 없음, 작은따옴표, 저장 시 자동 적용)
- 테스트: bun (
bun test)
구조
src/
├── extension.ts # 러너 등록 + 명령/CodeLens (dispatch)
├── core/
│ ├── blocks.ts # 마크다운 코드 블럭 파싱 (순수 로직)
│ └── registry.ts # Runner 타입 + register/getRunner
└── runners/
├── mysql/ # ```sql 실행
└── rest/ # ```rest 실행
새 러너 추가하기
src/runners/<name>/index.ts 에서 Runner를 export
export const fooRunner: Runner = {
lang: 'foo',
label: '▶ Run',
run: (editor, range) => { /* ... */ },
}
src/extension.ts 에 두 줄 추가
import { fooRunner } from './runners/foo'
register(fooRunner)
test/runners/<name>.test.ts 로 테스트 추가
러너가 커지면 그 폴더 안에서 client.ts, config.ts 등으로 나누면 됩니다.
라이선스
MIT