• 5.1.0

    5.0.1 대비 변경사항

    수집 상태와 운영 화면

    • E-Hentai 상태 API에 stage·cursor.total·currentGallery.pageCount·lastSuccessAt을 추가하고, metadata 검사 중에는 검사 중인 갤러리를 현재 갤러리로 유지해 - 깜박임을 줄였습니다. 재개 시 남던 E-Hentai 수집을 재개했습니다. 안내는 제거했습니다.
    • 수집 패널은 Hitomi·E-Hentai 모두 현재 단계와 하단 마지막 성공: 시각을 같은 자리에 보이고, E-Hentai는 목록 위치를 N번째/M번째, 이미지 저장 단계의 현재 페이지를 N / M페이지로 보입니다. 대기 갤러리·실패 갤러리 수는 표시하지 않으며 운영 관리의 시각 레이블을 마지막 성공으로 통일했습니다.
    • 운영 관리의 새로고침은 공용 버튼(아이콘 + 새로고침, 조회 중 스피너)으로 통일했고, 가비지 컬렉션은 새로고침을 제목 행 우측 상단, 마지막 집계를 저장 원본 아래로 옮겼습니다. 안내문·보조 줄 색과 시각 형식을 맞췄습니다(전수 점검 시각은 초 유지). 중복 검사 작업의 최근 검사 기록 블록은 제거했습니다.
    • Hitomi 매일 증분 자동 수집은 20:00(Asia/Seoul)에 실행됩니다.

    중복 관리

    • 홈 삭제·GC로 소속 작품이 사라져 비교 상대가 없는 중복 그룹(살아 있는 작품 2개 미만, 해결 그룹은 0개)은 검토 목록과 검토 필요 집계에서 제외합니다. 그룹 행은 지우지 않습니다.

    브라우저 캐시

    • HTML 문서와 버전 없는 public 파일(아이콘·manifest 등)은 private, no-cache(200·304)로 응답해 Firefox도 썸네일을 디스크 캐시에 저장합니다. 오류·redirect는 no-store를 유지합니다.
    • 썸네일 304 응답에 ETag·Cache-Control을 포함하고 If-None-Match를 RFC 9110 약한 비교(W/·쉼표 목록·*)로 처리합니다. 보호 원본도 같은 helper를 씁니다.
    • 설정의 브라우저 캐시 정리 설명·완료 토스트에 "브라우저에 따라 이미 열린 탭은 새로 열어야 반영될 수 있다"는 안내를 넣었습니다.

    기본 블랙리스트와 태그 번역

    • fresh install 기본 전역 블랙리스트를 2026-10-06 운영 내보내기와 동일하게 태그 143개·갤러리 582개로 맞췄습니다(기존 DB 규칙은 바뀌지 않음, migration 없음).
    • 누락 태그 628건 중 563건을 번역(공식 한국어 확인 115건)하고 15건은 원문 유지, 50건은 보류했습니다. oppai loli는 거유로리, whos that girl은 오늘의 한요일은 여자다로 바꿨습니다.
    • 기존 사전 10,816개를 감사해 공식 표기 132건·게임 데이터 44건·의미 55건·표기 일관성 264건·통용 표기 23건, 총 518건을 교정했습니다. 교정 전후·근거는 apps/web/src/lib/__fixtures__/tag-translation-review-2026-10-07.json에 있습니다.

    기존 기능과 데이터를 유지하는 기능·지원 범위 추가가 중심이라 minor 5.1.0을 적용합니다. API 비호환·DB migration·SQL schema·의존성 변경은 없습니다. 제품 버전은 Git 태그·OCI label·문서로 관리하며 private package와 lockfile의 기존 버전은 유지합니다.

    이미지 게시 범위

    production 빌드 입력 지문 대조상 nginx·backend·crawler·web이 변경돼 네 이미지를 새로 빌드해 5.1.0·latest로 게시했습니다. byedpi는 기존 latest digest에 5.1.0 태그만 붙였습니다. 모든 자체 이미지에 5.1.0 태그가 있으므로 IMAGE_TAG=5.1.0 지정과 일괄 rollback이 가능합니다. log-reader는 backend 이미지를 공유하며 PostgreSQL·Redis·Silo는 자체 이미지 게시 대상이 아닙니다.

    NAS 업데이트와 주의사항

    운영자는 운영 반영에 따라 5.1.0의 Compose와 릴리스 파일을 갱신하고 기본 latest를 사용합니다. DB migration은 없으므로 backend·crawler·web·nginx 교체만으로 반영됩니다.

    • Hitomi 자동 수집 시각이 22:00에서 20:00으로 바뀝니다. 다음 자동 실행 시각은 운영 화면 Hitomi 패널에서 확인합니다.
    • HTML 캐시 정책 완화로 HTML이 개인 브라우저 디스크 캐시에 남을 수 있습니다. 공유 cache 불허(private)와 매 요청 재검증(no-cache)은 유지됩니다.
    • 기본 블랙리스트 seed 변경은 새 설치에만 적용됩니다. 운영 DB의 기존 규칙과 비어 있는 중복 그룹은 변경되지 않으며, 빈 그룹은 배포 뒤 목록에서 사라집니다.
    • 번역 교정 518건은 화면 표기가 바뀝니다. 되돌릴 항목은 fixture의 교정 목록으로 확인합니다.

    NAS 배포·운영 데이터 변경은 이번 게시에서 실행하지 않습니다. 마지막 기록된 NAS 배포는 4.6.0이며 현재 운영 버전 확인을 대신하지 않습니다.

    5.0.1 대비 전체 변경

    검증

    • 병합 main 5c02afa2에서 run-unit.ps1 -Workspace all(backend 71 suites·440 tests, crawler 63·691, web 126·1,483), run-operations.ps1 -DeploymentOnly, 기본 블랙리스트 브랜치의 run-schema.ps1이 통과했습니다.
    • 개발 stack을 같은 코드로 재빌드해 HTML·manifest private, no-cache와 304, 없는 chunk no-store, 썸네일 304의 ETag·약한 목록 검증, 정리 endpoint 204와 Clear-Site-Data, jobs/ehentai/status 응답 형태, crawler 기동 로그의 20:00 예약을 확인했습니다.
    • 이미지 검색·운영 UI 격리 브라우저 검증 1440/320px, 운영 UI 320~1920px 라이트·다크 176장 캡처, run-translation-coverage.ps1(개발 DB 101 tags)이 통과했습니다. 브라우저 캐시는 Chromium·Firefox·WebKit에서 재방문 전송 0바이트와 정리 뒤 재전송을 실측했습니다.
    • 각 브랜치는 병합 전 읽기 전용 리뷰를 거쳤습니다. 실제 데스크톱 브라우저 재측정, viewer 보호 페이지 캐시 실측, 수집 실행 중 화면 관측, NAS 배포는 NOT RUN입니다.

    게시 확인

    • 릴리스 소스: 20ec1d9379ca4c4b936aa35c3c179c71d273e0c9 (annotated Git 태그 5.1.0 대상).
    • byedpi 5.1.0·latest(기존 digest 재사용): sha256:15ac60ab852a92219573aa3e3795f700e9da0692022af47233590e6a78a1a40a. linux/amd64 manifest: sha256:6c30efe40328be54695b17acbc2f82d255ca66b6f0fac5e07c1da7b0df2c1024. 입력 지문이 latest와 같아 새로 빌드하지 않았습니다.
    • nginx 5.1.0·latest OCI index digest: sha256:0ed33b91538effe5864676f21e16edbbdd33f11251bd180adc97f4eb7a16467d. linux/amd64 manifest: sha256:398179ddd39a7cbe2a0773d68af7a2e1085457995ed04081f58960bc6f2ead79. OCI version 5.1.0·revision 20ec1d93…·입력 지문 a02757a0a50293e8d4bf509b8b317fc46942ae155926bb759a946871643bc7d0.
    • backend 5.1.0·latest: sha256:5ed675eed4da9c63125080a3e4ebc0fabe43093d137fd198ecf225e35917816c. linux/amd64 manifest: sha256:7fedbfa9ed1500cfce0b3a9b064a72cc441b6d94e06e486b3155ecbfc01bdc63. OCI version 5.1.0·revision 20ec1d93…·입력 지문 3c628833c714d4218f3e49db5588c970b3605612cdbe84c34ddc28013ec2b396.
    • crawler 5.1.0·latest: sha256:e738b21c0aa1cba32955d907e35a2207a9a100872dc3c669c65c4c4ad041648e. linux/amd64 manifest: sha256:96f7ea6ecb4847818cc1c858f873470340b7391ae0d5cab460058fec670c8c8d. OCI version 5.1.0·revision 20ec1d93…·입력 지문 499554adee2571372c2507ea27781e0e445cd591d06fb01da9137c164fbc3fdd.
    • web 5.1.0·latest: sha256:80a1b119ba2793ffd9a4e31f10465dce90855e26fcd715e09f708779a879efb3. linux/amd64 manifest: sha256:2ec56af015a301486b4cb24d234268807fbbd811086aef85d1239a6bed598808. OCI version 5.1.0·revision 20ec1d93…·입력 지문 09913fa94996ecb0b3d5815c23d1c305932d5149a11d3ad4b30896f7ca2a7c07.
    • publish-images.ps1 -Version 5.1.0 -Publish 첫 실행은 네 이미지 동시 push에서 레지스트리 unknown 오류로 멈췄고 태그는 하나도 올라가지 않았습니다. COMPOSE_PARALLEL_LIMIT=1로 push를 직렬화한 재실행이 exit 0으로 완료했으며 no-cache·ForceRebuild·직접 docker push·인증 변경은 없었습니다. 공유 개발 stack 9개 컨테이너는 같은 코드로 재빌드돼 유지 중입니다.
    Downloads 2