API 변경 과정은 어떻게 되나요?

일정 기간 동안 여러 Discourse 사이트를 운영해 왔고, Discourse의 API와 직접 상호작용하는 여러 스크립트를 보유하고 있습니다. 업그레이드 이후 주기적으로 기능이 갑자기 작동하지 않는 경우가 발생하며, 즉시 감지할 수 있는 문제라면 괜찮지만, 시간이 좀 지나서야 문제가 드러나면 원인을 파악하기가 어려워지고, 개발 인스턴스 대신 프로덕션 환경에서 문제가 발생하는 경우가 많습니다.

예를 들면: Recurring events in Upcoming Events calendar fail to handle daylight saving change

최근에 include_expired 옵션이 제거되었는데, 불행히도 캘린더 API에서 만료되지 않은 이벤트만 반환되도록 하는 동작은 제가 의존하고 있던 것이었습니다. 이로 인해 업그레이드 후 상당한 시간이 지난 후에 여러 프로세스가 오류를 일으켰습니다. 이 특정 사례의 경우, 이제 제거된 매개변수를 지정하는 호출자가 있었다면 적어도 제 스크립트에서는 문제가 즉시 중단되었을 것입니다. :slight_smile:

따라서 제가 궁금한 것은 Discourse의 다운스트림 사용자로서, 이러한 API 변경 사항이 제 인스턴스에 영향을 주기 전에 어떻게 식별할 수 있는지에 대한 것입니다. 이전에는 이러한 문제를 피하기 위해 discourse-calendar 저장소를 미러링하고 제 시간대로 덜 자주 업그레이드하는 방법을 사용했습니다. 하지만 이제 통합이 이루어졌기 때문에 그 접근 방식을 중단했는데, 다시 같은 문제에 부딪히고 있습니다.

Discourse가 지속적으로 겪고 있는 노력과 개선 사항에 감사드립니다. 답변이 "엔터프라이즈에 가입하면 이런 일이 덜 발생합니다"이거나 "귀사 측에서 더 많은 테스트를 추가하십시오

저도 비슷한 종류의 오류를 겪었지만, 다른 접근 방식을 선택했습니다. 캘린더 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) 최소한 경고하기를 여전히 원합니다). 그러나 스크립트가 조용히 깨지는 위험성은 크게 줄였습니다.

플러그인을 통해 직접 API 엔드포인트를 구현하는 것은 그렇게 어렵지 않습니다. 그러면 업데이트 전에 스테이징 사이트에서 실행할 수 있는 RSpec 방식의 테스트 스위트를 사용할 수 있습니다.