-
hanyul released this
2026-10-01 21:22:12 +09:00 4.3.0 대비 변경사항
수집(crawler)
- 이미지 재시도 정리와 429 보호 — page당 최대 40번까지 겹치던 이중 재시도를 page당 한 예산(기본 요청 6회·대기 3분, jitter)으로 합쳤습니다. 이미지 429는 즉시 보호 정지하고 공용 보호 회로를 열어 다른 page도 새 요청을 멈춥니다(
Retry-After존중, 없으면 10분). - 이미지 sliding window — "5장 묶음 → 200ms 대기" 대신 동시 5개·시작 간격 120ms로 이어서 받습니다(순간 요청률 상한은 기존 이하). 같은 Hitomi gallery 10개(216장) A/B 표본에서 시간당 11,406장 → 20,010장(+75%), 429·503·실패 0건.
- metadata 병렬 수집 — 이름과 달리 순차였던 범위 metadata 수집을 동시 3·간격 100ms lane과 100 ID 단위 일괄 조회로 바꿨습니다. ID 순서로 판정하고 첫 오류 뒤 결과는 버립니다. 300 ID 표본에서 ID당 182.7ms → 102.4ms, 429·503 0건.
- 정지 원인 분류와 자동 재개 — Hitomi 정지를 사용자 중지·원본 보호·일시 오류·반복 불가 실패로 구분해 운영 화면에 표시합니다. 보호·일시 오류 정지는 보호 대기 시각(없으면 5분 → 15분 → 1시간, 하루 12회) 뒤 같은 checkpoint를 자동 재개하고, 보호 대기는 crawler 재시작 뒤에도 유지됩니다. E-Hentai는 기존처럼 관리자 재개입니다.
- 막는 gallery 격리 — 같은 원인으로 반복 실패하는 gallery를 격리 원장에 넣고 그 ID만 미처리 gap으로 남긴 채 수집을 계속합니다. 운영 화면에서
다시 시도·해제할 수 있습니다. 일시 실패는 지금처럼 멈춥니다. - 업스트림 변경 오판정 방지 — 색인에 있는 ID의 404 비율 이상, 수집 시작 canary 실패, 연속 삭제 판정이 나오면 coverage 종결·삭제 표시를 보류하고 멈춥니다(자동 재개 대상).
- 태그 관계 동기화 — 원본에서 사라진 태그 관계를 삭제합니다(원본 태그가 비어 있으면 유지). 신규 태그는 일괄 생성합니다.
- 계측 — pHash(
phash)와 썸네일 생성(thumbnail) 시간을db_save와 분리했습니다.
중복 검사
- 후보 탐색 반경을 판정 반경(거리 6)에 맞춰 블록 이웃 137 → 17개로 줄였습니다. 이미지 검색은 거리 10 유지.
- 재현율에 기여하지 않으면서 작품마다 전체 gallery를 훑던 metadata 후보 단계를 제거하고 hash 결과만 비교합니다(같은 작가·그룹은 우선 비교).
- 대형 앨범 비교를 primal-dual 매칭과 사전 판정으로 바꿔 2,000×2,000 비교가 2.6–3.8초 → 12–93ms가 됐습니다(판정 결과 동일). 그래도 예산을 넘기면 실패 대신
시간 초과로 따로 기록합니다.
저장소·운영
- 원장→객체 무결성 점검 — orphan audit가
ready원장의 객체 누락·크기 불일치도 찾고, 색인 중 누락·체크섬 불일치를 별도로 셉니다. 관리자 확인 후 손상 page를 재수집 대기로 돌리는 복구 명령을 추가했습니다. - 카드 썸네일 축소본 — 1페이지로 480px WebP(q75) 파생본을 만들어 카드·북마크·대시보드에 씁니다(개발 표본 원본 대비 약 23%). 원본은 바꾸지 않고, 상세 모달 표지는 원본을 씁니다. 기존 gallery는 운영 화면의
썸네일 생성백필로 채웁니다. GC·orphan audit가 파생본을 함께 관리합니다. - nginx 오류 응답 캐시 차단 —
/_next/static·thumbnail·viewer page의 장기 캐시 헤더를 성공 응답(200·206·304)에만 붙이고 404·502 등은no-store로 바꿨습니다. 배포 중 오류가 Cloudflare에 캐시돼 흰 화면이 되던 문제의 재발을 막습니다. - 사용하지 않던 공개 추천 API(
/api/recommendations/*)를 제거했습니다.
화면(web)
- 뷰어 — 진행률 바를 키보드로 누르면 1페이지로 이동하며 읽기 기록이 지워지던 버그 수정, 접근권 갱신이 한 번 실패해도 화면 유지·자동 재시도, 휠·트랙패드 제스처당 한 장, 드래그 스크러버·페이지 번호 입력·Space·Home/End, 완독 작품은 처음부터, 마지막 장 뒤 종료 카드(북마크·작가 검색·처음부터·닫기). 진행률 저장 실패는 최신 값만 자동 재전송하고 닫기는 막히지 않습니다. 앞쪽으로 이동해도 기록을 지우지 않습니다.
- 홈 — 검색 결과 수 표시,
원본 게시일정렬, 추가 로드 실패 시 재시도(완료 문구 오표시 수정), offline 배너와 복귀 시 재조회. - 북마크 — 제목·작가 검색과 읽기 상태(안 읽음·읽는 중·완독) 필터, 점진 렌더.
- 대시보드 —
읽는 중·완독보기와 기록 개별 삭제. - 설정 — 테마
시스템 설정 따름선택.
새 기능이 추가되고 기존 데이터·API 사용 방식은 유지되므로 minor 버전입니다. 환경 변수·
compose.yml변경은 없습니다.DB migration (backend 시작 시 자동 적용, 데이터 보존)
DuplicateHashCandidates— 미완료 중복 검사 항목을 hash 탐색 단계로 전환.ImageLedgerIntegrity—image_integrity_issues추가,images.storagePath를COLLATE "C"로 변경(인덱스 재생성, 230만 행 기준 약 1초).AddImageThumbnails— 빈image_thumbnails원장 추가.CrawlGalleryQuarantine— 빈crawl_gallery_quarantine원장 추가.
이미지 게시 범위
운영 빌드 입력 지문을 4.3.0 시점
latest와 대조해 nginx·backend·crawler·web을 새로 빌드하고4.4.0·latest를 게시했습니다(publish-images.ps1 -ChangedOnly). nginx는nginx.conf, backend·crawler·web은 앱 코드와 공유 패키지가 바뀌었습니다. byedpi는 입력이 같아 기존latestdigest를 유지하며4.4.0태그를 추가하지 않았습니다. redis는 공식redis:8.10이미지를 그대로 씁니다.NAS 업데이트
compose.yml·.env.production변경은 없으므로 저장소 파일을 받을 필요 없이 배포 스크립트만 실행합니다.cd /volume1/2ex-hentai docker login git.2ex.dev sh ops/deploy-production.sh docker compose --env-file .env.production ps- backend 시작 시 위 migration이 자동 적용됩니다.
- 배포 뒤 운영 관리 →
썸네일 생성에서 백필을 시작해야 기존 gallery 카드가 축소본을 받습니다(동시성 1, 저부하). - Cloudflare
/_next/static/*Cache Rule의 Edge TTL은 "origin Cache-Control 사용"으로 두세요. 이미 오류가 캐시된 URL은 Custom Purge로 지웁니다(Cloudflare Cache Rule). - 이 릴리스는 변경 서비스에만 버전 태그가 있으므로
IMAGE_TAG로 전체 서비스를 일괄 지정할 수 없습니다.
검증
run-integration.ps1전체 통과(0214fee2main 기준): crawler runtime·GC·Push·backend API·중복 검사·이미지 검색·브라우저 회귀.- Docker
run-unit.ps1: backend 298, crawler 448(이후 crawler-guard 469), web 771 tests 통과.run-schema.ps1,run-crawler-recovery.ps1,run-duplicate-benchmark.ps1,run-search-benchmark.ps1(원본 게시일 p95 최대 27ms),run-operations.ps1 -DeploymentOnly(nginx 오류 캐시 회귀 포함), 격리 운영 UI runner 통과. - 실제 Hitomi:
run-hitomi-network.ps1(형식 fixture·canary) 통과, 이미지 window·metadata 동시성 A/B 표본. - 실제 브라우저의 휠·터치, NAS 썸네일 백필 처리량, 실제 업스트림 경로 변경, NAS 배포는 실행하지 않았습니다.
게시 확인
- 릴리스 소스:
0214fee2dc93bde98b635546f74b1ac5463de162(주석 태그4.4.0). - nginx
4.4.0·latest:sha256:1bb060b032b1136faf467ef56169b361c9366fe0a2001ad1b40360e5911e6370 - backend
4.4.0·latest:sha256:a56ff4df9386904646e4c66e198a151bd26e89a4c332e389a1d34347baed8971 - crawler
4.4.0·latest:sha256:d2f3f8fc26a60f1c7ef01e1edc599e498d5202bd0ab0b40b720d9ec04b03addb - web
4.4.0·latest:sha256:069a58f0cff68de5f36bb9ec585824f0af66359ef6a171fd344fa3d55e402f61 - 네 이미지 모두 OCI version
4.4.0·revision0214fee2확인. byedpi는 기존latestdigest(15ac60ab) 유지·4.4.0태그 부재 확인.
Downloads 2
-
Source code (zip)
0
2026-10-01 21:22:12 +09:00 -
Source code (tar.gz)
0
2026-10-01 21:22:12 +09:00
- 이미지 재시도 정리와 429 보호 — page당 최대 40번까지 겹치던 이중 재시도를 page당 한 예산(기본 요청 6회·대기 3분, jitter)으로 합쳤습니다. 이미지 429는 즉시 보호 정지하고 공용 보호 회로를 열어 다른 page도 새 요청을 멈춥니다(