Invenqor v0.2.23
Invenqor Server·Agent v0.2.23 릴리즈 노트
릴리즈 일자: 2026-09-03
호환 Agent: v0.2.23 (Linux·Windows)
이번 릴리즈는 결함 하나를 고칩니다. 자리는 운영자가 화면에 직접 입력하는 검색어
이고, v0.2.22와 마찬가지로 틀린 답이 저장 모드마다 달랐습니다 — 같은 검색어가
PostgreSQL에서는 자산을 찾고 SQLite fallback에서는 아무것도 찾지 못했습니다.
1. 입력한 검색어가 패턴 그대로 데이터베이스에 넘어갔습니다
운영자는 호스트 이름, 패키지 이름, 이벤트 코드를 글자 그대로 입력합니다. 그런데
모든 검색은 그 글자를 와일드카드로 감싸 LIKE에 그대로 실었기 때문에, 데이터베이스는
입력값을 패턴으로 읽었습니다.
_는 임의의 한 글자에 일치합니다. 그리고_는 이 제품이 저장하는 이름에 흔히
들어갑니다. 자산 목록에서db_prod를 찾으면db-prod도 함께 돌아왔고, 감사
로그에서api_key.create를 찾으면 다른 동작이 남긴 행까지 섞여 나왔으며, 서버
로그에서agent_enrollment_failed를 찾으면 그것이 아닌 이벤트에도 닿았습니다.%는 모든 행에 일치합니다. 하나도 찾지 못해야 할 검색이 전체 인벤토리·전체
감사 로그·전체 서버 로그를 돌려줬고, 응답에는 그런 일이 벌어졌다는 표시가
없었습니다.- 역슬래시의 의미는 엔진마다 달랐습니다. PostgreSQL은 역슬래시를
LIKE의 기본
escape 문자로 읽고, SQLite fallback에는 기본 escape 문자가 아예 없습니다. 그래서
C:\Program같은 Windows 경로로 검색하면 한쪽 모드에서는 호스트를 찾고 다른
모드에서는 아무것도 찾지 못했습니다.
소프트웨어 인벤토리 검색은 이미 패턴을 escape하고 ESCAPE 문자를 명시하고 있었습니다.
이번 변경은 그 규칙을 storage.LikePattern / LikeContains 한 곳으로 올리고, 규칙이
없던 여섯 자리에 적용합니다 — 자산 목록 검색과 소유 부서 필터(콘솔·REST API·API Key
경로·CSV 내보내기가 함께 쓰는 자리), MCP asset_search 도구, 감사 로그의 행위자
필터와 자유 검색, 그리고 서버 로그 검색입니다.
검증
- 각 자리별로. 여섯 자리 모두에 대해
_와%가 글자 그대로 비교되는지를
고정했습니다.db_prod를 찾으면db-prod가 돌아오지 않고,%만 입력한 검색은
전체가 아니라 그 글자를 담은 행만 돌려줍니다. - 두 저장 모드에서. 역슬래시 사례는 증상이 모드마다 갈렸던 자리이므로 SQLite
fallback과 PostgreSQL 양쪽에서 같은 답을 내는 것을 확인합니다(go test ./...을
fallback과scripts/test-postgres.sh의 실제 PostgreSQL 양쪽에서 전 패키지 통과,
go vet·go build·gofmt통과).
호환성
- 데이터베이스 마이그레이션이 없습니다.
- API 응답 형식 변경이 없습니다.
- 검색어에
_나%를 쓰던 질의의 결과가 달라집니다 — 이제 두 글자는 와일드카드가
아니라 입력한 글자 그대로 비교되므로, 결과가 이전보다 줄어듭니다. 줄어든 행은
운영자가 찾던 것이 아니었던 행입니다. - SQLite fallback에서 역슬래시를 포함한 검색어가 이제 PostgreSQL과 같은 결과를
돌려줍니다.