2023년 11월 - Discovery 라우트 리팩토링: 내 테마/플러그인에 어떤 영향이 있을까요?

최신 Ember 버전으로 Discourse를 업그레이드하는 프로젝트의 일환으로, Discovery(즉, ‘토픽 목록’) 라우트에 대한 대규모 리팩터링 작업을 진행해 왔습니다.

이 토픽은 테마/플러그인 개발자를 대상으로 하며, 리팩터링에 영향을 받을 수 있는 테마/플러그인 활동의 종류를 나열하는 것을 목표로 합니다.

배경

이 리팩터링은 최신 Ember가 {{outlet "topics"}}와 같은 '명명된 아웃렛(named outlets)'을 더 이상 지원하지 않기 때문에 필요합니다. 우리는 이 라우트에서 이를 광범위하게 사용해 왔습니다. 기본적으로, 이전에 명명된 아웃렛으로 렌더링되던 모든 컨트롤러/템플릿은 이제 컴포넌트로 변환되었습니다.

이 과정에서 관련 코드를 현대화하고 통합할 기회도 가졌습니다(예: 모든 유형의 discovery 라우트가 이제 동일한 컨트롤러와 템플릿을 공유합니다).

코어에서의 변경 사항 구현은 아직 최종 확정되지 않았지만, 진행 중인 작업은 이 브랜치에서 확인할 수 있습니다. 병합에 대한 구체적인 날짜는 아직 없지만, 향후 몇 주 내에 이루어질 것으로 예상됩니다. 질문이나 우려 사항이 있으시면 알려 주세요!

어떤 테마/플러그인 활동이 영향을 받나요?

이 리팩터링은 주로 ‘컨트롤러’ 계층에 영향을 미칩니다. 라우트는 대부분 변경되지 않았으며, <TopicList /> 컴포넌트 아래에 있는 모든 것도 영향을 받지 않습니다.

영향은 코어 코드를 깊숙이 다루는 테마/플러그인(예: modifyClass 및 템플릿 오버라이드를 통해)에 한정될 것으로 예상됩니다. 정의된 API와 아웃렛은 영향을 받지 않습니다.

템플릿 오버라이드

:shushing_face: 이 템플릿들은 컴포넌트로 리팩터링되었습니다. 기존 오버라이드는 조용히 작동이 중단됩니다.

  • navigation/categories
  • navigation/category
  • navigation/default
  • navigation/filter
  • discovery/topics

:boom: 이 템플릿들은 대폭 리팩터링되었습니다. 기존 템플릿 오버라이드는 사이트에 치명적인 오류를 일으킬 가능성이 높습니다.

  • discovery
  • tag/show
  • user-topics-list
  • user/messages
  • discovery/categories
  • components/basic-topic-list
  • components/d-navigation

기술적으로는 이 변경 사항으로 도입된 새로운 템플릿을 오버라이드하는 것이 가능합니다. 그러나 템플릿 오버라이드는 권장되지 않으며 폐지되고 있습니다.

따라서 모든 템플릿 오버라이드는 제거되고 더 견고한 확장 API(예: 플러그인 아웃렛)로 대체되어야 합니다. Discourse의 기존 확장 지점으로는 불가능해 보이는 작업이 있다면 알려 주세요!

modifyClass 및 lookup() 호출

:wastebasket: 이 클래스들은 더 이상 존재하지 않습니다. modifyClass는 조용히 작동이 중단됩니다. 조회(lookup)는 null을 반환합니다(따라서 오류로 이어질 수 있음). 가장 인기 있는 경우를 위해 하위 호환성을 위한 shim을 도입했습니다(각주 참조).

  • controller:discovery
  • controller:discovery/topics[1]
  • controller:discovery-sortable ( → controller:discovery/list)
  • controller:discovery-filter ( → controller:discovery/filter)
  • controller:navigation/categories
  • controller:navigation/category [2]
  • controller:navigation/default
  • controller:tag/show [3]
  • controller:discovery.* ( → controller:discovery/list)

:technologist: 이 클래스들은 상당한 리팩터링을 거쳤습니다. modifyClass 및 lookup 호출에 리팩터링이 필요할 수 있습니다:

  • route/discovery
  • route/discovery.*
  • route/tag-show

라우트

:motorway: 라우트 이름(즉, router.currentRouteName)은 변경되지 않았습니다.

:clipboard: Discovery 라우트의 model() 훅(즉, router.currentRoute.attributes)은 대부분 변경되지 않았습니다.

플러그인 아웃렛

:electric_plug: 모든 플러그인 아웃렛 및 그 인수는 변경되지 않았습니다.

HTML / CSS

:art: HTML 구조와 클래스는 대부분 영향을 받지 않습니다.


  1. ‘model’ 속성에 대한 읽기 전용 접근은 비추천(deprecation) 알림과 함께 shim 처리되었습니다. ↩︎

  2. ‘category’ 속성에 대한 읽기 전용 접근은 비추천(deprecation) 알림과 함께 shim 처리되었습니다. ↩︎

  3. ‘tag’ 속성에 대한 읽기 전용 접근은 비추천(deprecation) 알림과 함께 shim 처리되었습니다. ↩︎

이번 주에 호스팅 환경에서 이 변경 사항에 대한 테스트를 확대할 예정이며, 다음 주 초(11월 6일)에 main/tests-passed 브랜치에 병합하는 것을 목표로 하고 있습니다.

이 변경사항이 이제 main/tests-passed에 반영되었습니다