• 5.15.0

    5.15.0 주요 변경사항

    화면·사용 흐름(web·backend)

    • 홈 목록을 유동 2열 이상 grid로 바꾸고 카드에 작가·카테고리·쪽수 메타 줄, 읽는 중 표지의 p.N/M 배지, namespace 색 태그 칩(5줄 scroll)과 +N 표시를 두었습니다. 북마크 갤러리·모아보기도 같은 grid를 씁니다.
    • 북마크 화면에 전체 북마크 파일 내보내기·불러오기(형식 검사, page 단위 내보내기, 묶음 불러오기, guest 병합)를 추가했습니다.
    • 고급 검색의 태그 선택 방식을 AND·OR 버튼으로 표시하고 쪽수·게시일 범위를 넓은 패널에서 나란히 배치했습니다. 홈 툴바 보기 방식은 segmented로 묶였고 연속·페이지 선택 면이 옮겨 가는 움직임을 갖습니다.
    • 뷰어의 핀치·더블탭 줌을 초점 기준으로 바꾸고 팬을 경계 안에 묶었으며, 터치 탭은 좌·우 넘김과 가운데 조작 막대 토글로 나뉩니다. 진행률 막대는 transform으로 움직입니다.
    • 상세 modal 정보 순서를 작가·쪽수·읽던 위치 중심으로 재배치했고, 북마크 별은 누르는 즉시 바뀌며 실패하면 되돌립니다. 개인 차단 태그 삭제에 되돌리기와 목록 검색, 패스키 삭제에 확인 dialog를 추가했습니다.
    • 한국어 폰트 스택·타입 단계·모션 토큰·maskable 아이콘·상태 표시줄 색을 공용 레시피로 정리하고 본문 건너뛰기 링크, 설정 radio group의 키보드 이동 등 접근성을 보강했습니다.
    • Hitomi 전체 크롤링에서도 수집 기록 무시 토글을 쓸 수 있고 범위 상한이 없어졌습니다. 갤러리 상세의 중복 검사 아이콘을 검색·대조 의미의 아이콘으로 바꿨습니다.

    개발 서버 로그인(backend·web·Compose)

    • DEV_LOGIN_ENABLED=true인 개발 서버에서만 로그인 창에 사용자·운영자 즉시 로그인 버튼과 전용 endpoint가 생깁니다. 기본값 false이며 AUTH_COOKIE_SECURE=true면 무시됩니다. compose.yml이 backend에 이 키를 전달하고 .env.example에 키가 추가됐습니다. 운영 .env.production에는 넣지 않거나 false로 둡니다.

    schema·내부 정리(backend·crawler·shared·sql)

    • fresh schema에서 reading_status enum을 unread·reading·completed로 좁히고 reading_progress.status 단독 index, tags의 쓰지 않는 description·"galleryCount" 컬럼을 없앴으며 image_thumbnails.storage_path를 collation "C"로 고정했습니다. backend schema verifier가 두 경로 컬럼의 collation과 key 범위 index 사용을 단언합니다.
    • backend·crawler의 graceful shutdown, entity enum·상태 값, 설정·crawler 상태 응답 타입, 작가 namespace 판정과 검색 조건 상한을 shared 한 곳으로 통일했고, backend가 raw SQL로만 쓰던 entity 등록·crawler 전용 entity 사본·orphan audit 호환 분기를 제거했습니다. 중복 검사 매칭은 min-cost max-flow로 같은 결과를 내며 duplicate_groups 포함 관계 CHECK 식을 backend·fresh schema와 맞췄습니다.
    • MinIO bucket은 backend·crawler 모두 시작 시 확인하고 없으면 만들며(앱별 계정이면 backend는 생성 불가), ops/production-audit.sh는 운영 디렉터리 기준으로 실행 위치를 안내합니다. .dockerignore의 쓸모없는 항목과 비활성 Forgejo workflow 파일을 지웠습니다.

    문서·검증 자산

    • README를 소개·실제 화면 캡처·4줄 빠른 시작 중심으로 다시 썼고, 캡처는 합성 데이터로 재현하는 tests/compose/readme-capture.yml이 만듭니다. docs/완료_이력.md를 없애고 검증 기록은 커밋 메시지, 릴리스 결과는 Forgejo 릴리스, 남은 운영 조치는 문서 색인 현재 계획이 맡습니다. 설계·운영 문서 전반을 코드와 대조해 바로잡았습니다.
    • passkey runner는 실행 중인 개발 stack의 Compose project 이름을 읽고, 통합 runner는 api-test 조기 종료 시 로그를 출력합니다.

    새 기능·새 환경 키가 더해지고 기존 데이터는 유지되므로 minor 5.15.0으로 게시합니다. schema 변경은 기존 설치에 수동 SQL(아래)로 반영합니다.

    이미지 게시 범위

    • 새로 빌드(5.15.0·latest): backend·crawler·web. shared(gallery-policy.ts·설정·crawler 상태 타입·중복 비교·schema verifier)가 바뀌어 세 앱의 빌드 입력이 달라졌고, backend는 개발 로그인·북마크 내보내기·상세 응답 필드·graceful shutdown, crawler는 Hitomi 전체 크롤링 토글·entity 통일·bucket 확인, web은 UI/UX 개편 전반이 바뀌었습니다.
    • byedpi: 소스는 5.4.0 이후 변경이 없으나 추적 입력 fingerprint가 latest 이미지의 기록과 달라 다시 빌드·게시했습니다(동일 Dockerfile·alpine:3.24 digest).
    • digest 재사용: nginx(5.10.0 digest). 빌드 입력이 같아 기존 digest에 5.15.0·latest 태그만 붙였습니다.
    • 다섯 이미지 모두 5.15.0 태그가 있으므로 IMAGE_TAG=5.15.0으로 고정할 수 있습니다.

    NAS 업데이트와 주의사항

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

    • Compose·환경 키: compose.yml이 backend에 DEV_LOGIN_ENABLED(기본 false)를 전달합니다. 운영 .env.production에는 키를 두지 않거나 false로 둡니다. 그 밖의 Compose·Dockerfile 변경은 없습니다.
    • 기존 설치 schema 반영(필수): 새 backend를 배포한 뒤 다음 릴리스 반영 SQL 16단계를 실행합니다. 13단계(reading_status enum 축소·index 삭제)는 새 backend 배포 뒤에만 실행하고 실행 뒤에는 5.14.0 backend로 되돌리지 않습니다. 4~6단계(tags 컬럼 삭제, 썸네일 경로 collation)는 배포 순서와 무관합니다.
    • backend와 web은 함께 배포합니다(상세 modal·북마크·고급 검색 응답 필드가 함께 바뀜). crawler 교체 시 실행 중인 수집 job은 checkpoint에서 멈추고 새 crawler가 재개합니다(E-Hentai job은 운영 화면에서 수동 재개).
    • migrations·typeorm_metadata·crawl_attempts 테이블 삭제는 선택 정리이며 5.13.0 이하로 되돌릴 가능성이 없을 때만 실행합니다.
    • rollback: 5.14.0 이미지는 다섯 서비스 모두 레지스트리에 있어 반영 SQL 1~3단계 실행 전까지는 IMAGE_TAG=5.14.0으로 되돌릴 수 있습니다. 실행 뒤에는 되돌리지 않습니다.

    5.14.0 대비 전체 변경

    검증

    • 각 작업 브랜치(UI/UX 4개 라운드·정리·문서·DB 후속)에서 run-unit.ps1 -Workspace all, run-integration.ps1, run-schema.ps1과 변경 영역의 격리 검증(이미지 검색·운영 UI·북마크 UI·passkey·README 캡처)이 통과했고, 모든 브랜치는 gpt-6.1-sol 읽기 전용 리뷰(P1·P2 지적은 수정 후 재검)를 거쳤습니다. 검증 기록은 각 커밋 메시지에 있습니다.
    • 병합 main d51a4b94(릴리스 commit 1ba8a132와 앱 코드 동일): run-schema.ps1, run-unit.ps1 -Workspace all, run-integration.ps1, run-operations.ps1 -DeploymentOnly, run-compose-compat.ps1(세 조합, -OldRef 7b6e1e1c) 통과, update-base-images.ps1 기반 이미지 digest drift 없음. 운영 DB 읽기 전용 점검으로 tags 미사용 컬럼이 모두 NULL/0, reading_progress에 dropped·on_hold 없음, images.storagePath가 이미 collation "C"임을 확인했습니다.
    • NOT RUN: Hitomi·E-Hentai network runner(네트워크 경로 변경 없음), 실브라우저 수동 확인, 운영 규모의 storedBytes 집계·이미지 검색 p95 실측.

    게시 확인

    • 릴리스 소스: 1ba8a132 (annotated Git 태그 5.15.0 대상, 앱 코드는 d51a4b94와 같음).
    • backend 5.15.0·latest(새 빌드): sha256:21c0fed8f7ec8cb41d84ed1eeb72aa57631b979503372e65f2da3ac2110e10f8
    • crawler 5.15.0·latest(새 빌드): sha256:079b3055a55013dd5f4deeed642bbf0261deb575390fcda8939001fd3773b6f5
    • web 5.15.0·latest(새 빌드): sha256:e54d84c7814e6e9316ea4e57549686d36cd244da97f3b25a7d8643613a5815b3
    • nginx 5.15.0·latest(5.10.0 digest 재사용): sha256:552b18eddb10c22b7dbfaee60a6e1bacd20f8b004892c8209f3b48f508c3a780
    • byedpi 5.15.0·latest(새 빌드): sha256:bc1a69ccfe5f0fc8185b43bd3ca4802a7f1f0bfd1487a141b7f052958d26dcc4
    • ops/publish-images.ps1 -Version 5.15.0 -Publish 첫 실행이 backend·crawler·web 푸시 중 레지스트리 TLS 오류(bad record MAC)로 멈춰(byedpi 5.15.0만 게시됨) 빌드된 이미지를 docker push로 다시 올리고 nginx는 imagetools create로 태그를 붙인 뒤 -PromoteOnly -ServiceNames byedpi,nginx,backend,crawler,web으로 latest를 승격했습니다. 다섯 서비스의 5.15.0·latest 일치를 확인했습니다(Registry tags verified for 5.15.0.).
    Downloads 2