Releases

  • 4.5.0

    4.4.0 대비 변경사항

    운영 작업

    • 병렬 실행 — Hitomi·E-Hentai 수집, 이미지 색인, 썸네일 생성, GC, 중복 검사를 동시에 실행할 수 있습니다. 같은 작업의 중복 실행만 막고(GC·orphan audit·무결성 복구는 같은 작업군), 작업 사이 정합성은 갤러리별 storage lock과 원장 상태로 지킵니다. orphan audit 삭제는 갤러리 잠금을 기다리지 않고 다음 회차로 미루며, 무결성 대조는 DB 시각 기준입니다. crawler DB 연결 풀은 20입니다.
    • 시작 경고창 — 다른 작업이 실행 중일 때 시작·재개를 누르면 실행 중인 작업과 NAS 부하 안내를 보여 주고 확인 후에만 시작합니다. 19시 예약·자동 재개는 다른 작업 때문에 건너뛰지 않습니다.
    • 실시간 로그 — 선택 해제한 컨테이너 줄이 1,000줄 버퍼를 차지해 crawler 이력이 사라지던 문제, 화면 지우기 뒤 2초 안에 같은 줄이 되살아나던 문제를 고쳤고, 중지·일시정지된 컨테이너를 경고로 표시합니다(log-reader는 고정 컨테이너 이름과 상태만 조회).
    • DB 통계 — 통계 집계만 읽기 전용 transaction에서 30초 제한으로 실행합니다(나머지 요청은 5초 유지). Redis가 통계 snapshot을 밀어낸 뒤 갱신 대기 동안 캐시가 비던 문제도 고쳤습니다.

    화면

    • 링크 미리보기 — Discord 등에 공유하면 1페이지 원본 표지와 동인지 · 73페이지 · 작가(작가가 없으면 그룹) 설명이 나옵니다. 원본이 AVIF인 표지는 X·Facebook에서 이미지가 빠질 수 있습니다.
    • 라이트 모드 대비 — 입력·버튼 테두리, 보조 버튼 면, 상태 배지, 포함/제외 태그, 전역 블랙리스트 칩, 카드 태그가 배경과 구분되도록 경계를 보강했습니다(측정한 글자·아이콘 기준 미달 118건 → 0건). 제외 태그는 − 접두로도 구분합니다. 다크 모드 값은 그대로입니다.
    • 홈 검색창 — 좁은 폭에서 글자와 아이콘이 겹치던 문제, 태그를 넣으면 두 줄로 두꺼워지던 문제를 고쳤습니다(높이 40px 한 줄, 태그가 많으면 가로 스크롤).
    • 홈 무한 스크롤 — 다음 page를 불러올 때 화면이 위로 튀던 문제와 매거진 보기의 미세 떨림을 고쳤습니다. 열 수·행 간격을 실제 렌더에서 측정합니다.
    • 버튼 — 글자만 떠 보이던 필터 초기화, 대시보드 기록 삭제 등 텍스트 동작 버튼에 테두리를 넣었습니다.
    • 접근성 — 상세 모달의 작가·그룹·태그 칩을 키보드로 이동·실행할 수 있고, 닫으면 포커스가 칩으로 돌아옵니다.
    • 정리 — 실제 최신순과 맞지 않던 원본 게시일 정렬(기본 갤러리 ID 정렬 유지), 설정의 설정 데이터 섹션(동기화 문구·JSON 내보내기·가져오기·초기화)을 제거했습니다. 뷰어 종료 카드의 북마크 아이콘을 별로 통일했습니다. 예전에 저장된 화면에 없는 고급 검색 조건(페이지 수·날짜)이 숨은 채 적용되던 버그도 고쳤습니다.

    정리·안정성

    • 어떤 클라이언트도 호출하지 않던 API 약 20개를 제거했습니다: 전역 블랙리스트 통계·검사·언어·reset·sync·init 등, legacy 단건 중복 검사·그룹 조회·cache 삭제, 갤러리 통계·진행률 조회·생성·수정·단건 삭제, 북마크 단건 확인, 검색 API의 category·페이지 수·업로드 날짜 필터.
    • Hitomi 이미지 A/B 비교용 batch 모드, 앱이 읽지 않던 LOG_LEVEL·MINIO_BUCKET 환경 변수, 미사용 코드·의존성(@nestjs/mapped-types)·과도한 테스트를 정리했습니다.
    • 4.4.0 ImageLedgerIntegrity migration이 운영 규모에서 statement timeout에 걸리던 문제를 고쳤습니다(이미 수동 복구한 설치는 영향 없음).
    • 문서를 코드와 대조해 최신화하고, README를 새로 썼습니다.

    새 기능이 추가되고 기존 데이터·사용 방식은 유지되므로 minor 버전입니다. 제거한 API는 web·운영 스크립트·테스트 어디에서도 호출하지 않던 경로입니다.

    DB migration (backend 시작 시 자동 적용)

    • DropGalleryUploadDateIndex — 더 쓰지 않는 idx_galleries_upload_date를 DROP INDEX CONCURRENTLY로 제거(잠금 없음, statement timeout 해제 후 원래 값 복원).

    이미지 게시 범위

    빌드 입력 지문을 4.4.0 시점 latest와 대조해 backend·crawler·web만 새로 빌드하고 4.5.0·latest를 게시했습니다(publish-images.ps1 -ChangedOnly). backend·crawler·web은 앱 코드·공유 패키지·lockfile이 바뀌었습니다. nginx·byedpi는 입력이 같아 기존 latest digest를 유지하며 4.5.0 태그를 추가하지 않았습니다.

    NAS 업데이트

    이미지만 바뀌면 배포 스크립트로 충분합니다. compose.yml은 쓰지 않는 환경 변수 두 줄(LOG_LEVEL·MINIO_BUCKET)만 빠졌으므로 받지 않아도 동작에는 영향이 없습니다. 맞춰 두려면 먼저 받습니다.

    cd /volume1/2ex-hentai
    # (선택) compose.yml 갱신
    curl -fsSL https://git.2ex.dev/hanyul/2Ex-Hentai/raw/tag/4.5.0/compose.yml -o compose.yml
    docker login git.2ex.dev
    sh ops/deploy-production.sh
    docker compose --env-file .env.production ps
    
    • .env.production에 남은 LOG_LEVEL·MINIO_BUCKET은 무시되므로 지워도 됩니다.
    • 운영 상태 감시는 https://<도메인>/api/health/ready(Keyword ready)를 권장합니다. viewer 페이지 주소는 web이 HTML만 돌려줘 backend 장애를 잡지 못합니다.
    • 이 릴리스는 변경 서비스에만 버전 태그가 있으므로 IMAGE_TAG로 전체 서비스를 일괄 지정할 수 없습니다.

    4.4.0 대비 전체 변경

    검증

    • 게시 소스 main에서 run-integration.ps1 전체 통과(병렬 수집·GC·색인·썸네일 실제 PostgreSQL·MinIO 시나리오, 홈 스크롤 왕복·상세 칩 키보드 회귀 포함).
    • 정리 직후 main 기준 run-unit.ps1 -Workspace all(backend 289·crawler 470·web 779), run-schema.ps1, run-crawler-recovery.ps1, run-operations.ps1 -DeploymentOnly, run-search-benchmark.ps1 통과. 이후 web 홈 스크롤 수정은 web 단위(783)·build·통합으로 확인.
    • 화면 수정은 격리 환경에서 1440/390px·라이트/다크 캡처와 대비·높이 측정으로 확인. 홈 스크롤은 Chromium·WebKit, 휠·터치, 배율·로그인 조건에서 점프 0을 확인했습니다. 사용자가 보고한 좌우 흔들림은 격리 환경에서 재현되지 않아 실제 기기 확인이 남아 있습니다.
    • 실제 Discord 미리보기 렌더링, NAS 병렬 실행 부하, NAS 배포는 실행하지 않았습니다.

    게시 확인

    • 릴리스 소스: 1a7960d4c8739260f4a0b3448e6b1a32b1a380e0 (주석 태그 4.5.0).
    • backend 4.5.0·latest: sha256:90399d92b54a31fe9bbfe6e3fb033c3902a26dcbfe7a7296843abb1b521491e2
    • crawler 4.5.0·latest: sha256:8b895113240f0eafb15c1f58ab3f05bc1e1df30abaff5947e8dd19074df1d7f8
    • web 4.5.0·latest: sha256:adf23fe3561042cc6ae0dc5b8c75a336eebb4b1e739ac985cfacafe3e8e07383
    • 세 이미지 모두 OCI version 4.5.0·revision 1a7960d4 확인. nginx(1bb060b0)·byedpi(15ac60ab)는 기존 latest 유지·4.5.0 태그 부재 확인.
    Downloads 2
  • 4.4.0

    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는 입력이 같아 기존 latest digest를 유지하며 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로 전체 서비스를 일괄 지정할 수 없습니다.

    4.3.0 대비 전체 변경

    검증

    • run-integration.ps1 전체 통과(0214fee2 main 기준): 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·revision 0214fee2 확인. byedpi는 기존 latest digest(15ac60ab) 유지·4.4.0 태그 부재 확인.
    Downloads 2
  • 4.3.0 — 디자인 개선, 북마크 상세 보기, 검색창 태그 Backspace, Redis 공식 이미지

    4.2.1 대비 변경사항

    새 기능

    • 북마크에서 갤러리 상세 보기 — 북마크(갤러리 탭, 작가·그룹 북마크 안의 갤러리)에서 갤러리를 누르면 뷰어로 바로 들어가지 않고 홈과 같은 상세 모달이 열립니다. 뷰어는 모달의 읽기 버튼으로 들어가고, 닫기·Escape·뒤로 가기는 모달만 닫습니다.
    • 검색창 태그 Backspace 삭제 — 검색창에 태그가 들어간 상태에서 입력칸이 비어 있거나 커서가 맨 앞일 때 Backspace를 누르면 마지막 태그가 지워집니다(제외 태그 → 포함 태그 순, 한글 조합 중에는 동작하지 않음).
    • 가비지 컬렉션 상태 배지 — 운영 관리의 가비지 컬렉션 섹션 제목에도 Hitomi·E-Hentai·이미지 색인처럼 상태 배지(대기·집계 중·정리 중·수집 대기·색인 대기·오류 등)가 표시돼 접은 상태에서도 상태를 알 수 있습니다.
    • 오류·404 화면 — 앱 오류와 없는 페이지에 한국어 안내 화면(다시 시도·홈으로)을 추가했습니다.

    디자인 개선

    콘텐츠(썸네일)가 주인공인 개인 서재에 맞게, 과하지 않고 일관된 화면으로 정리했습니다.

    • 강조색 하나: 잉크(중립) 주 버튼으로 통일하고 파랑은 포커스·링크·진행률·선택 표시에만 씁니다.
    • 다크 모드: 페이지·표면·입력의 회색 단계를 정리했습니다. 입력창·선택 칩·태그 틴트는 충분히 밝게 조정했습니다.
    • 공용 컴포넌트: 버튼·입력·탭(segmented)·카드·배지·알림·로딩·빈 상태·모달의 모양과 크기(높이·모서리·글자 크기)를 통일했습니다. 모달은 같은 배경·제목·닫기 버튼을 씁니다.
    • 화면별: 상단 메뉴·홈 툴바(툴바와 갤러리 목록의 왼쪽 선 정렬)·카드·상세 모달·뷰어·설정·로그인·대시보드(삭제가 가장 강조되지 않게)·북마크·차단 관리·계정 보안·운영 관리 전체.
    • 세부 조정: 카테고리 배지 채도를 낮추고 태그와 구분, 모바일 상세 모달에서 태그가 첫 화면에 보이게, 다크 모드 선택 항목 대비 강화, 모바일 메뉴 서버 상태 아이콘 정리.
    • 기능·API·데이터 동작은 바꾸지 않았습니다(위 새 기능 제외).

    인프라

    • Redis 공식 이미지 — 자체 빌드하던 redis 이미지(redis.conf만 추가)를 공식 redis:8.10 태그와 compose 명령 인자로 바꿨습니다. Redis 기본값과 다른 설정 4개(maxmemory 448mb, allkeys-lru, appendonly yes, save 900 1 300 10 60 10000)만 유지합니다. .env 변경은 없고 데이터(data/redis)는 그대로 씁니다. 자체 게시 이미지는 5개(byedpi·nginx·backend·crawler·web)가 됩니다.

    새 사용자 기능이 추가되어 minor 버전입니다. DB 스키마·migration·환경 변수·API 계약 변경은 없습니다.

    이미지 게시 범위

    운영 빌드 입력 지문을 4.2.1 시점 latest와 대조해 web만 새로 빌드하고 4.3.0·latest를 게시했습니다(publish-images.ps1 -ChangedOnly). byedpi·nginx·backend·crawler는 입력이 같아 기존 latest digest를 유지하며 4.3.0 태그를 추가하지 않았습니다. redis는 이제 공식 redis:8.10 이미지를 쓰므로 자체 게시 대상에서 빠졌습니다(레지스트리의 기존 2ex-hentai-redis 이미지는 그대로 둡니다).

    NAS 업데이트

    compose.yml(redis 이미지·명령)이 바뀌었으므로 저장소를 먼저 갱신한 뒤 배포 스크립트를 실행합니다.

    cd /volume1/2ex-hentai
    git pull
    docker login git.2ex.dev
    sh ops/deploy-production.sh
    docker compose --env-file .env.production ps
    
    • deploy-production.sh는 전체 pull을 먼저 마친 뒤 설정·digest가 바뀐 서비스(redis·web)만 교체합니다. .env.production은 그대로 둡니다. NAS가 Docker Hub(redis:8.10)에 접근할 수 있어야 합니다.
    • redis는 같은 data/redis(AOF)를 8.10으로 다시 읽습니다. 개발 환경에서 키 유지와 설정값 동일을 확인했습니다. Watchtower가 켜져 있으면 이후 8.10.x 패치 릴리스가 자동 적용됩니다.
    • 4.2.1의 Silo 전환을 아직 적용하지 않았다면 이번 업데이트에 함께 포함되므로 Silo 운영 전환의 데이터 보존 절차를 먼저 따르세요.
    • 이 릴리스는 변경 서비스에만 버전 태그가 있으므로 IMAGE_TAG로 전체 서비스를 일괄 지정할 수 없습니다.

    4.2.1 대비 전체 변경

    검증

    • Docker run-unit.ps1 -Workspace web 통과(99 suites·689 tests).
    • run-integration.ps1 전체 통과(3a22928d main 기준): API·Backend·crawler runtime·GC·Push·브라우저(북마크 상세 모달 흐름 포함). 2026-09-06 이후 처음으로 전체가 통과해 홈 1440px grid 검사 PARTIAL 상태가 해소됐습니다(기존 실패는 측정 방식 문제).
    • image-search·운영 UI 격리 runner, run-operations.ps1 -DeploymentOnly·-SkipBuild(개발 Redis maxmemory 검사 포함) 통과.
    • 디자인: 23개 화면 × 1440/390px × 라이트/다크 before/after 캡처 비교, 회귀 수정, 주요 색 대비 계산(태그 틴트 5.27:1 이상, 카테고리 배지 6.4:1 이상).
    • 개발 서버에 web 적용 후 정상 동작 확인. 실제 모바일 기기·가상 키보드 확인과 NAS 배포는 실행하지 않았습니다.

    게시 확인

    • 릴리스 소스: 3a22928d9417370bccc6e86479d9c147a87d9d6b (주석 태그 4.3.0).
    • web 4.3.0·latest digest: sha256:9e34ab48609089a58c786aa0c0e66830458ebec634bf6c592379420d643dc495.
    • 이미지 OCI version 4.3.0·revision 3a22928d 확인. byedpi·nginx·backend·crawler는 기존 latest digest 유지·4.3.0 태그 부재 확인.
    Downloads 2
  • 4.2.1 — MinIO를 PGSTY Silo로 교체

    4.2.0 대비 변경사항

    스토리지: MinIO → PGSTY Silo

    • upstream MinIO 커뮤니티판의 유지보수가 끝나(2025-12 유지보수 모드, 2026-02 archive, 2026-09 Docker Hub 저장소 삭제) 기존 이미지 git.2ex.dev/archive/minio:source-7aac2a2c5b7c는 이후 공개된 인증 우회 등 CVE가 패치되지 않는 상태였습니다.
    • minio 서비스를 MinIO fork인 PGSTY Silo docker.io/pgsty/silo:RELEASE.2026-09-16T00-00-00Z(digest 고정)로 교체했습니다. 같은 데이터 형식을 쓰므로 데이터 이전 없이 이미지만 바뀌는 in-place 전환입니다.
    • 서비스 이름 minio, MINIO_* 환경 변수, ./data/minio 볼륨, 포트, healthcheck는 그대로입니다. .env 변경은 필요 없습니다. 앱 코드도 바뀌지 않았습니다.
    • 예전 MinIO를 소스에서 빌드하던 ops/Dockerfile.minio·ops/minio-source.yml을 제거했습니다.

    문서

    • 운영 가이드에 Silo 운영 전환 절차(데이터 보존 → 갱신 → 배포 → 점검 → 롤백)를 추가했습니다.
    • 개발 환경은 이제 git.2ex.dev 레지스트리 로그인 없이 실행할 수 있어 README 빠른 시작에서 해당 단계를 뺐습니다(운영 배포와 이미지 게시는 여전히 필요).

    호환되는 인프라·보안 교체이므로 patch 버전입니다. DB 스키마·migration·환경 변수·API 변경은 없습니다.

    이미지 게시 범위

    backend·crawler·web·nginx·byedpi·redis의 운영 빌드 입력이 4.2.0 latest와 모두 같아 새로 빌드·게시한 이미지가 없습니다(publish-images.ps1 -ChangedOnly 결과 "nothing to build or publish"). 레지스트리 태그는 추가하지 않았고 기존 latest를 그대로 사용합니다. Silo는 Docker Hub의 외부 이미지이며 compose.yml에서 digest로 고정합니다.

    NAS 업데이트

    이번 업데이트는 MinIO 실행 이미지를 바꿉니다. 작업을 멈춘 상태에서 운영 data/minio를 먼저 별도 보존하세요. Silo는 공식적으로 이전 바이너리로의 역방향 교체를 보장하지 않습니다.

    cd /volume1/2ex-hentai
    git pull
    docker login git.2ex.dev
    sh ops/deploy-production.sh
    docker compose --env-file .env.production ps
    
    • NAS가 Docker Hub(docker.io/pgsty/silo)에서 이미지를 받을 수 있어야 합니다.
    • deploy-production.sh는 설정이 바뀐 minio만 교체합니다. .env.production은 그대로 둡니다.
    • 전환 후 minio가 healthy이고 /api/health/ready가 200인지 확인하고, 운영 관리의 orphan audit와 갤러리 목록·썸네일·뷰어를 점검하세요. Silo 서버 로그 시각은 UTC입니다.
    • 세부 절차와 롤백은 Silo 운영 전환을 따릅니다.

    4.2.0 대비 전체 변경

    검증 (개발 환경 PoC, 2026-10-01)

    • 개발 data/minio(2,625객체·353MiB)를 보존한 뒤 같은 볼륨으로 Silo를 기동했습니다. 앱과 같은 SDK로 전체 ListObjectsV2 목록, 객체별 SHA-256, Content-Type·Cache-Control·metadata, S3 오류 이름 12종, 쓰기(Put→Head→Get→Delete)를 기존 이미지 기준선과 비교해 차이 0이었습니다.
    • 롤백 리허설: 원래 이미지로 되돌린 뒤에도 차이 0, 다시 Silo로 전환한 뒤에도 차이 0.
    • Nginx 경유 게스트 브라우저로 갤러리 25개의 API·썸네일·홈 카드·뷰어 첫·마지막 페이지(50장) 표시 통과, 콘솔 오류 0.
    • 격리 run-integration.ps1에서 Silo로 S3 호환 단계(서명 CRUD·metadata·stream·오류·1,003객체 pagination)·API·Backend 통과. 기존 1440px 갤러리 중앙정렬 실패(PARTIAL)에서 중단.
    • run-operations.ps1 -DeploymentOnly, 개발·운영 Compose config --quiet, 추적 Markdown 21개 링크·anchor 오류 0건 통과.
    • 운영 데이터(632GiB·270만 객체)에서의 전환과 NAS 배포는 실행하지 않았습니다.

    게시 확인

    • 릴리스 소스: f107c27c4425263ac96295111ae29357a54ffd84 (주석 태그 4.2.1).
    • 레지스트리: 새 태그 없음. 6개 자체 이미지 모두 기존 latest digest 유지.
    • Silo 이미지: docker.io/pgsty/silo:RELEASE.2026-09-16T00-00-00Z@sha256:635197cb9f36d01bee221d34d1c7d7960f6a95c48b0b6c01d99cd13bdae51a46.
    Downloads 2
  • 4.2.0 — 수집 진행 확인 API, 모바일 메뉴·번역 개선, 백업 도구 정리

    4.1.4 대비 변경사항

    새 기능

    • 수집 진행 확인 API (Uptime Kuma용) — 공개 GET /api/health/crawling을 추가했습니다. 수집 중이면 200, 대기 중이면 503, crawler 상태를 확인할 수 없으면 503과 crawling: null을 반환합니다. 응답에는 crawling·source·jobType·startedAt만 포함합니다. Uptime Kuma HTTP 모니터에서 수집 중일 때 UP으로 표시되며, 대기 상태를 알림으로 받지 않으려면 Upside Down 모드나 Keyword 모니터를 사용하세요(운영 가이드).

    개선·수정

    • 모바일 메뉴 — 서버 상태에 아이콘을 붙이고 외부 링크 아이콘을 글자 바로 옆으로 옮겼습니다. 라이트 모드에서 북마크 별 아이콘이 흰색이라 보이지 않던 문제를 고쳤습니다(대시보드 통계의 북마크 아이콘 포함).
    • 가비지 컬렉션 화면 — 통계 카드와 실행 버튼 사이 간격을 줄였습니다.
    • 태그 번역 — 번역 누락 181개를 재검토해 92개를 번역하고 58개를 원문 유지로 정리했습니다. 31개는 동명 대상 때문에 표기가 갈려 보류했습니다.
    • 기본 전역 블랙리스트 — 새 설치와 기본값 재설정에 쓰는 목록을 현재 운영 설정과 같게 맞췄습니다(태그 141개, 갤러리 411개). 기존 DB의 블랙리스트는 바뀌지 않습니다.
    • 수집 로그 — 대상이 없는 범위 메타데이터 수집이 끝나면 확인한 시작 ID와 마지막 처리 ID를 함께 표시합니다.

    운영 도구

    • 백업 스크립트 제거 — 수동 실행용 ops/backup-production.sh, ops/restore-drill.sh, tests/run-backup-restore.ps1와 운영 감사의 백업 최신성 검사를 제거했습니다. 애플리케이션과 저장소는 백업을 수행하지 않으며, 데이터 보존은 운영자가 별도로 관리합니다(데이터 보존).
    • 운영 감사 — MinIO 사용량 700GiB 경고와 1TiB 중대 판정을 제거했습니다. 볼륨 사용률(82% 경고, 85% 중대) 검사는 유지합니다.

    문서

    • 오늘 변경을 반영해 문서를 다시 정리했습니다. 운영 가이드의 백업과 복구 절은 데이터 보존으로 바뀌었습니다. 문서 색인의 현재 계획에 MinIO 대체(PGSTY Silo in-place 전환 PoC, 조건부 SeaweedFS) 항목을 추가했습니다.

    새 공개 API가 추가되어 minor 버전입니다. DB 스키마·migration·환경 변수 변경은 없고 기존 API와 호환됩니다.

    이미지 게시 범위

    운영 빌드 입력 지문을 4.1.4 시점 latest와 대조해 backend·crawler·web만 새로 빌드하고 4.2.0·latest를 게시했습니다(publish-images.ps1 -ChangedOnly). byedpi·redis·nginx는 입력이 같아 기존 latest digest를 유지하며 4.2.0 태그를 추가하지 않았습니다. log-reader는 backend 이미지를 사용합니다. 전체 stack에는 기본 latest를 사용하세요.

    NAS 업데이트

    운영 스크립트와 문서가 바뀌었으므로 저장소를 먼저 갱신한 뒤 배포 스크립트를 실행합니다.

    cd /volume1/2ex-hentai
    git pull
    docker login git.2ex.dev
    sh ops/deploy-production.sh
    docker compose --env-file .env.production ps
    

    deploy-production.sh는 전체 pull을 먼저 마친 뒤 digest가 바뀐 backend·crawler·web(backend 이미지를 쓰는 log-reader 포함)만 교체합니다. DB migration은 없습니다. 이 릴리스는 변경 서비스에만 버전 태그가 있으므로 IMAGE_TAG로 전체 서비스를 일괄 지정할 수 없습니다.

    4.1.4 대비 전체 변경

    검증

    • Docker run-unit.ps1 -Workspace all 통과(shared lint·build, backend 61 suites·290 tests, crawler 49·371, web 98·675).
    • run-schema.ps1(기본 블랙리스트 seed 포함), run-operations.ps1 -DeploymentOnly, 개발 DB run-translation-coverage.ps1 통과.
    • 개발 stack 재빌드 후 backend·crawler·log-reader 재시작 0회, /api/health/crawling 대기 503 확인, Nginx 경유 390px 모바일 메뉴 확인(관리자 권한은 응답 대체 fixture).
    • 추적 Markdown 21개 로컬 링크·anchor 오류 0건.
    • 실행하지 않은 검증: 수집 중 200 응답의 실제 확인(단위 테스트로만 검증), 가비지 컬렉션 화면 시각 확인, 전체 integration(기존 1440px 갤러리 중앙정렬 PARTIAL 유지), 의존성 감사, NAS 배포.

    게시 확인

    • 릴리스 소스: 8dc63e2f7831bc1d2e01d7d9bac3822cd56bccd9 (주석 태그 4.2.0).
    • 4.2.0·latest digest
      • backend sha256:a0ff6d615403327a2ef4aaefe646867ee2832bda7235db021340d44c1505f748
      • crawler sha256:00c56153c4a3da1f5996d630d47bb48e4e1a9036681f3efd394bebc84fcc1994
      • web sha256:7e1baffa2d25618ea10dc963ec2d361f1c149d6dd50b633f20b6069cd4359bc9
    • 이미지 OCI version 4.2.0·revision 8dc63e2f 확인. byedpi·redis·nginx는 기존 latest digest 유지·4.2.0 태그 부재 확인.
    Downloads 2
  • 4.1.4 — 게스트 읽기 기록 보호, 상단 메뉴 반응형 수정과 전체 정리

    4.1.3 대비 변경사항

    수정

    • 보안: 게스트 읽기 기록 노출 차단 — 로그인하지 않은 요청의 GET /api/galleries/:id/reading-progress·/api/galleries/stats가 사용자 조건 없이 조회되어 다른 사용자의 읽기 기록을 돌려줄 수 있던 문제를 막았습니다. 게스트는 null과 0 통계를 받습니다.
    • 상단 메뉴 줄바꿈 — 창 폭이 좁을 때 관리자 메뉴 글자가 두 줄이 되던 문제를 고쳤습니다. 832px 이하는 햄버거 메뉴, 833px부터 데스크톱 메뉴로 전환합니다.
    • 시스템 다크 테마 — 저장값이 시스템일 때 첫 테마 전환 클릭이 반응하지 않던 문제를 고쳤습니다.
    • 서버 상태 메뉴 — 아이콘 대신 서버 상태 텍스트로 표시하고 외부 링크 표시는 유지했습니다.
    • 인기 태그 — GET /api/tags/popular의 limit을 1~100으로 제한합니다. 잘못된 값은 기본 50으로 처리합니다(이전에는 400).
    • Hitomi 수집 재개 — checkpoint의 구형 필드와 실행 중 호환 추론을 정리하고, 누락된 배치 플래그(batchReady)를 데이터 보존 migration(NormalizeHitomiBatchReady)으로 채웁니다. 기존 큐와 cursor는 보존하며 손상된 플래그의 재개는 차단합니다.
    • 운영 스크립트 — production-audit.sh의 PostgreSQL 설정 검사가 항상 CRITICAL로 판정되던 회귀를 고치고 log-reader 검사를 추가했습니다. backup-production.sh가 셸에 MINIO_BUCKET이 없으면 manifest 단계에서 중단되던 문제를 고쳤습니다. restore-drill.sh 기본 PostgreSQL 이미지를 운영과 같은 18.6으로 맞췄습니다.
    • Nginx — POST /api/crawler/garbage-collection/orphan-audit에 1시간 proxy timeout을 적용했습니다.

    빌드·배포

    • MinIO 자체 이미지 — 공개 이미지 다운로드 차단과 mc 누락 문제로 MinIO를 아카이브 소스에서 빌드한 git.2ex.dev/archive/minio:source-7aac2a2c5b7c(mc 포함)로 전환했습니다. compose.yml·백업·복구 스크립트가 이 이미지를 사용합니다.
    • 변경 서비스만 게시 — ops/publish-images.ps1 -ChangedOnly를 추가했습니다. 이번 릴리스도 이 옵션으로 게시했습니다.

    정리

    • 사용하지 않는 코드와 하위호환 잔재를 정리했습니다: backend·crawler의 미사용 Swagger 데코레이터와 @nestjs/swagger 의존성, 쓰이지 않는 Nest provider export·shared export·web module export, web src/store 별칭과 미사용 CSS, 루트의 중복 개발 의존성.
    • 구현만 따라가던 테스트 assertion을 정리하고, main에서도 실패하던 Hitomi 재개 테스트 fixture를 현재 계약에 맞췄습니다.

    문서

    • README를 소개 중심으로 새로 썼고, 아키텍처·운영 가이드·API 계약·DB 정책·크롤러 복구·테스트 안내·작업 규칙을 현재 코드와 대조해 정정·축약했습니다(약 350KB → 224KB).

    API 응답 형태·DB 스키마 구조·환경 변수 변경은 없습니다. 자동 데이터 보존 migration 1건이 포함되어 있으며 호환되는 수정이므로 patch 버전입니다.

    이미지 게시 범위

    운영 빌드 입력 지문을 4.1.3 시점 latest와 대조해 nginx·backend·crawler·web만 새로 빌드하고 4.1.4·latest를 게시했습니다. byedpi·redis는 입력이 같아 기존 latest digest를 유지하며 4.1.4 태그를 추가하지 않았습니다. log-reader는 backend 이미지를 사용합니다. 전체 stack에는 기본 latest를 사용하세요.

    NAS 업데이트

    compose.yml(MinIO 이미지)과 운영 스크립트가 바뀌었으므로 저장소를 먼저 갱신한 뒤 배포 스크립트를 실행합니다. 백업 후 진행하세요.

    cd /volume1/2ex-hentai
    git pull
    docker login git.2ex.dev
    sh ops/deploy-production.sh
    docker compose --env-file .env.production ps
    

    deploy-production.sh는 전체 pull을 먼저 마친 뒤 digest·설정이 바뀐 서비스(minio·log-reader·backend·crawler·web·nginx)만 순서대로 교체합니다. backend가 시작하면서 NormalizeHitomiBatchReady migration이 자동 적용됩니다. 이미지 rollback은 migration을 되돌리지 않으며, 이 릴리스는 변경 서비스에만 버전 태그가 있으므로 IMAGE_TAG로 전체 서비스를 일괄 지정할 수 없습니다.

    4.1.3 대비 전체 변경

    검증

    • Docker run-unit.ps1 -Workspace all 통과(shared lint·build, backend 59 suites·284 tests, crawler 48·367, web 98·674). 이후 Swagger 정리·버그 수정 뒤 backend 60 suites·286 tests 재확인.
    • run-operations.ps1 -DeploymentOnly 통과(shell-check·deploy-check·release-check, -ChangedOnly 시나리오 4건 포함), shellcheck·nginx -t 통과.
    • 개발 stack 재빌드 후 backend·crawler·log-reader 재시작 0회, /api/health/live·ready 200. Nginx 경유 게스트·일반·관리자 Navigation(832·833·900·1024·1440px) 브라우저 확인 통과(일반·관리자 권한은 응답 대체 fixture). 게스트 진행률 null·통계 0, popular limit 100000→100·abc→50 확인.
    • 추적 Markdown 21개 로컬 링크·anchor 오류 0건.
    • 전체 integration은 기존 1440px 갤러리 중앙정렬 실패로 PARTIAL 상태이며 재통과하지 않았습니다. schema·crawler recovery runner와 NAS 배포는 이번에 실행하지 않았습니다. npm ci가 기존 의존성 감사 항목(moderate 4·high 3)을 보고했으며 이번 릴리스에서 갱신하지 않았습니다.

    게시 확인

    • 릴리스 소스: d52d7712255b4783a8f59992929499bc4d17895b (주석 태그 4.1.4).
    • 4.1.4·latest digest
      • nginx sha256:96dbf538f715d8d8e8dcbee5a931f576d2e64ad80ea9940e6f73c59b2feed5a9
      • backend sha256:b8ca9c459c0e8cece9d182bda8cedc4a40d1f75325a13595d9fa6d1aec625418
      • crawler sha256:1815959aef7e505524037bd65e979d87f4c634e12d7d89964d4048f1a40f6e4a
      • web sha256:a8fab4ab2121ea8706ca318475f702bc004a0f73ce210041a9a1ed090358d36c
    • 이미지 OCI version 4.1.4·revision d52d7712·입력 지문 label 확인. byedpi·redis는 기존 latest digest 유지·4.1.4 태그 부재 확인.
    • 게시 스크립트의 병렬 push가 레지스트리 업로드 연결 종료로 두 번 실패해(latest 승격 전 중단) 같은 이미지를 서비스별로 순차 push한 뒤 latest를 승격했습니다.
    Downloads 2
  • 4.1.3 — 상태 메뉴 위치와 설정창 반응형 개선

    4.1.2 대비 변경사항

    • 서버 상태 링크를 화면 맨 오른쪽에서 페이지 메뉴 끝으로 이동했습니다. 비로그인은 대시보드 옆, 일반 로그인은 차단 관리 옆, 관리자는 운영 관리 옆에 표시됩니다. 모바일 메뉴도 같은 순서를 적용했습니다.
    • 외부 링크 아이콘과 새 탭 열기, noopener noreferrer는 유지했습니다.
    • 설정창의 기존 최대 높이 672px 제한을 없애고 화면 높이의 90%로 자동 조절하도록 개선했습니다. 가로 폭은 유지하고 상하 최소 16px 여백, 고정 제목·닫기 버튼과 본문 스크롤을 제공합니다.

    호환되는 UI 배치 개선이므로 patch 버전입니다. API·DB·환경 설정 변경이나 데이터 migration은 없습니다.

    이미지 게시 범위

    운영 빌드 입력 지문을 이전 게시 이미지와 대조해 web만 새로 빌드하고 4.1.3·latest를 게시했습니다. backend·crawler·byedpi·redis·nginx는 기존 latest digest와 태그를 유지하며 4.1.3 태그를 추가하지 않습니다. 전체 stack에는 기본 latest를 사용합니다.

    검증

    • Docker Compose 운영 web production build·TypeScript 검사 통과.
    • 상태 메뉴: 게스트·일반 사용자·관리자 및 360·390·791·792·1024·1440px에서 순서·겹침·가로 overflow·새 탭·console 검증 통과(API 및 외부 목적지 fixture).
    • 설정창: 966×1219·1440×900·1024×600·390×844·844×390·320×280에서 가로 폭 유지·열린 상태의 높이 변경·여백·내부 스크롤·고정 header·닫기·console 검증 통과(API fixture).
    • 개발·운영 Compose 구성과 diff 검사 통과. 이미 통과한 화면 검증은 재사용했습니다.
    • MinIO 다운로드 차단으로 화면은 격리 Docker web 환경에서 검증했습니다. 전체 integration은 재실행하지 않았고 기존 PARTIAL 상태를 유지합니다. NAS 배포는 수행하지 않았습니다.

    NAS에서 web만 업데이트

    MinIO 이미지는 이번 릴리스에 포함하지 않았으며 Quay 다운로드 문제는 해결되지 않았습니다. 변경된 web만 적용하려면 다음을 실행합니다.

    docker compose pull web
    docker compose up -d --no-deps --pull never web
    docker compose ps web
    

    4.1.2 대비 전체 변경

    게시 확인

    • 릴리스 소스: 3a1ac732f9d64e0555ded3b33dabca8d2d26a30b (주석 태그 4.1.3).
    • web 4.1.3·latest digest: sha256:cdda29015cf10ffdc6a95b4d77d672c0c7bf4a1f6911ae5647c0dd412808996d.
    • 원격 태그 peeled commit, 이미지 OCI version/revision·입력 지문 일치 확인. 다른 5개 서비스의 기존 digest 유지·4.1.3 태그 부재 확인.
    Downloads 2
  • 4.1.2 — 서버 상태 페이지 바로가기

    4.1.1 대비 변경사항

    • 상단 메뉴 맨 오른쪽에 서버 상태 페이지 바로가기를 추가했습니다.
    • 버튼 오른쪽 아래의 네모에서 나가는 화살표로 외부 페이지 이동을 표시합니다.
    • 클릭하면 https://status.2ex.cloud/status/hentai 를 새 탭으로 열고 기존 화면은 유지합니다. noopener noreferrer를 적용했습니다.
    • 모바일과 데스크톱 모두 같은 버튼을 제공하며, 툴팁과 접근성 이름으로 새 창 이동을 안내합니다.

    기존 기능·API·DB·환경 설정과 호환되는 탐색 UI 개선이므로 patch 버전으로 올렸습니다. DB migration이나 수동 데이터 전환은 필요하지 않습니다.

    레지스트리 게시 범위

    6개 서비스의 운영 빌드 입력 지문을 이전 게시 이미지와 비교했습니다.

    서비스 4.1.2 게시
    web 변경된 입력으로 운영 이미지 빌드, 4.1.2와 latest 게시
    backend·crawler·byedpi·redis·nginx 기존 태그·latest digest 유지, 새 버전 태그 추가 없음

    전체 stack은 기존처럼 기본 latest를 사용합니다. 전체 stack에 IMAGE_TAG=4.1.2를 지정하지 않습니다. PostgreSQL·MinIO upstream 이미지와 Forgejo 자동 workflow 비활성 상태는 그대로입니다.

    검증

    • Docker Compose web production build와 TypeScript 검사 통과.
    • 게스트·관리자 API fixture로 360·390·791·792·1024·1440px 메뉴 배치, 가로 overflow·겹침·console 오류 부재 확인.
    • 외부 목적지 fixture로 새 탭 URL, window.opener 분리, 기존 화면 유지 확인.
    • 개발·운영 Compose 구성 및 Git diff 검사 통과. 이미 통과한 UI 검증은 재사용했습니다.
    • 개발 stack 시작은 MinIO registry의 401 응답으로 실패해 격리 Docker web으로 화면을 확인했습니다. 실제 외부 상태 페이지 응답과 NAS 배포는 확인하지 않았습니다.
    • 전체 integration은 재실행하지 않았으며 기존 PARTIAL 상태를 유지합니다.

    이전 버전과 전체 변경 비교

    게시 확인

    • 릴리스 소스: 28da9d2f3dbbace445e94f8ff0ee6ba254a3407b (주석 태그 4.1.2).
    • web 4.1.2·latest digest: sha256:8b493b860a0e7c0ecb7d750c0680c5f3d9616655d32c3960d1fbdba33bf84794.
    • 원격 Git 태그 peeled commit, 이미지 OCI version/revision·입력 지문을 대조했습니다. 다른 5개 서비스는 기존 digest 유지 및 4.1.2 태그 부재를 확인했습니다.
    Downloads 2
  • 4.1.1 — Hitomi WebP 수집 및 로그 기본값 수정

    4.1.0 대비 변경사항

    기존 API·데이터·운영 설정과 호환되는 오류 수정으로 patch 버전 4.1.1을 게시합니다. DB migration이나 초기화는 필요하지 않습니다.

    • Hitomi WebP 수집 오류 수정: AVIF가 없고 haswebp 필드가 생략된 작품도 공식 뷰어처럼 WebP로 수집합니다. 작품 4211220에서 반복되던 UnsupportedHitomiImageError를 해결했으며, 명시적 미지원 형식의 실패 처리와 체크포인트 보존은 유지합니다.
    • 실시간 로그 기본 선택 변경: 패널을 처음 열거나 필터를 초기화하면 crawler만 선택됩니다. 다른 컨테이너의 개별 선택과 전체 선택은 유지합니다.

    검증

    • crawler lint·타입 검사·관련 Jest 25건, web lint·타입 검사·관련 Jest 7건 통과.
    • 실제 Hitomi AVIF direct·WebP proxy 전송, 기존 WebP 전용 작품과 4211220의 18페이지 경로 해석·첫 페이지 다운로드/디코딩(2040×2880) 확인.
    • 1440/320px 운영 UI 브라우저 fixture에서 기본 선택·다중 선택·overflow·console 검사 통과.
    • 개발 crawler/web 재빌드·healthy와 Compose 구성 검사 통과. 기존 변경별 검증 결과를 재사용했습니다.
    • 전체 integration은 기존 PARTIAL 상태를 유지합니다. 전체 작품 저장·체크포인트 재개 실행·NAS 배포는 이번 릴리스에서 실행하지 않았습니다.

    이미지 게시 범위

    운영 빌드 입력 지문이 바뀐 crawler·web만 4.1.1과 latest로 빌드·게시했습니다. 두 태그의 원격 digest, OCI version/revision, 빌드 입력 지문을 검증했습니다.

    서비스 4.1.1 / latest digest
    crawler sha256:1e756f12caae987f328ab3616ad7104ff9df1963900c625fcf93314bcdc968f3
    web sha256:a67a487d31582aff2adef0efed93389ef65f6f4894f94c6fbb7bc525703002d3

    backend·byedpi·redis·nginx는 기존 latest digest를 유지하며 4.1.1 태그를 추가하지 않았습니다. log-reader는 기존 backend 이미지를 계속 사용합니다. 전체 stack은 기본 latest를 사용하며 IMAGE_TAG=4.1.1을 일괄 지정하지 않습니다. 4.1.0에서 도입한 log-reader/네트워크 구성이 아직 없다면 운영 가이드의 전환 절차가 먼저 필요합니다.

    릴리스 소스: 0fae6c73536999fed74099d8e3d3ee5f722e6f36

    4.1.0 이후 전체 변경 비교

    Downloads 2
  • 4.1.0 — 운영 로그 확장과 수집·색인 안정화

    4.0.1 이후 컨테이너 로그 선택 기능을 추가하고 수집·저장·색인 안정성을 개선한 호환 가능한 minor 릴리스입니다.

    주요 변경

    • 운영 로그: crawler·backend·PostgreSQL·Redis·Nginx 로그를 다중 선택하거나 전체 조회할 수 있습니다. 일부 조회 실패 표시, 민감 정보 마스킹과 진행 로그를 보강했습니다.
    • 이미지 색인: 수동 색인을 최대 5장 병렬 처리하고 진행률·누계·재개 처리를 개선했습니다. 작품 제목과 반복 안내를 정리하고 색인 실행 중 통계 표시를 바로잡았습니다.
    • 수집 안정성: Hitomi 재시도·복구와 E-Hentai checkpoint·재개·보호 처리를 보강했습니다.
    • 데이터 일관성: 저장 실패 시 부분 반영, 캐시 누락, 전역 차단 규칙과 작품 상태 사이의 불일치를 방지하도록 트랜잭션·잠금 경계를 개선했습니다.
    • 태그: 미번역 사전을 확장하고 공식 한국어 근거가 확인된 명칭을 교정했습니다. 최초 전역 블랙리스트 기본값을 제공된 최신 136개 목록과 동기화했습니다. 기존 설치 설정을 변경하는 migration은 없습니다.
    • UI·정리: 중복 검사 화면의 배치·유사도 표시를 개선하고 사용하지 않는 구형 판정 코드를 제거했습니다. 문서 소유 범위와 운영·검증 안내를 정리했습니다.

    게시 이미지와 운영 반영

    • 빌드 입력 지문이 변경된 backend, crawler, web만 4.1.0과 latest로 게시했습니다.
    • byedpi, redis, nginx는 기존 latest digest를 유지하며 4.1.0 별칭도 추가하지 않습니다. 전체 stack은 기본 latest를 사용해야 합니다.
    • 로그 조회용 log-reader는 backend 이미지를 재사용합니다. 운영 저장소의 compose.yml과 ops/deploy-production.sh를 함께 갱신한 뒤 순차 배포해야 합니다. Watchtower 이미지 갱신만으로 새 서비스와 내부 네트워크가 생성되지는 않습니다.
    • 기존 데이터는 유지하며 별도 DB migration은 없습니다. 이번 게시 작업에서 NAS 운영 배포는 수행하지 않았습니다.

    검증 범위

    • 변경별 Docker Compose 단위·타입·lint·실제 PostgreSQL 경계 검증과 수집 복구 검증은 저장소의 완료 이력에 기록된 결과를 재사용했습니다.
    • 최종 UI 변경은 개발 web 재빌드와 1440/320px 이미지 검색·운영 화면 브라우저 검증을 통과했습니다(API fixture).
    • 운영 환경으로 변경 이미지 3종을 빌드하고 게시 후 버전/latest digest, OCI revision·입력 지문을 확인했습니다.
    • 전체 integration은 기존 홈 카드 정렬 검사 실패로 PARTIAL입니다. 이후 전체 브라우저 회귀, 실제 NAS 색인 처리량·원본 판정 정확도, 운영 배포는 미검증입니다.

    전체 변경 비교

    게시 검증

    소스 커밋: aa0d4eca73 (원격 주석 태그의 peeled commit 일치).

    이미지 4.1.0 / latest digest
    backend sha256:2600bf3105d54d14dd0bea0e3acbcb2392eae78dc1df3a5a414788c22ff28e33
    crawler sha256:d58cdbaf9d42068df74183348ba322c1e9dfcf5d0acfa696bb45fa9aef156746
    web sha256:f4dd3bedeeb0bd8cc5990847bbb726842445e2c4880649b378bb1fadc68bbb75
    Downloads 2