기능 측정 자료 메모리 다운로드 사용법 개발자 고객센터 로그인 시작하기
DEVELOPERS

개발자 문서

FastFind 위에 무언가를 만드는 분들을 위한 글입니다. 그냥 쓰는 법은 사용법 개발자 에 있습니다.

시작하기

FastFind 로 무엇을 만들 수 있나요?

FastFind 는 켜져 있는 동안 내 PC 안에 작은 검색 서버를 함께 띄웁니다. 그래서 다른 프로그램이 검색 결과를 받아 갈 수 있습니다.

  • 파워셸·파이썬 스크립트에서 파일 목록 받아오기
  • 자기가 만든 런처·도구에 검색 붙이기
  • 결과 우클릭 메뉴에 내 기능 끼워 넣기 (플러그인)

색인은 내 PC 안에만 있고 밖으로 나가지 않습니다. 서버도 127.0.0.1 에만 답합니다.

서버는 어디에 떠 있나요?

기본 9090 번입니다. 설정에서 바꾸실 수 있습니다.

http://127.0.0.1:9090

프로그램이 꺼져 있으면 서버도 없습니다. 먼저 떠 있는지 /api/status 로 확인하고 쓰시는 편이 안전합니다.

실제로 이렇게 만든 것이 있습니다
MyStart FastFind 로 만든 것

브라우저 시작 페이지에서 내 PC 파일을 바로 찾습니다. 웹 검색과 로컬 파일을 한 자리에서 봅니다.

브라우저시작 페이지
검색어를 친다
MyStart 에이전트/v1/localfiles
읽기만 중계
FastFind127.0.0.1:9090
/api/search

브라우저가 FastFind 를 직접 부르지 않습니다. 웹 화면에 API 가 노출되면 아무 사이트나 내 파일 목록을 긁어 갈 수 있으니, 믿을 수 있는 에이전트가 가운데에서 읽기만 넘겨 줍니다.
부르기 전에 /api/status 로 떠 있는지 먼저 보고, 없으면 503 fastfind_not_running 을 돌려주고 설치 안내로 넘깁니다. 사용자는 FastFind 를 설치·실행만 하면 됩니다 — 로그인도 설정도 없습니다.

mystart.youngsam.net 보기 ↗

인증

토큰이 필요합니다

아무나 내 파일 목록을 긁어 갈 수 있으면 안 되므로, 토큰 없이는 답하지 않습니다.

두 가지 방법 중 하나로 보내십시오.

Authorization: Bearer <토큰>머리말에 담아 보내기
ff_local_token=<토큰>쿠키로 보내기 (브라우저에서 쓸 때)

토큰은 /login 화면에서 받습니다. 이 두 주소만 토큰 없이 열립니다.

POST /api/local-auth/login

REST API

검색 — GET /api/search
curl -H "Authorization: Bearer $TOKEN" \
  "http://127.0.0.1:9090/api/search?q=견적서%20ext:pdf&max=50"

보낼 것

q검색어. 사용법의 검색 문법 을 그대로 씁니다 (ext: size: path: 초성 …)
max최대 몇 개까지 (생략하면 기본값)
name_onlytrue 면 이름에서만, false 면 전체 경로에서
case대소문자 구분
word낱말 단위로
regex정규식으로
sort asc정렬 기준과 방향

받을 것

{
  "results": [
    {
      "name": "견적서_한빛건설.pdf",
      "path": "C:\\작업\\2026\\견적서_한빛건설.pdf",
      "size": 284915,
      "ext": "pdf",
      "modified": 1786012800,
      "is_dir": false
    }
  ],
  "total": 12,
  "time_ms": 5.3,
  "query": "견적서 ext:pdf"
}

total조건에 맞는 전체 개수이고 results 는 그중 돌려준 만큼입니다. modified 는 1970년부터의 초입니다.

상태 — GET /api/status

색인이 준비됐는지, 몇 개나 담고 있는지 봅니다. 검색을 보내기 전에 이걸 먼저 확인하시면 프로그램이 꺼져 있거나 아직 색인 중일 때를 가려낼 수 있습니다.

{
  "indexed_files": 4663246,
  "version": "0.42.1",
  "status": "ready"
}

응답에 engine engine_gen mem 같은 칸도 함께 오는데, 그건 저희가 문제를 찾을 때 쓰는 값이라 예고 없이 바뀝니다. 기대지 마십시오.

자동 완성 — GET /api/suggest

치는 중에 보여 줄 후보를 받습니다. 글자 배열 하나만 돌려줍니다.

GET /api/suggest?q=견적

["견적서_한빛건설.pdf", "견적서_양식.hwp", "견적_2026.xlsx"]
파워셸에서 쓰는 짧은 보기
$t = "여기에 토큰"
$r = Invoke-RestMethod -Uri "http://127.0.0.1:9090/api/search?q=ext:log" `
     -Headers @{ Authorization = "Bearer $t" }
$r.results | Select-Object name, path, size | Format-Table
파이썬에서 쓰는 짧은 보기
import requests, urllib.parse

TOKEN = "여기에 토큰"
q = urllib.parse.quote("견적서 ext:pdf")
r = requests.get(f"http://127.0.0.1:9090/api/search?q={q}&max=20",
                 headers={"Authorization": f"Bearer {TOKEN}"})
for f in r.json()["results"]:
    print(f["size"], f["path"])
그 밖의 경로 — 있지만 약속하지 않습니다

아래도 열려 있습니다. 다만 저희 웹 화면이 쓰려고 만든 것이라 예고 없이 바뀝니다. 쓰시더라도 깨질 수 있다는 것을 알고 쓰십시오.

GET /api/recent최근 만들어지거나 고쳐진 파일
GET /api/open?path=…그 파일을 엽니다
GET /api/open-folder?path=…그 파일이 있는 폴더를 엽니다
GET /api/preview?path=…미리보기 그림 (이미지로 돌려줍니다)
GET /api/content-search파일 안 내용에서 찾기. 느립니다
GET /api/analysis어디가 용량을 많이 쓰는지
GET /api/browse?path=…폴더 안 목록
/api/favorites /add /remove즐겨찾기
/api/smart-folders /add /remove /search저장된 검색
/api/history /clear검색 기록

이 중 자주 쓰시는 것이 있으면 알려 주십시오. 쓰는 분이 있는 것부터 약속 목록으로 옮기겠습니다.

실패했을 때
연결 거부프로그램이 꺼져 있습니다. 또는 포트가 다릅니다
401토큰이 없거나 틀렸습니다
404없는 경로입니다

프로그램은 사용자가 끄면 함께 사라집니다. 항상 떠 있다고 여기지 마십시오. 부르기 전에 /api/status 로 확인하고, 안 되면 조용히 넘어가도록 만드시는 편이 안전합니다.

포트를 어떻게 아나요?

기본은 9090 이지만 사용자가 설정에서 바꿀 수 있습니다. 배포하실 도구라면 포트를 물어보거나 설정할 수 있게 만들어 두십시오.

설정 파일에서 읽으실 수도 있습니다.

%LOCALAPPDATA%\FastFind\settings.json

플러그인

플러그인은 어떻게 동작하나요?

검색 결과를 오른쪽 클릭했을 때 나오는 메뉴에 내 기능을 끼워 넣는 것입니다.

플러그인은 별도 실행파일입니다. DLL 로 앱 안에 넣지 않습니다 — 남이 만든 코드가 잘못돼도 FastFind 가 같이 죽으면 안 되기 때문입니다. 그래서 어떤 언어로든 만드실 수 있습니다.

FastFind → 플러그인 :  myplugin.exe --path "C:\\file.txt"
플러그인 → FastFind :  표준출력으로 JSON 한 덩어리
돌려줄 수 있는 것
message알림창을 띄웁니다
copy클립보드에 담습니다
open그 경로를 엽니다
{"action":"message","title":"줄 수","text":"1,284줄"}
{"action":"copy","text":"복사할 내용"}
{"action":"open","path":"C:\\어딘가"}
가장 짧은 플러그인 — 파이썬 다섯 줄

고른 파일이 몇 줄인지 세어 알려 주는 것입니다.

import sys, json
path = sys.argv[sys.argv.index("--path") + 1]
n = sum(1 for _ in open(path, encoding="utf-8", errors="ignore"))
print(json.dumps({"action": "message", "title": "줄 수",
                  "text": f"{n:,}줄"}, ensure_ascii=False))

이것을 exe 로 만들어 아래 자리에 넣고, 옆에 plugin.json 을 둡니다.

%LOCALAPPDATA%\\FastFind\\plugins\\linecount\\
    run.exe
    plugin.json
{
  "id": "linecount",
  "name": "줄 수 세기",
  "description": "고른 파일의 줄 수를 셉니다",
  "version": "1.0.0",
  "author": "내 이름"
}

FastFind 를 다시 켜면 결과 우클릭 메뉴에 줄 수 세기 가 나옵니다.

이미 딸려 있는 것들

넷이 함께 설치됩니다. 만들 때 참고하십시오.

  • 파일 정보 — 크기·시각·속성
  • 해시 — SHA-256 계산
  • 이미지 정보 — 크기·형식
  • 글자 통계 — 줄·낱말·글자 수

약속과 한계

어디까지 안 바뀐다고 약속하나요?

정직하게 적겠습니다. 이 페이지에 적은 것만 약속합니다.

/api/search약속합니다. 칸을 빼거나 뜻을 바꾸지 않습니다
/api/statusindexed_files version status 세 칸만 약속합니다
/api/suggest약속합니다
플러그인 규약약속합니다
그 밖의 경로내부용입니다. 예고 없이 바뀝니다

프로그램 안에는 이보다 많은 경로가 있지만 대부분 저희 웹 화면이 쓰는 것들입니다. 공개하면 함부로 못 고치는 약속이 되므로, 안정된 것만 골라 여기 적었습니다.

새 칸이 늘어나는 일은 있습니다. 그건 기존 것을 깨지 않으니, 모르는 칸이 오면 그냥 무시하도록 만들어 두십시오.

지금은 없는 것
  • 공식 라이브러리가 없습니다. HTTP 로 직접 부르셔야 합니다
  • 변화 알림(웹훅)이 없습니다. 파일이 생겼을 때 알려 주는 길이 없어, 필요하면 되물어 보셔야 합니다
  • 플러그인이 결과 목록을 바꿀 수는 없습니다. 지금은 우클릭 메뉴에서 한 가지 일을 하는 것까지입니다

필요하신 것이 있으면 알려 주십시오. 쓰시는 분이 있으면 만듭니다.

명령줄로도 됩니다

서버를 쓸 것 없이 실행파일을 바로 부르셔도 됩니다.

FastFind.exe --console ext:log > 목록.txt

자세한 것은 사용법의 명령줄 갈래에 있습니다.