8000 fix: 디트릭스 호출을 표준 포트로 변경 by bgmbgm94 · Pull Request #188 · hmmhmmhm/daiso-mcp · GitHub
[go: up one dir, main page]

Skip to content

fix: 디트릭스 호출을 표준 포트로 변경 - #188

Merged
hmmhmmhm merged 3 commits into
hmmhmmhm:mainfrom
bgmbgm94:fix/dtryx-standard-port
Sep 28, 2026
Merged

hmmhmmhm merged 3 commits into
hmmhmmhm:mainfrom
bgmbgm94:fix/dtryx-standard-port

Conversation

@bgmbgm94
@bgmbgm94 bgmbgm94 commented Sep 18, 2026 •
Copy link
Copy Markdown
Contributor

변경 요약

관련 이슈

체크리스트

  • npm run format:check 통과
  • npm run lint 통과
  • npm run typecheck 통과
  • npm test 통과
  • 필요 시 문서(README/CONTRIBUTING) 업데이트
  • 민감 정보(API 키/토큰/개인정보) 미포함 확인

문서에는 포트가 노출되지 않아 수정할 부분이 없었습니다.

먼저 밝혀둘 점

이 변경이 #187 을 해결한다는 것을 저는 검증하지 못했습니다.

증상이 배포된 Worker 에서만 나타나고, 제 로컬에서는 두 포트 모두 문제가 없어 재현이 되지 않습니다. 22 개 극장을 전수로 3 회 반복했을 때 표준 포트 66/66, :30443 도 66/66 이었습니다. 추가한 테스트도 포트가 들어오는 것을 막는 가드일 뿐, 수정의 효과를 증명하지는 못합니다. CI 통과 역시 같은 의미입니다.

효과 확인은 배포 후에만 가능합니다. 배포하시면 /api/dtryx/seats 를 몇 차례 반복 조회해 실패가 줄었는지 봐 주시면 좋겠습니다. 변화가 없으면 되돌리셔도 부담 없는 크기의 변경입니다.

근거

응답이 동일합니다. 세 엔드포인트 모두 Recordset 이 일치했습니다.

엔드포인트 :30443 표준 포트 결과
third-party-type2-timetable-list 0.04s / 0건 0.03s / 0건 동일
third-party-type2-timetable-play-date-list 0.04s / 22건 0.04s / 22건 동일
third-party-type2-movie-now 0.08s / 18건 0.08s / 18건 동일

TLS 인증서(*.dtryx.com, DigiCert), 응답 헤더(Server: Microsoft-HTTPAPI/2.0), DNS(단일 IP) 가 두 포트에서 같습니다. 같은 서버의 다른 리스너로 보입니다.

:30443 은 디트릭스의 공통 규격이 아닌 것으로 보입니다. 이 주소는 디트릭스를 처음 붙일 때 아트하우스모모 예매 페이지에 적혀 있던 값을 그대로 옮긴 것입니다. 다른 극장 페이지도 확인해 봤습니다. 도메인을 찾지 못해 접속하지 못한 곳이 있어 전수는 아닙니다.

확인한 곳 api.dtryx.com 참조
아트하우스모모 :30443 5 회
라이카시네마 없음
오오극장 없음
전주디지털독립영화관 없음
dtryx.com (본사) 없음 (www · img · help 서브도메인만)

BASE_URL 은 서비스 전체가 공유하므로 이 포트는 특정 극장이 아니라 22 개 극장 조회 전부에 적용됩니다. #187 에서 실패가 극장·브랜드·회차와 무관하게 흩어진 것도, 개별 극장이 아니라 공통 전송 경로 쪽을 가리키는 것으로 봤습니다.

비표준 포트를 쓰는 서비스는 디트릭스뿐이었습니다. git log -S":30443" 로 확인했을 때 이 저장소 전체 이력에서 비표준 포트가 들어온 것은 디트릭스를 추가한 커밋이 처음이자 유일했습니다.

서비스 BASE_URL
lottecinema https://www.lottecinema.co.kr
megabox https://www.megabox.co.kr
cgv https://api.cgv.co.kr
dtryx https://api.dtryx.com:30443 ← 이번에 변경

Cloudflare Workers 의 커스텀 포트 동작은 compatibility date 에 따라 갈립니다. 이 저장소는 compatibility_date = "2025-01-23" 이라 2024-09-02 이후 기준이 적용되고, 커스텀 포트가 무시되지 않고 그대로 사용됩니다. Cloudflare 측에서도 workerd#2955 코멘트로 확인해 준 내용입니다. 그 이전에는 커스텀 포트가 조용히 무시되어 443 으로 나갔고(cloudflare-docs#5998), 이 동작이 런타임과 Cloudflare 시스템 간 상호작용의 결과라는 설명과 함께 내부 티켓으로 남아 있습니다(workers-sdk#1320).

즉 지금 설정에서는 Worker 가 실제로 :30443 으로 나가고 있습니다. 다만 여기까지가 정황이고, 왜 간헐적으로만 실패하는지에 대한 인과는 확인하지 못했습니다. 업스트림 쪽에서 비표준 포트 리스너의 처리가 다를 가능성도 배제하지 못합니다.

확인해 본 다른 가능성

#187 에 적은 것과 같습니다. 모두 해당하지 않았습니다.

  • 동시성: 극장 1 곳만 조회해도 실패합니다.
  • 업스트림 지연: 직접 호출이 0.03~0.06 초로 일정합니다.
  • 빈 응답 처리: 회차 0 인 극장이 성공하기도 실패하기도 합니다.
  • 엣지 캐시: 쿼리를 바꿔 캐시 키를 우회해도 같습니다.
  • 특정 브랜드/극장: indieart, etc, spacedog 모두에서 발생합니다.
  • 포트별 앞단 차이: TLS·헤더·DNS 가 동일합니다.

테스트 방법

npm run check

tests/services/dtryx/api.test.ts 에 다섯 건을 추가했습니다.

  • 엔드포인트 상수에 포트가 없고 https 를 쓰는지 확인합니다.
  • 클라이언트가 실제로 만드는 요청 URL 세 종류에 포트가 없는지 확인합니다. 상수만 보면 조립 과정에서 포트가 끼어드는 경우를 놓칩니다.

api.ts 의 포트를 되돌려 넣으면 다섯 건 모두 실패하는 것을 확인했습니다.

참고로 Windows 환경에서는 tests/relay/*, tests/scripts/relay-* 가 기존부터 실패하며 실행마다 9~11 건 사이로 변동합니다. 이 브랜치 이전 커밋에서도 같은 파일이 실패하며 이번 변경과는 무관합니다.

남는 부분

  • 이 변경으로 빈도가 줄더라도 간헐 실패 자체를 없애지는 못할 수 있습니다. [bug] /api/dtryx/seats 가 간헐적으로 실패하고 전 극장 실패 시 503 이 됩니다 #187 에 적은 재시도 쪽은 이번 PR 과 분리해 두었습니다. 필요하시면 이어서 준비하겠습니다.
  • 전 서비스의 엔드포인트 상수를 한꺼번에 확인하는 방향도 생각해 봤습니다. 다만 URL 이 api.ts 밖(client.ts, location.ts 등)에도 흩어져 있어 상수만 보는 확인은 전수가 되지 못하고, 비표준 포트를 앞으로도 쓰지 않겠다는 것은 정책 판단이라 이번 PR 에서는 넣지 않았습니다. 필요하다고 보시면 scripts/quality/check-source-line-limit.ts 처럼 소스를 직접 훑는 검사로 별도 준비하겠습니다.
  • 디트릭스를 처음 붙일 때 아트하우스모모 한 곳의 예매 페이지에 적혀 있던 주소를 그대로 옮긴 것이 원인이었습니다. 다른 극장 페이지나 다른 영화관 서비스의 BASE_URL 과 나란히 놓고 보기만 했어도 알 수 있었습니다. 늦게 찾아 죄송합니다.

🤖 Generated with Claude Code

@bgmbgm94
bgmbgm94 requested a review from hmmhmmhm as a code owner September 18, 2026 11:50
배포 환경에서 `/api/dtryx/seats` 와 `/api/dtryx/movies` 가 간헐적으로
실패하는 문제(hmmhmmhm#187)를 줄이려는 변경입니다.

극장 홈페이지에 적힌 `api.dtryx.com:30443` 을 그대로 쓰고 있었는데,
같은 호스트의 표준 포트에서도 동일한 응답을 받습니다. 세 엔드포인트
(timetable-list, play-date-list, movie-now) 모두 Recordset 이 일치하고
TLS 인증서·응답 헤더·DNS 도 같습니다.

이 저장소의 compatibility_date 기준에서는 Cloudflare Workers 가 커스텀
포트를 무시하지 않고 그대로 사용합니다. 영화관 서비스 중 비표준 포트를
쓰는 곳은 디트릭스뿐이었습니다.

포트가 다시 들어오지 않도록 상수와 클라이언트 요청 URL 양쪽에 확인을
추가했습니다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@hmmhmmhm
hmmhmmhm merged commit 00f9903 into hmmhmmhm:main Sep 28, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

0