• 5.13.0

    5.13.0 주요 변경사항

    고급 검색 2라운드(web·backend)

    • POST /api/galleries/search에 하나라도 일치 태그 anyTags(최대 20), 쪽수 범위 minPages/maxPages(1~100000), 게시일 범위 uploadedAfter/uploadedBefore(YYYY-MM-DD, UTC 일 경계, 게시일 없는 작품 제외)를 추가했습니다. query 가중치 5, 캐시 키에 포함되며 GET 목록에는 적용되지 않습니다. 홈 검색창 pill과 고급 검색 패널에 같은 조건이 표시·편집됩니다.
    • 저장한 검색: saved_searches 테이블과 GET/PUT/DELETE /api/saved-searches(로그인 전용, 이름 60자·사용자당 50개·조건 JSON 8 KiB 상한)를 추가했고 계정 내보내기에 포함됩니다. guest는 브라우저에만 저장하며 로그인 뒤 병합 안내를 받습니다.
    • guest 최근 태그, 제외 태그를 개인 차단 규칙으로 승격(꺼 둔 규칙은 다시 켬, 409 처리), 긴 제외 칩 말줄임, 게시일 편집기·pill의 터치 높이 등 보정을 포함합니다.

    문서 정리

    • 저장소 Markdown 23개를 현재 코드·설정과 대조해 어긋난 설명(중복 검사 trigger 이름, creator-feed 가중치, UUID v4 규칙, checkpoint 409 조건, galleryinfo timeout, probe 수 402→401 등)을 정정하고, 변경 이력·측정 수치·구현 세부·이전 버전 전환 안내·보류 항목을 제거했습니다(약 614KB→510KB). docs/완료_이력.md는 최신 게시·마지막 운영 배포·현재 릴리스 주기의 검증 기준선만 유지합니다. 현재 미완료 계획은 없습니다.

    새 API·화면 기능과 데이터 보존 migration이 있어 minor 5.13.0으로 게시합니다. compose.yml·.env.example은 5.12.0과 같고 sql/init-db.sql에 saved_searches가 추가됐습니다.

    이미지 게시 범위

    • 새로 빌드(5.13.0·latest): backend·web. backend는 galleries 검색 DTO·query, saved-searches 모듈, 계정 내보내기, migration이, web은 홈 검색창·고급 검색 패널·저장한 검색·개인 차단 승격 컴포넌트·hook이 바뀌었습니다. 빌드 입력(Dockerfile·shared·lockfile) 자체는 같습니다.
    • digest 재사용: crawler(5.12.0 digest), nginx(5.10.0 digest), byedpi(5.4.0 digest). 빌드 입력이 같아 기존 digest에 5.13.0·latest 태그만 붙였습니다.
    • 다섯 이미지 모두 5.13.0 태그가 있으므로 IMAGE_TAG=5.13.0으로 고정할 수 있습니다.
    • 참고: 같은 backend·web digest가 게시 과정의 착오로 잠시 5.12.1 태그로 올라갔다가 삭제됐습니다(Git 태그·레지스트리 태그 모두 제거). 내용은 5.13.0과 동일합니다.

    NAS 업데이트와 주의사항

    운영은 운영 반영을 따릅니다.

    • backend 기동 시 migration CreateSavedSearches가 saved_searches 테이블을 만듭니다(forward-only, 기존 데이터 변경 없음). 새 설치는 5.13.0 태그의 sql/init-db.sql을 받습니다.
    • backend와 web은 함께 배포합니다. 새 web은 anyTags·범위 조건과 /api/saved-searches를 호출하므로 옛 backend와 섞이면 해당 조건이 400, 저장한 검색이 404를 받습니다.
    • backend 교체 전 crawler를 정지하는 배포 절차 때문에 실행 중인 E-Hentai 수집 job은 운영 화면에서 수동 재개가 필요합니다.
    • compose.yml·.env.example은 5.12.0과 같아 운영이 5.10.0 이상 Compose라면 이미지만 바뀝니다.
    • rollback: 5.12.0 이미지는 다섯 서비스 모두 레지스트리에 있어 IMAGE_TAG=5.12.0으로 되돌릴 수 있습니다. saved_searches 테이블은 남지만 5.12.0은 이를 읽지 않습니다. 더 이전 버전은 web 5.6.05.11.0·crawler 5.9.05.11.0·backend 5.10.0 이하 태그가 없어 digest로만 지정할 수 있습니다.

    5.12.0 대비 전체 변경

    검증

    • 앱 코드(b6c87bfa, 릴리스 commit과 동일): 개발 stack 재빌드(backend·web), run-unit.ps1 -Workspace all, run-integration.ps1, 이미지 검색·운영 UI 격리 검증, 북마크 UI 격리 검증, 문서 검증이 통과했습니다. run-schema.ps1·run-passkey.ps1은 1차 병합 2ff9fe56, run-search-benchmark.ps1은 브랜치 311c61f8(p95 ≤ 11.6ms, index 추가 없음)에서 통과했습니다. backend·web 브랜치는 각각 gpt-6.1-sol 읽기 전용 리뷰 2라운드를 거쳤습니다.
    • 문서(8fb29a60): 문서 브랜치 네 개를 gpt-6.1-sol 읽기 전용 리뷰로 코드 대조(승인 3, P2 1건 복원 후 판정)했고, 저장소 전체 Markdown 23개 링크·anchor 검사 533건 0오류, git diff --check, 개발·운영 Compose config --quiet, update-base-images.ps1(기반 이미지 digest 최신)이 통과했습니다.
    • NOT RUN: main의 run-search-benchmark.ps1, run-compose-compat.ps1(compose.yml·Dockerfile 변경 없음), crawler·network runner(crawler 변경 없음), 실브라우저 확인, 운영 배포.

    게시 확인

    • 릴리스 소스: 29d639a8 (annotated Git 태그 5.13.0 대상, 앱 코드는 b6c87bfa와 같음).
    • backend 5.13.0·latest(새 빌드): sha256:6d9b3f8115d6cae09399a04eb7932a6a248b01f77f3816ba4e75b03d4bac20db
      • linux/amd64 manifest: sha256:28d25e05feb6adc6296d7a3a2065798394639620ecab0aee6215fc54e0e82f0d
    • web 5.13.0·latest(새 빌드): sha256:7234e4cfcdc633f99b1cc1de55a1e96a70e7c54873ef70a6577c7c38cd5a68a4
      • linux/amd64 manifest: sha256:94c009e46ab3901bc83da2cc292eff8fcd1c36272b3dd5de6fba3ce3b240e255
    • crawler 5.13.0·latest(5.12.0 digest 재사용): sha256:f5ce5f079ff563e6939330f9562afd50081e47eac253fa6cc867b377cdbfef09
    • nginx 5.13.0·latest(5.10.0 digest 재사용): sha256:552b18eddb10c22b7dbfaee60a6e1bacd20f8b004892c8209f3b48f508c3a780
    • byedpi 5.13.0·latest(5.4.0 digest 재사용): sha256:04cf2838499d67a033a3c3101913563bf983e551fee27b891dab0d2f75a4233a
    • ops/publish-images.ps1 -Version 5.13.0 -Publish가 첫 실행에서 완료됐고 다섯 서비스의 5.13.0·latest 일치를 확인했습니다(Registry tags verified for 5.13.0.).
    Downloads 2