8000 [bug] /api/dtryx/seats 가 간헐적으로 실패하고 전 극장 실패 시 503 이 됩니다 · Issue #187 · hmmhmmhm/daiso-mcp · GitHub
[go: up one dir, main page]

Skip to content

[bug] /api/dtryx/seats 가 간헐적으로 실패하고 전 극장 실패 시 503 이 됩니다 #187

Closed

Description

@bgmbgm94

요약

/api/dtryx/seats 가 디트릭스 업스트림 호출에 간헐적으로 실패합니다. 같은 극장을 몇 초 간격으로 조회해도 성공과 실패가 번갈아 나옵니다. 재시도가 없어 한 번의 실패가 그대로 결과 누락으로 이어지고, 조회 대상 극장이 모두 실패하면 요청 전체가 503 이 됩니다.

같은 시각에 디트릭스 업스트림을 직접 호출하면 0.03~0.06 초에 정상 응답하므로, 업스트림 장애보다는 배포 환경에서 나가는 호출 쪽 문제로 보입니다.

재현 절차

  1. 단일 극장을 몇 초 간격으로 반복 조회합니다.

    daiso get /api/dtryx/seats --cinemaCode 000072 --playDate 20260917 --json
  2. 지역 단위로 조회합니다.

    daiso get /api/dtryx/seats --region 서울 --playDate 20260917 --json

기대 동작

업스트림이 정상 응답하는 동안에는 조회도 안정적으로 성공해야 합니다. 일시적인 실패가 있더라도 한 번의 실패로 해당 극장 결과가 통째로 빠지지 않으면 좋겠습니다.

실제 동작

같은 요청이 성공과 실패를 오갑니다. 라이카시네마(000072) 를 2 초 간격으로 3 회 조회한 결과입니다.

시도1 → 200 OK
시도2 → 503 DTRYX_SEATS_FAILED
시도3 → 200 OK

극장·브랜드·회차 수와 상관이 없습니다. 2026-09-17 21:09 KST 에 서울 7 개관을 하나씩 조회하고, 같은 시각 업스트림 직접 호출 결과와 나란히 둔 것입니다.

극장 CinemaCd BrandCd 업스트림 회차 /api/dtryx/seats
아트하우스모모 000067 indieart 0 200
아리랑시네센터 000088 etc 0 200
낭만극장 000113 etc 0 200
더숲아트시네마 000065 indieart 0 503
에무시네마 000069 indieart 0 503
허리우드클래식 000115 etc 0 503
라이카시네마 000072 spacedog 1 503

회차 0 인 극장이 양쪽에 다 있고, 회차가 있는 라이카시네마가 실패합니다. 브랜드도 섞여 있습니다.

전 극장이 실패하면 지역 조회 전체가 503 이 됩니다. 같은 날 21:00 경에는 서울 7 개관, 경기 3 개관이 모두 실패해 아래처럼 응답했습니다.

GET /api/dtryx/seats?region=서울&playDate=20260917
→ 503 DTRYX_SEATS_FAILED
  "모든 극장 조회에 실패했습니다: 더숲아트시네마, 아트하우스모모, 에무시네마,
   라이카시네마, 아리랑시네센터, 낭만극장, 허리우드클래식"

21:05 이후로는 대체로 회복되어 실패 극장이 0~1 곳으로 줄었습니다. 시간대에 따라 실패율이 크게 달라집니다.

같은 시각 업스트림은 정상입니다. 로컬에서 동일 파라미터로 직접 호출한 응답 시간입니다.

에무시네마      0.06s   아리랑시네센터  0.05s
라이카시네마    0.03s   헤이리시네마    0.04s
더숲아트시네마  0.04s   자유로자동차극장 0.03s
→ 6/6 성공

/api/dtryx/movies 는 같은 상황에서 원인을 그대로 노출합니다. seats 는 극장별 실패를 failedCinemas 로 모아 놓기 때문에 이 메시지가 보이지 않습니다.

GET /api/dtryx/movies?cinemaCode=000069
→ 500 DTRYX_NOW_SHOWING_FAILED  "디트릭스 API 호출 시간 초과"

환경 정보

  • daiso CLI: v1.2.1
  • 엔드포인트: https://mcp.aka.page (daiso health 는 ok)
  • 확인 시각: 2026-09-17 20:59 ~ 21:10 KST
  • /api/dtryx/cinemas 는 외부 호출이 없어 항상 정상입니다. seats 와 movies 만 영향을 받습니다.

검토해 본 가능성

원인을 좁히려고 확인한 것들입니다. 모두 해당하지 않아 보여 같이 남깁니다.

  • 동시성: 극장 1 곳만 조회해도 실패합니다. 지역 조회의 병렬 호출 때문은 아닙니다.
  • 업스트림 지연: 직접 호출이 0.03~0.06 초로 일정합니다.
  • 빈 응답 처리: 회차 0 인 극장이 성공하기도 실패하기도 합니다.
  • 엣지 캐시: 쿼리를 바꿔 캐시 키를 우회해도 결과가 같습니다.
  • 특정 브랜드/극장: indieart, etc, spacedog 모두에서 발생합니다.

api.dtryx.com 이 비표준 포트 :30443 을 쓰는 점이 배포 환경과 관련이 있을지 궁금합니다. 다만 대부분의 시간대에는 정상 동작하므로 포트가 막혀 있다고 보기는 어려워, 확신하지는 못했습니다.

제안

원인 파악과 별개로 완화할 수 있는 부분이 있어 보입니다.

  • 멱등 GET 이므로 극장별 호출에 짧은 재시도를 한 번 두면 간헐 실패가 대부분 흡수될 것 같습니다. 업스트림이 0.05 초 수준이라 비용도 크지 않습니다.
  • 전 극장 실패 시 503 대신, 200 과 함께 failedCinemas 로 돌려주는 선택지도 있을 것 같습니다. 부분 실패와 전체 실패가 다른 형태로 나오다 보니 호출 쪽에서 분기가 갈립니다.

필요하시면 재시도 쪽으로 PR 준비해 보겠습니다.

Activity

  1. bgmbgm94 commented on Sep 21, 2026

    @bgmbgm94
    ContributorAuthor

    2026-09-21 09:2x KST 에 다시 측정했습니다. 증상이 이어지고 있고, 처음 제보 때보다 실패가 잦아졌습니다.

    배포본 경유와 로컬 직접 호출을 같은 시간대에 나눠 재어 봤습니다. 대상은 라이카시네마(spacedog / 000072) 한 곳으로 고정했습니다.

    경로 결과
    GET /api/dtryx/seats?cinemaCode=000072 (mcp.aka.page) 3/10
    로컬에서 https://api.dtryx.com 직접 10/10
    로컬에서 https://api.dtryx.com:30443 직접 10/10
    배포본 경유 10 회: ❌❌❌❌❌❌✅❌✅✅
    

    참고로 2026-09-17 저녁에 같은 방식으로 쟀을 때는 7/10 이었습니다. 시간대에 따라 실패율이 크게 움직입니다.

    로컬에서는 두 포트 모두 실패가 없어서, 업스트림 자체보다는 배포 환경에서 나가는 호출 쪽 문제로 보입니다. 다만 이건 관측이고 인과를 확인한 것은 아닙니다.

    앞서 적었던 가능성들은 그대로 해당하지 않습니다. 극장을 한 곳만 지정해도 실패하고(동시성 아님), 업스트림 응답은 0.03~0.06 초로 일정하며(지연 아님), 회차 0 인 극장이 성공하기도 실패하기도 합니다(빈 응답 처리 아님).

    원인으로 추정한 부분에 대해 #188 로 변경을 올려 두었습니다. 디트릭스만 비표준 포트(:30443)를 쓰고 있었는데 같은 호스트의 표준 포트에서도 응답이 동일해서, 표준 포트로 바꾸는 내용입니다. 다만 로컬에서 재현이 되지 않아 그 변경이 이 문제를 해결하는지는 저도 확인하지 못했습니다. 배포하신 뒤에 실패가 줄어드는지 봐 주시면 좋겠습니다.

  2. hmmhmmhm commented on Oct 6, 2026

    @hmmhmmhm
    Owner

    디트릭스에 중계 경로와 자동 경로 선택을 적용했습니다(#235). 제보하신 라이카시네마 3회와 서울 7개관 조회에서 실패 없이 정상 응답을 확인했습니다. 상세히 확인해 주셔서 감사합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      0