Query는 웹 UI에 질의를 등록해 두면, 로그인된 브라우저의 확장(Extension)이 Perplexity·Claude·Gemini·ChatGPT에 대신 질의하고 답변을 서버로 모아 주는 도구입니다. API 키를 발급받지 않아도 되고, 질의와 답변은 모두 내 컴퓨터의 데이터베이스에 기록되므로 이전에 물어본 내용을 검색하거나 다시 꺼내 볼 수 있습니다.
#저장소 정보
#개발 배경 (Why Query?)
- “같은 질문을 Perplexity에도 붙여 넣고, Claude에도 붙여 넣고, ChatGPT에도 붙여 넣고 있다.”
- “어제 AI에게 물어봤던 질문과 답변이 탭 속 어딘가에 사라졌다.”
- “API로 자동화하려면 키 발급부터 과금 설정까지 준비할 게 많다. 로그인해서 쓰는 웹 버전으로는 안 될까?”
AI 서비스마다 장점이 달라서 하나의 질문을 여러 곳에 물어보고 답변을 비교하는 일이 잦은데, 복사해 넣고 결과를 기다리는 과정은 매번 반복됩니다. 이 과정을 자동화하려면 보통 각 서비스의 API를 활용하게 되는데, 키 관리와 과금 부담이 따르고 질의 기록도 서비스별로 흩어집니다.
Query는 브라우저에 이미 있는 로그인 세션을 그대로 사용합니다. 질의는 서버의 대기열에 쌓이고, 확장(Extension)이 이를 가져가 로그인된 탭에 입력하고, 완성된 답변을 회수해 다시 서버에 보냅니다.
#동작 화면

왼쪽에서 질의를 고르면 오른쪽에 provider별 답변이 탭으로 나뉘어 표시됩니다. 캡처는 Perplexity의 답변이 완료된 상태로, 본문과 함께 출처 15건이 정리되어 있습니다. 상단 배지에는 확장(Extension) 연결 상태와 대기열·답변 수가 표시되어, 지금 자동 질의가 가능한 상태인지 한눈에 알 수 있습니다.
#주요 기능
- 한 번의 질의, 여러 provider: 질의할 때 provider를 선택하면 각 사이트에 순서대로 질의하고, 답변은 탭으로 나뉘어 나란히 비교할 수 있습니다.
- 브라우저가 대신 질의합니다: 확장(Extension)은 로그인된 세션으로 동작하므로 API 키가 필요 없습니다. 별도의 과금 설정 없이 기존에 쓰던 계정 그대로 자동화할 수 있습니다.
- 카테고리별 답변 지침: 질의마다 카테고리를 붙일 수 있고, 카테고리마다 답변 작성 지침(시스템 프롬프트)을 따로 관리합니다. 같은 질문이라도 조사·분석용으로 물어보거나 요약용으로 물어보도록 조정할 수 있습니다.
- 벌크 입력: 질의 여러 건을 한 번에 등록해 두면 확장(Extension)이 순서대로 처리합니다. 대기열 상태는 화면에서 실시간으로 갱신됩니다(SSE).
- 여러 대의 컴퓨터에서 분산 질의: 확장(Extension)을 설치한 기기가 여러 대면 서버가 작업을 골고루 분배합니다(round-robin). 한 기기가 응답을 멈추면 임대(lease)가 만료되어 다른 기기가 작업을 이어받습니다.
- MCP 서버 내장: Claude 같은 AI 에이전트에서 MCP 도구로 질의를 보낼 수도 있습니다. 에이전트가 필요로 하는 답변을 기다렸다가 바로 돌려줍니다.
- 질의 기록의 축적: 질의와 답변은 내 컴퓨터의 데이터베이스와 마크다운 파일로 남습니다. 목록 검색, 상태별 필터, 파일 내려받기를 지원합니다.
#보안 및 신뢰성
- OWASP ASVS 5.0을 기준으로 설계했습니다: API 토큰 인증(상수 시간 비교), 인증 실패 횟수 제한, IP별 요청 한도, 엄격한 CSP, 마크다운 렌더링 시 DOMPurify 처리 등이 적용되어 있습니다.
- 외부 노출 시 인증이 강제됩니다: 서버는 기본적으로 내부 주소(127.0.0.1)에만 바인딩되며, 외부에서 접근 가능한 주소로 열려면 API 토큰 설정이 없으면 기동 자체를 거부합니다.
- 데이터는 내 컴퓨터에만 남습니다: 질의·답변·답변 지침은 모두 로컬 데이터베이스와 파일로 저장됩니다. 확장(Extension)은 질의 텍스트를 provider에 전달할 때만 외부 통신을 합니다.
- 본 프로젝트는 개인적 사용을 전제로 합니다: 확장(Extension)은 제가 쓰는 계정의 로그인 세션으로 동작하므로, 계정을 공유하거나 대량 질의를 보내는 용도로는 적합하지 않습니다.
#기술 스택 및 실행
서버는 TypeScript와 Fastify, 내장 SQLite로, 웹 UI는 Svelte로, 확장(Extension)은 Chrome Manifest V3로 작성되어 있습니다. 의존성 설치부터 빌드, 환경 설정(.env), 확장(Extension) 로딩까지는 저장소의 스크립트 한 번으로 처리되며, 자세한 설치 방법과 설정 항목은 GitHub 저장소의 README를 참고해 주세요.
#주의 사항
- 확장(Extension)은 각 provider 웹 페이지의 화면 구조에 의존합니다. 서비스 쪽 UI가 바뀌면 해당 provider의 질의가 실패할 수 있으며, 이 경우 확장(Extension)을 최신 버전으로 갱신해야 합니다.
- 답변은 AI가 생성한 것이므로 사실 관계를 반드시 확인해야 합니다. 출처 목록은 제공되지만, 출처 자체를 검증해 주지는 않습니다.
- 로그인 세션을 이용한 자동화가 각 서비스의 이용약관과 계정 정책에 부합하는지는 사용자가 판단해야 합니다. 본 프로젝트는 정책 준수를 보장하지 않으며, 개인적 사용 범위를 벗어난 활용을 권장하지 않습니다.