• 5.16.0

    5.16.0 주요 변경사항

    Turnstile 선택 설정(backend·web·ops)

    • TURNSTILE_SITE_KEY·TURNSTILE_SECRET_KEY를 모두 비우면 backend가 시작 경고만 남기고 로봇 검증을 끕니다(가입·로그인 options는 token 없이 통과, guest viewer grant는 최초 검증 없이 trust). 한쪽 키만 채우면 설정 실수로 보고 시작하지 않으며, 공개 host에 Cloudflare test key를 쓰는 것은 그대로 거절합니다. 쓰지 않던 TURNSTILE_DISABLED 분기를 제거했습니다.
    • ops/publish-images.ps1은 빈 site key를 경고로 허용하고 placeholder·test key만 거절합니다. .env.example·README·운영 가이드·설계·API 계약 문서가 선택 설정 기준으로 바뀌었습니다. 운영 .env.production은 키가 있어 동작 변화가 없습니다.

    화면(web)

    • 홈 보기 방식(연속·페이지)에만 있던 "선택 면이 칸 사이를 옮겨 가는" 효과를 SegmentedIndicator로 일반화해 단일 선택 묶음 전체(북마크 종류, 읽기 상태·읽기 기록 상태 필터, 고급 검색 AND·OR·태그 분류·게시일 범위, 설정 radio group, 수집 모드, 중복 상태 필터, 뷰어 보기 모드)에 적용했습니다. 다중 선택 묶음(카테고리·로그 필터)은 제외했습니다.
    • 뷰어 자동 숨김이 본문 scroll 방향을 봅니다. wheel·터치·키 입력 직후 위로 24px 이상 올리면 숨긴 조작 막대가 다시 보이고, 아래로 48px 이상 이어서 내리면 바로 숨깁니다. 이미지 로드 보정 같은 programmatic scroll에는 반응하지 않습니다.

    태그 번역(shared)

    • 2026-10-21 운영 미번역 내보내기 67개를 사용자 결정으로 모두 처리했습니다. character 49·parody 1은 운영 갤러리 제목으로 대상을 특정한 공식·통용 표기(원신 리사·모나, LoL 루시안·모르가나, 포켓몬 벨·란·라이치, 스트리트 파이터 영문명 교차 마이크 바이슨·발로그, 니케 츠바이, 트릭컬 가비아·마요, 마도정병의 슬레이브 등) 또는 통용 음역이고, tag namespace의 작가·서클 인명 17개는 원문 유지 목록에 넣었습니다. 근거는 apps/web/src/lib/__fixtures__/missing-tag-translations-2026-10-21.json이 보존합니다.

    수집(crawler)

    • E-Hentai 수집이 byedpi sidecar 재시작·배포로 SOCKS 연결이 거절돼 멈추면 원문(Socks5 proxy rejected connection - HostUnreachable) 대신 DPI 우회 proxy 단절 사정과 관리자 재개 안내를 적고 원문을 괄호에 남깁니다. 일반 네트워크 코드는 뜻(코드)을 붙입니다.

    그 밖

    • compose 호환 검증 기준 commit을 5.15.0으로 갱신하고, 5.15.0 반영 SQL 절 이름과 현재 계획을 운영 배포 완료 상태로 정리했습니다.

    Turnstile 선택 설정과 화면·번역 기능이 더해지고 schema·Compose·환경 키 추가는 없으므로 minor 5.16.0으로 게시합니다.

    이미지 게시 범위

    • 새로 빌드(5.16.0·latest): backend·crawler·web. shared(translations/)가 바뀌어 세 앱의 빌드 입력이 달라졌고, backend는 Turnstile 선택 설정, crawler는 E-Hentai 실패 문구, web은 선택 면 이동·뷰어 scroll 복귀·Turnstile 문서가 바뀌었습니다.
    • digest 재사용: nginx(5.10.0 digest), byedpi(5.15.0 digest). 빌드 입력이 같아 기존 digest에 5.16.0·latest 태그만 붙였습니다.
    • 다섯 이미지 모두 5.16.0 태그가 있으므로 IMAGE_TAG=5.16.0으로 고정할 수 있습니다.

    NAS 업데이트와 주의사항

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

    • schema·Compose 변경 없음: 반영 SQL이 없고 compose.yml·Dockerfile 변경이 없습니다. .env.example은 Turnstile 주석만 바뀌었고 운영 환경 파일은 바꾸지 않습니다.
    • backend와 web은 함께 배포합니다(Turnstile 켜고 끄는 상태는 두 이미지가 같아야 함. 운영은 둘 다 켜진 상태 유지). crawler 교체 시 실행 중인 수집 job은 checkpoint에서 멈추고 관리자 재개가 필요합니다. 배포 스크립트가 byedpi를 먼저 교체하므로 실행 중인 E-Hentai job은 proxy 단절 문구(이번 릴리스부터 한국어 안내)로 멈출 수 있습니다.
    • rollback: 5.15.0 이미지가 다섯 서비스 모두 레지스트리에 있고 schema 변경이 없어 IMAGE_TAG=5.15.0으로 되돌릴 수 있습니다.

    5.15.0 대비 전체 변경

    검증

    • 각 변경 커밋에서 run-unit.ps1(backend·web·all)과 Turnstile 키를 비운 일회성 backend 기동 확인이 통과했고 검증 기록은 커밋 메시지에 있습니다. 미번역 태그 67개는 운영 DB 읽기 전용 조회로 갤러리 제목을 확인해 대상을 특정했습니다.
    • 릴리스 commit c95fd519(앱 코드는 31dd94f0과 같음): run-unit.ps1 -Workspace all(backend 87·crawler 72·web 154 suites), run-integration.ps1, run-operations.ps1 -DeploymentOnly 통과, update-base-images.ps1 기반 이미지 digest drift 없음.
    • NOT RUN: run-schema.ps1·run-compose-compat.ps1(schema·Compose 변경 없음), Hitomi·E-Hentai network runner, run-translation-coverage.ps1(개발 DB에 해당 태그 없음), 실브라우저에서 선택 면 이동·scroll 복귀 시각 확인.

    게시 확인

    • 릴리스 소스: c95fd519 (annotated Git 태그 5.16.0 대상, 앱 코드는 31dd94f0과 같음).
    • backend 5.16.0·latest(새 빌드): sha256:ffbd6e0b77e96e7007730db9e3e37694d52e6098eb5bb41b8e74e7a73a2b096b
    • crawler 5.16.0·latest(새 빌드): sha256:4086f6744ca4461d0d3863c1626979bac7e8aae748274c95f3a51fd88a698add
    • web 5.16.0·latest(새 빌드): sha256:4c790c7d8ce27ad1cbba2fee50177a38034e0204e77fc32892be22a01238534d
    • nginx 5.16.0·latest(5.10.0 digest 재사용): sha256:552b18eddb10c22b7dbfaee60a6e1bacd20f8b004892c8209f3b48f508c3a780
    • byedpi 5.16.0·latest(5.15.0 digest 재사용): sha256:bc1a69ccfe5f0fc8185b43bd3ca4802a7f1f0bfd1487a141b7f052958d26dcc4
    • ops/publish-images.ps1 -Version 5.16.0 -Publish가 첫 실행에서 완료됐고 다섯 서비스의 5.16.0·latest 일치를 확인했습니다(Registry tags verified for 5.16.0.).
    Downloads 2