저도 비슷한 종류의 오류를 겪었지만, 다른 접근 방식을 선택했습니다. 캘린더 API 엔드포인트를 직접 호출하는 대신, 내 가져오기(importer) 도구가 [event] BBCode를 생성하여 Discourse에 게시합니다. 그러면 플러그인이 스태프 사용자가 수동으로 이벤트를 생성한 것처럼 이를 파싱합니다. 이렇게 하면 include_expired와 같은 일시적인 쿼리 파라미터에 의존하는 문제를 피할 수 있고, 더 안정적인 계약(plain posts and BBCode)을 얻을 수 있습니다. 이러한 형식이 사전 통보 없이 변경될 가능성은 낮기 때문입니다.
[event start="2025-09-29 09:00" end="2025-10-29 10:00" location="Office B1"]
Meet to discuss Discourse RESTful API
[/event]
이 방식의 트레이드오프는 제 쪽에서 더 많은 노력이 필요하다는 점입니다. ICS 데이터를 올바르게 이스케이프된 [event] 태그로 변환하는 포맷터를 작성해야 했으며, 종일 이벤트와 시간 지정 이벤트를 처리하는 등 다양한 사항을 다뤄야 했습니다. 하지만 실제 운영에서는 이 방식이 업그레이드 과정에서 훨씬 더 견고했습니다. 이는 업스트림의 비추천(deprecation) 공지 필요성을 완전히 제거하지는 못합니다(옵션이 제거될 때 API가 빠르게 실패하거나(fail fast) 최소한 경고하기를 여전히 원합니다). 그러나 스크립트가 조용히 깨지는 위험성은 크게 줄였습니다.