• 5.19.0

    5.19.0 주요 변경사항

    화면(web)

    • 뷰어 모드 아이콘을 페이지=세로 네모, 두 페이지=펼친 책, 웹툰=가로 줄로 바꾸고 설정의 기본 뷰어 모드에도 같은 아이콘을 보입니다.
    • 대시보드 읽기 기록의 페이지 이동이 홈과 같은 번호 pager(« ‹ 1 2 3 … › »)로 바뀌고 페이지를 바꾸면 목록 맨 위로 이동합니다.
    • 북마크 갤러리 탭과 모아보기 탭의 끝에 홈과 같은 총 N개 · 끝 표시를 둡니다(새로고침 오류 중에는 숨김).

    런타임·의존성

    • backend·crawler·web 이미지가 Node 26(26.12.1, Alpine 3.24)으로 올라갑니다. 10월 21일 Node 보안 수정(Brotli 디코더 RCE, TLS 호스트명 검증 우회, keep-alive desync 등)을 포함합니다.
    • next 16.4.2(critical RCE 2건·DoS 1건 수정), react 19.3.1, NestJS 12.2.0, express 5.3.0, lucide-react 1.61, eslint 10.13, @aws-sdk/client-s3 3.1155 등 patch·minor 갱신. TypeScript 7·ioredis 6·npm 12는 보류.
    • MinIO(Silo) 이미지가 RELEASE.2026-10-18T00-00-00Z로 올라가고 태그만 고정합니다(digest 없음). nginx는 mainline-alpine-slim(1.31.7) 태그만 고정하며 게시 때 upstream digest를 지문에 넣어 바뀐 경우에만 다시 빌드합니다.

    새 기능과 런타임 교체가 섞였고 API·schema·환경 키 변경은 없어 minor 5.19.0으로 게시합니다.

    이미지 게시 범위

    • 새로 빌드(5.19.0·latest): backend·crawler·web(Node 26.12.1 base, 라이브러리 갱신), nginx(mainline-alpine-slim 1.31.7, 게시 때 지문에 넣은 upstream digest로 바인딩), byedpi(지문 규칙 변경으로 1회 재빌드, 내용 변화 없음). 다섯 서비스 모두 새 digest입니다.
    • -ChangedOnly 게시였지만 지문 계산 규칙 자체가 바뀌어 이번에는 다섯 서비스가 모두 "변경"으로 판정됐습니다. 다음 릴리스부터는 입력이 바뀐 서비스만 다시 빌드됩니다.
    • 다섯 이미지 모두 5.19.0 태그가 있으므로 IMAGE_TAG=5.19.0으로 일괄 고정할 수 있습니다.

    NAS 업데이트와 주의사항

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

    • schema 변경 없음, Compose 변경 있음: compose.yml의 minio 이미지가 Silo 2026-10-18로 바뀝니다. 반영 SQL은 없습니다.
    • Silo 업그레이드: MinIO 이미지 절차대로 수집·GC·색인·썸네일을 멈춘 뒤 data/minio를 보존하고 minio를 재생성합니다. Silo는 역방향 교체를 지원하지 않으므로 되돌릴 때는 보존본을 복원합니다. 2026-10-18 릴리스는 Object Lock·IAM 권한 검사가 엄격해졌고 503 SlowDownWrite를 재시도 대상으로 돌려줍니다(앱의 S3 SDK가 재시도).
    • backend·crawler·web(+log-reader)·nginx·byedpi 다섯 이미지가 모두 교체됩니다(Node 26 base와 지문 규칙 변경).
    • 배포 전 레지스트리에 다섯 서비스의 latest가 모두 있는지 확인합니다.
    • rollback: 다섯 서비스 모두 5.19.0 태그가 있으므로 앱 이미지는 IMAGE_TAG=5.19.0으로 고정할 수 있고, 이전 상태는 IMAGE_TAG=5.18.0(web·backend)과 5.17.2(crawler·nginx·byedpi) 조합입니다. minio는 보존본 복원이 필요합니다.

    5.18.0 대비 전체 변경

    검증

    • 릴리스 commit 9c2597c6(앱 코드는 main c549f80b와 같은 tree): 개발 stack 전체 재빌드 뒤(backend·crawler·web Node v26.12.1, nginx 1.31.7 slim, Silo 2026-10-18 healthy) run-unit.ps1 -Workspace all 통과(backend 88·crawler 72·web 155 suites), run-integration.ps1 통과(api·browser), run-passkey.ps1 통과(등록·인증·재사용 거절·backend 재시작 복원).
    • 업그레이드 브랜치(같은 Dockerfile·ops·lockfile)에서 run-operations.ps1 -DeploymentOnly(실제 slim nginx, 모의 게시의 nginx-base-moved·mid-publish 시나리오 포함)·run-compose-compat.ps1·ops/update-base-images.ps1·npm ls 단일 버전 확인·npm audit 0건(root prod/all, integration api·browser, passkey) 통과.
    • web 변경 3건은 각각 Sol(gpt-6.1-sol) 독립 리뷰(P2 2건 반영: 북마크 새로고침 오류 중 끝 표시 숨김, nginx 지문-빌드 digest 바인딩). 문서 링크·anchor 검사 0건, Compose config(dev·prod)·git diff --check 통과.
    • NOT RUN: run-schema.ps1(schema 변경 없음), crawler-recovery·network runner, 실기기 수동 확인.

    게시 확인

    • 릴리스 소스: 9c2597c6 (annotated Git 태그 5.19.0 대상).
    • backend 5.19.0·latest(Node 26, APP_VERSION=5.19.0): sha256:b4eb4c0e6f8a3e0896dea2eac994dc5682ddc6b43da75d5b79e71b741b308e02
    • crawler 5.19.0·latest(Node 26): sha256:7258b2561247f44e1ef0d1e5b2749259e906537f3f9eae25caeac71b86766c49
    • web 5.19.0·latest(Node 26, next 16.4.2): sha256:40cf54016aeedea4cd087c3d2eb402038c63bcb95df4a295b20c9e45367e96d8
    • nginx 5.19.0·latest(mainline-alpine-slim 1.31.7): sha256:a5b16f88ea2444cf1c7bfcdc9c2c2fe11f7452cef255ce10f55bf9b2565d1fc7
    • byedpi 5.19.0·latest(재빌드, 내용 동일): sha256:3346e1a4ad585965ea3cc68984a8f8e37f707a7cdceb036c6e299e4dea15e1cd
    • ops/publish-images.ps1 -Version 5.19.0 -Publish -ChangedOnly 첫 실행은 버전 태그 push 중 프록시 연결 종료(use of closed network connection)로 byedpi만 올라간 채 실패했습니다. 로컬에 빌드된 backend·crawler·web·nginx 5.19.0을 docker push로 올린 뒤 -PromoteOnly -ChangedOnly -ServiceNames byedpi,nginx,backend,crawler,web로 latest를 승격했고(Registry tags verified for 5.19.0.), docker manifest inspect로 다섯 latest·5.19.0을 다시 확인했습니다.
    Downloads 2