Skip to content

Invenqor v0.2.23

Choose a tag to compare

@hkjang hkjang released this 03 Sep 11:22
· 42 commits to main since this release

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과 같은 결과를
    돌려줍니다.