검색 도구가 드라이브 전체를 계속 다시 훑는 이유 (그리고 원래 어떻게 해야 하는가)

2026-08-29·6분
요약: 대부분의 데스크톱 색인기는 타이머에 맞춰 모든 폴더를 걸어다니며 파일을 다시 찾아냅니다. 전체 순회는 단순하고 언제나 정확하기 때문입니다. 대가는 거의 모든 순회가 아무것도 새로 찾지 못한다는 것입니다 — 큰 드라이브에서는 압도적 다수의 폴더가 지난번 이후 그대로인데도 CPU 와 디스크 값은 전액 치릅니다. LocalSynapse 는 이제 파일시스템 자체의 변경 알림에 기대어 어디를 볼지 알아내고, 주기적 전체 순회는 낮은 고정 주기의 안전망으로만 남기며, 색인 작업을 상한 아래로 묶어 바쁜 사이클이 정작 쓰려는 기기를 밀어내지 못하게 합니다.

첫 색인이 끝난 지 한참 지났는데도 검색 도구가 조용히 CPU 를 먹고 디스크를 두들기고 있다면, 대개 그 뒤에는 설계 결정 하나가 있습니다. 도구가 타이머에 맞춰 모든 폴더를 몇 번이고 걸어다니며 파일을 다시 찾아내는 것입니다.

비판하기 전에 왜 그 방식이 그토록 흔한지부터 이해할 필요가 있습니다. 어리석어서가 아니라, 옳지만 비싼 답이기 때문입니다.

전체 재스캔이 기본값인 이유

색인기는 한 가지 질문에 반복해서 답해야 합니다. 지난번 이후 무엇이 바뀌었나? 가장 무딘 답은 전부 들여다보고 비교하는 것입니다. 이 방식에는 진짜 미덕이 있습니다 — 저장할 상태가 없고, 어긋날 수가 없고, 운영체제가 진실을 말해주는지에 기대지 않으며, 놓친 사건이 있어도 스스로 회복합니다. 색인기의 첫 버전을 쓴다면 이게 맞는 선택입니다.

문제는 산술입니다. 전체 순회의 비용은 소유한 파일 수에 비례합니다. 그 가치는 변경된 파일 수에 비례합니다. 실제로 일하는 기기에서 이 두 수는 터무니없이 다릅니다 — 파일은 수십만 개인데 점심 이후 손댄 것은 스무 개 남짓입니다. 그래서 모든 순회의 압도적 다수는 "아무 일도 없었다"를 확인하는 데 쓰입니다.

비용은 순회 자체만이 아닙니다. 매 순회가 트리 전체의 디렉터리 메타데이터를 다시 읽는데, 그건 정확히 디스크를 계속 붙잡고 노트북을 따뜻하게 만드는 접근 양상입니다. 사용자는 이것을 "이 컴퓨터가 도무지 가라앉질 않는다"로 겪습니다.

"주기를 늘리면 되지"의 함정

덜 자주 스캔하면 되지 않느냐는 생각이 자연스럽습니다. 도움은 되지만 문제를 맞바꿀 뿐입니다 — 주기가 길어지면 방금 저장한 파일이 한동안 검색되지 않고, 그건 검색 도구를 쓰는 이유 자체를 무너뜨립니다.

더 나쁜 것은, 주기를 늘리면 고쳐지는 대신 가려지는 미묘한 실패가 있다는 점입니다. 어떤 시스템의 "유휴" 판정이 그 시스템의 작업 주기와 같은 시계를 쓰고 매 사이클에 일이 조금씩 있다면, 유휴 조건은 영원히 성립하지 않을 수 있습니다 — 밖에서 보기엔 조용해졌어야 하는데 시스템은 영구히 반쯤 바쁜 상태로 남습니다. 저희 메모리 해제 로직에서 정확히 그것을 발견했고, 해법은 더 긴 타이머가 아니라 다른 신호였습니다. 작업 대기열이 실제로 비는 순간에 놓는 것 — 타이머가 놓칠 수 없는 사건입니다.

교훈의 일반적인 모양이 그것입니다. 주기적 작업이 말썽이면 답은 대개 더 나은 주기가 아니라 더 나은 신호입니다.

더 나은 신호란

운영체제는 파일이 언제 바뀌는지 이미 알고 있습니다 — 백업 소프트웨어부터 파일 탐색기까지 전부 그것에 의존하니까요. Windows 는 이를 공개합니다. 프로그램이 폴더 트리에 관심을 등록해 두면 생성·수정·이름변경·삭제를 일어나는 대로 통보받습니다.

잘 쓰면 문제의 경제 구조 자체가 뒤집힙니다. 전부 뒤져서 "무엇이 바뀌었나"를 묻는 대신 무엇이 바뀌었는지 듣고, 드라이브 크기가 아니라 변경량에 비례하는 일을 합니다. 저장한 파일은 무엇이 디스크를 훑지 않아도 저장 직후 검색됩니다.

변경 알림만으로 완결되지는 않고, 그렇다고 주장하는 도구는 과장하는 것입니다. 알림은 몰릴 때 유실될 수 있고, 네트워크·이동식 드라이브에서 다르게 동작하며, 컴퓨터가 꺼져 있는 동안의 변경은 아무것도 오지 않습니다. 그래서 주기적 전체 순회에도 여전히 할 일이 있습니다 — 빠른 경로가 놓친 것을 잡는 안전망입니다. 달라진 것은 역할입니다. 가능한 한 자주 도는 주 수단에서, 낮고 편안한 고정 주기로 도는 뒷받침으로 내려옵니다.

상한 아래에 묶어 두기

한 조각이 더 있고, 들리는 것보다 중요합니다. 옳은 작업이라도 기기를 점령하면 환영받지 못합니다.

LocalSynapse 의 색인은 남는 자원을 기회주의적으로 먹는 대신 명시적인 상한 아래에서 돕니다. 사이클마다 정해진 예산이 있고, 들어가지 않는 일은 다음 사이클을 기다립니다. 최선의 경우에는 일부러 느린 셈이고, 그 거래는 할 만합니다 — 사람이 실제로 느끼는 것은 최악의 경우이기 때문입니다. 색인이 다소 느려도 기기를 불쾌하게 만들지 않는 도구가 계속 설치돼 있는 도구입니다.

메모리도 같은 원칙을 따릅니다. 의미검색 모델은 크고, 가끔 있는 검색을 즉시 처리하려고 그것을 영원히 붙들고 있는 것은 노트북에서 나쁜 거래입니다. 이제는 색인할 것이 없어지는 즉시 놓고, 필요할 때 다시 올립니다 — 그동안 앱이 화면에 그렇게 말해줍니다. 이유를 아는 멈춤과 모르는 멈춤은 전혀 다른 경험이니까요.

지금 LocalSynapse 에서 기대할 수 있는 것

실제로는 이렇습니다. 변경은 다음 순회를 기다리지 않고 파일시스템 알림으로 잡힙니다. 전체 순회는 낮은 고정 주기로 여전히 돌아 놓친 것 — 기기가 꺼져 있는 동안의 변경을 포함해 — 을 잡습니다. 색인 작업은 기기를 채우도록 늘어나지 않고 상한 안에 머뭅니다. 의미검색이 쓰던 메모리는 대기열이 비면 돌려줍니다.

어떤 로컬 검색 도구를 살펴보시든 이건 직접 물어볼 만한 질문입니다. "빠른가요?"가 아니라 "무엇을 보고 일을 하기로 정하나요?" 답이 "타이머"뿐인 도구는, 찾을 것이 있든 없든 당신의 드라이브를 몇 번이고 다시 찾아낼 것입니다.

LocalSynapse 무료 체험

파일 내용 검색, 100% 오프라인, 무료

홈으로 이동

관련 글