-
hanyul released this
2026-10-02 10:29:59 +09:00 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
ImageLedgerIntegritymigration이 운영 규모에서 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는 입력이 같아 기존latestdigest를 유지하며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(Keywordready)를 권장합니다. viewer 페이지 주소는 web이 HTML만 돌려줘 backend 장애를 잡지 못합니다. - 이 릴리스는 변경 서비스에만 버전 태그가 있으므로
IMAGE_TAG로 전체 서비스를 일괄 지정할 수 없습니다.
검증
- 게시 소스 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·revision1a7960d4확인. nginx(1bb060b0)·byedpi(15ac60ab)는 기존latest유지·4.5.0태그 부재 확인.
Downloads 2
-
Source code (zip)
0
2026-10-02 10:29:59 +09:00 -
Source code (tar.gz)
0
2026-10-02 10:29:59 +09:00