2026-05-12 인수창고 웹툰/만화 병렬 staging 레인 전환
2026-05-12 11:02 KST 기준, 기존 직렬 run_staging_queue_pipeline.sh 부모 프로세스를 중지하고 웹툰/만화 병렬 staging 레인으로 전환했다. 기존 웹툰 AVIF 프로세스 1944672는 계속 실행 중이었고, 병렬 레인은 /init 아래 별도 세션에서 실행되도록 setsid로 띄웠다.
기본값은 처음에 LANE_BATCH_SIZE=5, WEBTOON_IMAGE_CONCURRENCY=2, MANGA_IMAGE_CONCURRENCY=2, AVIF_CONCURRENCY=1, TRANSFER_MAX_ITEMS=10으로 시작했다. 이후 2026-05-12 17:21 KST부터 IO 적응형 프로파일러를 적용했다.
prepare_staging_media_queue.py는 comic_manifest.json 또는 comic_metadata.json의 collection_status가 collecting, partial, disk_full, complete_with_failures인 staging 폴더를 완료 항목으로 취급하지 않도록 수정했다. 따라서 중간에 실패한 staging 작품은 다음 큐에 다시 들어갈 수 있다.
2026-05-12 15:38 KST 진행 확인#
웹툰 기존 AVIF는 완료됐다. 최종 상태는 converted=45283, skippedLarger=4, skippedTooLargeForHeif=78, failed=0이었다. 이후 웹툰 완료분 10작품이 ZaraServer F:로 전송됐다. 만화 첫 5개 배치는 4개 정상 수집, 1개 회차 없음으로 실패 처리됐다.
12:57 KST에 병렬 레인이 종료된 것을 확인했다. 기존 스크립트는 INT/TERM/EXIT 모두 cleanup만 호출해 종료 신호 종류를 기록하지 않았기 때문에 정확한 송신자는 확인할 수 없다. 다만 lane exited rc=... 내부 재시작 로그가 없고 OOM/disk-full/source Traceback 흔적도 없어, 수집기 실패보다는 부모 bash가 외부 종료 신호를 받은 패턴에 가깝다.
15:38 KST에 재기동했고, 15:48 KST에 watch_parallel_staging_lanes.sh watchdog을 추가 실행했다. 이후 스크립트는 종료 시 reason=signal:TERM, reason=signal:INT, reason=wait-complete 형태로 기록하도록 보강했다.
2026-05-12 17:21 KST IO 적응형 프로파일#
tools/adaptive_staging_profile.py를 추가하고 run_parallel_staging_lanes.sh가 각 레인 사이클 시작 전에 이 프로파일을 읽도록 수정했다. 프로파일러는 WSL /proc/pressure/io, /proc/meminfo, Windows LogicalDisk(D/E/F/H) % Disk Time/queue를 보고 low, balanced, high 중 하나를 선택한다.
현재 판정은 E: ZaraStudio가 바쁘고 F: ZaraServer 및 WSL IO가 낮은 상태라 balanced다. 적용값은 LANE_BATCH_SIZE=10, TRANSFER_MAX_ITEMS=20, WEBTOON_TITLE_CONCURRENCY=2, WEBTOON_IMAGE_CONCURRENCY=3, MANGA_IMAGE_CONCURRENCY=3, MANGA_REQUEST_SLEEP=0.35, AVIF_CONCURRENCY=2다. 실제 17:21 KST 배치부터 웹툰/만화 큐가 각각 10개로 생성되고 웹툰 수집 --batch-size 2 --image-concurrency 3, 만화 수집 --limit 10 --image-concurrency 3으로 실행되는 것을 확인했다.
2026-05-12 18:21 웹툰 이미지 목록 재시도 단축#
최근 7일 로그에서 이미지 목록 준비 안 됨 이후 성공 사례는 있었지만, 누적 실패 로그의 image_list_retry_exceeded가 475건으로 커서 6회 검증 대기가 전체 수집 속도를 잡아먹는 패턴으로 판단했다. tools/run_parallel_staging_lanes.sh와 tools/watch_parallel_staging_lanes.sh에 WEBTOON_IMAGE_LIST_RETRIES, WEBTOON_IMAGE_LIST_RETRY_MAX_SLEEP, WEBTOON_IMAGE_LIST_RETRY_BACKOFF 환경변수를 추가하고 기본값을 각각 2, 6, 1.2로 설정했다. 다음 병렬 staging 배치부터 기본 소스 이미지 목록 검증은 짧게 시도한 뒤 tkor114 폴백으로 넘어가며, 실패는 기존 failed_episodes.jsonl/skip manifest에 남긴다. ordered_webtoon_collector.py는 재시도 후 성공 시 이미지 목록 확인됨(...), 재시도 N회 후 성공을 출력하도록 보강했다. 현재 실행 중인 웹툰 수집 프로세스는 기존 --max-image-list-retries 6 인자로 시작되어 해당 배치만 예전 정책이고, 새 watchdog PID 2242206 이후 시작되는 배치부터 변경값이 적용된다.
2026-05-12 19:37 watchdog 복구 및 idle 재시작 예약#
19:34 KST 상태 확인에서 웹툰 수집은 정상 진행 중이었으나 기존 run_parallel_staging_lanes.sh 부모 PID 2193868이 패치 전 인스턴스로 계속 살아 있어 18:57 웹툰 배치도 --max-image-list-retries 6으로 시작된 것을 확인했다. 현재 배치를 중단하지 않기 위해 tools/restart_parallel_lanes_when_idle.sh를 추가하고 PID 2349542로 실행했다. 이 스크립트는 웹툰/만화 수집, AVIF, 전송, manifest sync, queue prepare 작업이 모두 없는 안정 구간을 확인한 뒤 old lane PID 2193868에 TERM을 보내도록 대기한다. 기존 watchdog PID 파일은 stale이어서 watchdog을 재시작했고 새 PID는 2350372다. 다음 safe gap 이후 watchdog이 패치된 병렬 레인을 다시 올리면 웹툰 이미지 목록 재시도 단축 설정(WEBTOON_IMAGE_LIST_RETRIES=2)이 실제 실행 인자에 반영된다.
Sagwan Revalidation 2026-05-13T02:49:22Z#
- verdict:
refresh - note: 실행 상태·현재 판정 등 시간 의존 정보가 많아 최신 상태 재확인이 필요함
Sagwan Revalidation 2026-05-14T03:23:23Z#
- verdict:
refresh - note: 운영 상태·프로파일 판정이 시간 의존적이라 최신 로그 반영 가치가 큼
Sagwan Revalidation 2026-05-15T03:52:16Z#
- verdict:
refresh - note: 런타임 PID·전송·IO 판정이 시점 의존이라 최신 상태 재확인이 필요함
Sagwan Revalidation 2026-05-16T04:18:13Z#
- verdict:
ok - note: 최근 검증 이후 변동 근거 없고 역사적 운영 기록으로 재사용 가능.
Sagwan Revalidation 2026-05-17T04:37:40Z#
- verdict:
refresh - note: 실행 상태·프로파일·전송 진행값은 하루 사이 변했을 가능성이 큼
Sagwan Revalidation 2026-05-18T04:59:35Z#
- verdict:
ok - note: 하루 새 기술·수치·권장안 변화 징후가 없어 재사용 가능함
Sagwan Revalidation 2026-05-19T05:28:03Z#
- verdict:
ok - note: dated 운영 기록으로, 공개 내용상 최신성과 재사용성 문제는 보이지 않음
Sagwan Revalidation 2026-05-20T05:49:57Z#
- verdict:
ok - note: 시점 한정 운영 기록이며 기술·수치 주장에 새 모순 없음
Sagwan Revalidation 2026-05-21T05:56:04Z#
- verdict:
ok - note: 운영 이력 기록이며 최근 변경·모순·낡은 권장안 징후 없음
Sagwan Revalidation 2026-05-22T06:17:28Z#
- verdict:
ok - note: 운영 이력 기록으로 최근 재검증 이후 변경 필요 근거가 없다.
Sagwan Revalidation 2026-05-23T06:50:34Z#
- verdict:
ok - note: 전일 검증 이후 반증 없고, 병렬 레인 전환 이력으로 재사용 가능함
Sagwan Revalidation 2026-05-24T07:12:13Z#
- verdict:
ok - note: [chatgpt 오류] The read operation timed out
Sagwan Revalidation 2026-05-25T07:38:40Z#
- verdict:
ok - note: 전일 검증 이후 사실·권장안·기술 관행의 변동 근거가 없다.
2026-05-26 웹툰 최신화 및 본수집 복구#
2026-05-26 KST 점검에서 웹툰 일일 업데이트는 F: ZaraServer 최종 루트에 정상 저장되고 있었지만, run_webtoon_daily_update_once.sh가 CATALOG_REFRESH_EXISTING_ONLY=1로 카탈로그를 갱신해 새 회차 수가 웹 카탈로그에 반영되지 않는 문제가 확인됐다. refresh_catalogs.js는 중복 제목/ID가 있을 때 더 많은 episode를 가진 항목으로 교체하도록 수정했고, CATALOG_REFRESH_MEDIA=webtoon 모드를 추가해 웹툰 업데이트 후 웹툰 카탈로그만 F 루트까지 스캔하게 했다. 검증값: S급 나무로 레벨업 167 -> 188, 상류 사회 76 -> 81, 무련전봉 1944 -> 1962, 병아리반 헌터는 효도 중! 67 -> 71이 catalog.json과 인증 API 2회차 응답에 반영됐다.
같은 점검에서 인기순 웹툰 본수집 큐가 화 링크 없음으로 빠지던 원인은 소스 TSV의 절대 URL이 https://hdhd503.net/webtoon/...으로 고정되어 있었고 병렬 본수집은 일반 python3/aiohttp로 실행되어 현재 동작하는 hdhd505 접속을 제대로 하지 못했기 때문이었다. ordered_webtoon_collector.py는 /webtoon/ 경로 URL을 현재 --base-url로 재작성하도록 수정했고, run_parallel_staging_lanes.sh는 웹툰 수집 시 .venv-browserfetch/bin/python과 HDHD_BROWSER_FETCH=1을 기본 사용하도록 바꿨다. 이후 새벽의 소네트가 총 29화, 1화부터 수집으로 진행되고 ep_001~ep_003 manifest가 staging에 생성되는 것을 확인했다.
부하 완화 수정도 함께 적용했다. convert_webtoon_images_to_avif.js는 ./_로 시작하는 폴더와 .tmp 폴더를 스킵하게 해 _aborted_wrong_daily_update_... 같은 보류 폴더 인코딩 낭비를 막았다. prepare_staging_media_queue.py에는 --category webtoon|manga|all 옵션을 추가했고, 병렬 레인은 해당 카테고리 큐만 만들도록 바꿔 웹툰 전용 레인이 만화 루트까지 훑는 문제를 줄였다. 2026-05-26 10:50 KST 기준 웹툰 전용 레인은 hdhd505/browser fetch로 정상 수집 중이며, IO pressure는 avg10 0.00 수준으로 낮았다.
Sagwan Revalidation 2026-05-26T08:21:22Z#
- verdict:
ok - note: 날짜가 명시된 운영 기록이며 병렬 레인/IO 적응형 내용도 여전히 유효.
Sagwan Revalidation 2026-05-27T08:57:38Z#
- verdict:
ok - note: 전일 검증 이후 새로 낡을 만한 주장·권장안 변화가 확인되지 않음
Sagwan Revalidation 2026-05-28T09:03:15Z#
- verdict:
ok - note: 운영 이력과 절차가 최근 검증 이후 바뀔 근거 없이 재사용 가능.
Sagwan Revalidation 2026-05-29T09:41:14Z#
- verdict:
ok - note: 전날 검증 이후 새로 낡을 주장·수치·권장안 변화가 보이지 않는다.
Sagwan Revalidation 2026-05-30T09:47:19Z#
- verdict:
ok - note: 전일 검증 이후 바뀔 외부 의존·권장안이 보이지 않아 유지 가능.
Sagwan Revalidation 2026-05-31T10:20:42Z#
- verdict:
ok - note: 과거 전환 기록으로 최신 관행 의존이 낮고 이전 검증 이후 변동 근거 없음
Sagwan Revalidation 2026-06-01T14:10:03Z#
- verdict:
ok - note: 최근 검증 후 변동 근거 없고, 내용은 과거 전환 기록으로 재사용 가능.
Sagwan Revalidation 2026-06-02T19:11:03Z#
- verdict:
ok - note: 전일 검증 이후 변경 징후 없고 역사적 전환 기록으로 여전히 재사용 가능
Sagwan Revalidation 2026-06-03T20:11:59Z#
- verdict:
ok - note: 전일 검증 이후 새 변동 징후나 명백한 모순이 없어 재사용 가능.
Sagwan Revalidation 2026-06-04T20:20:28Z#
- verdict:
ok - note: 전일 검증 이후 새 반증 없고, 역사적 운영 기록으로 재사용 가능함
Sagwan Revalidation 2026-06-05T20:36:36Z#
- verdict:
ok - note: 전일 검증 이후 바뀔 만한 주장·수치·권장안 변화가 보이지 않음