검색 배너 테마 구성 요소 비활성화

지난 몇 달간, 우리는 Discourse의 핵심 제품 일부인 환영 배너 기능을 개발해 왔습니다. 이 핵심 환영 배너 기능은 커뮤니티에 처음 방문하거나 다시 방문하는 사용자를 맞이하며, 사용자의 필요와 관심사에 맞는 콘텐츠를 쉽게 검색할 수 있도록 도와줍니다. 이 새로운 핵심 배너가 도입됨에 따라, 제품 제공 범위의 복잡성을 줄이고 모든 Discourse 사용자에게 핵심 기능의 지속적인 개선 혜택을 제공하기 위해 검색 배너 테마 컴포넌트를 비추천(deprecate) 처리합니다.

이 주제에서는 검색 배너 테마 컴포넌트의 기존 사용자에게 비추천 처리가 어떤 의미를 갖는지 설명하겠습니다.

호스팅 고객인 경우…

2025년 11월 20일부터 호스팅 고객을 검색 배너 컴포넌트에서 환영 배너 기능으로 마이그레이션하기 시작합니다. 현재 이 컴포넌트를 사용 중이시라면, 요금제 등급에 따른 정확한 일정 세부 정보가 포함된 메시지를 받으실 것입니다.

이 마이그레이션 과정에서 테마 컴포넌트를 위해 수정한 사이트 텍스트(예: search_banner.headline, search_banner.subhead, search_banner.search_button_text)와 show on, plugin outlet, background image 테마 컴포넌트 설정 값이 핵심 기능 설정으로 복사됩니다.

우리의 목표는 이 변경으로 인한 가시적인 영향을 최소화하여, 핵심 기능이 생성한 배너가 테마 컴포넌트가 생성한 배너와 동일한 외관을 갖도록 하는 것입니다. 배너에 이미지가 있는 커뮤니티에서는 배너에 표시되길 원하는 콘텐츠를 중앙에 배치하도록 이미지를 자르면, 배너에서 이미지의 위치가 약간 달라지는 문제를 해결할 수 있습니다.

이 마이그레이션 이후, 해당 테마 컴포넌트는 비활성화되며 테마 및 컴포넌트 페이지(/admin/config/customize/components)에서 안전하게 삭제할 수 있습니다.

셀프 호스팅 사용자인 경우…

2025년 12월 15일까지 테마 컴포넌트에서 핵심 기능으로 직접 마이그레이션할 계획을 세우시기 바랍니다. 이는 수동으로 수행하거나 우리가 제공하는 스크립트를 사용하여 수행할 수 있습니다.

수동 마이그레이션

다음은 검색 배너 테마 컴포넌트의 사이트 텍스트와 설정이 핵심 환영 배너의 동일한 기능과 어떻게 대응되는지에 대한 매핑입니다:

설정 설명 검색 배너 테마 컴포넌트 환영 배너 핵심 기능
환영 배너에 표시되는 제목 텍스트. search_banner.headline 사이트 텍스트 js.welcome_banner.header.anonymous_membersjs.welcome_banner.header.logged_in_members 사이트 텍스트
환영 배너에 표시되는 부제목 텍스트. search_banner.subhead 사이트 텍스트 js.welcome_banner.subheader.anonymous_membersjs.welcome_banner.subheader.logged_in_members 사이트 텍스트
배너의 검색 버튼에 사용되는 텍스트. * search_banner.search_button_text 사이트 텍스트 js.welcome_banner.search_placeholder 사이트 텍스트
환영 배너가 표시되는 페이지를 결정하는 설정. show on 테마 컴포넌트 설정 Welcome banner page visibility 사이트 설정
페이지에서 환영 배너가 나타나는 위치를 결정하는 설정. plugin outlet 테마 컴포넌트 설정 Welcome banner location 사이트 설정
환영 배너에 사용되는 배경 이미지. background image light 테마 컴포넌트 설정 Welcome banner image 사이트 설정

* 핵심 환영 배너 기능은 명시적인 검색 버튼을 지원하지 않으므로, 유사한 결과를 위해 이 텍스트를 사용자 지정 가능한 검색 필드 플레이스홀더 텍스트로 매핑하는 것을 권장합니다.

스크립트 마이그레이션

마이그레이션은 반드시 다음 순서대로 실행해야 하는 세 개의 rake 태스크로 구성됩니다:

  1. 컴포넌트 설정 마이그레이션:
    themes:advanced_search_banner:1_migrate_settings_to_welcome_banner
  2. 컴포넌트 번역 마이그레이션:
    themes:advanced_search_banner:2_migrate_translations_to_welcome_banner
  3. 핵심 배너 활성화, 컴포넌트 사용 테마에서 제외 및 컴포넌트 비활성화:
    themes:advanced_search_banner:3_exclude_and_disable

컨테이너에서 실행할 파일 <random_name>.sh:

  1. task_1.sh:
#!/bin/bash

cd /var/www/discourse && rake themes:advanced_search_banner:1_migrate_settings_to_welcome_banner
  1. task_2.sh:
#!/bin/bash

cd /var/www/discourse && rake themes:advanced_search_banner:2_migrate_translations_to_welcome_banner
  1. task_3.sh
#!/bin/bash

cd /var/www/discourse && rake themes:advanced_search_banner:3_exclude_and_disable

마이그레이션 과정을 더 잘 제어할 수 있도록 각 rake 태스크를 개별적으로 실행하는 것이 권장됩니다.

세 가지 태스크를 순차적으로 실행하기 위한 편의 태스크 themes:advanced_search_banner:migrate_all도 제공되지만, 사용 여부는 사용자의 재량에 맡깁니다.

9개의 좋아요

혹시 이런 식으로 말씀하시는 건가요?

#!/bin/bash
cd /var/www/discourse && rake themes:advanced_search_banner:migrate_settings_to_welcome_banner  && rake themes:advanced_search_banner:migrate_translations_to_welcome_banner &&  rake themes:advanced_search_banner:exclude_and_disable

<task_1_2_or_3>에서 이를 유추할 수 있는 셀프 호스터는 많지 않을 것 같습니다.

이 rake 태스크들이 실패할 가능성이 있나요? 한 번에 모두 실행해도 되나요? 그렇다면 왜 이 모든 작업을 수행하는 rake 태스크를 하나로만 만들지 않는 건가요?

아마도 사람들이 이런 것을 원할 수도 있습니다:

docker exec -t app bash -c `cd /var/www/discourse && rake themes:advanced_search_banner:migrate_settings_to_welcome_banner  && rake themes:advanced_search_banner:migrate_translations_to_welcome_banner &&  rake themes:advanced_search_banner:exclude_and_disable`

즉, 이 방법을 모르는 사람들은 결국 모든 기존 설정과 사용자 정의된 텍스트를 잃게 되는 건가요?

3월까지 다시 업그레이드하지 않는 사람들은 어떻게 되나요? 그때도 여전히 해당 rake 태스크를 실행할 수 있나요? 12월 15일의 중요성이 무엇인지 명확하지 않습니다.

3개의 좋아요

스크립트를 작성한 동료에게 질문의 첫 번째 부분에 대한 도움을 받도록 하겠습니다. 하지만 나머지 두 가지 질문에 대해서는 다음과 같습니다:

아니요.

스크립트는 하나의 옵션일 뿐이며, 수동 마이그레이션도 또 다른 옵션입니다. 그래서 테마 구성 요소의 설정/문자가 환영 배너의 설정/문자와 어떻게 매핑되는지에 대해 매우 명확한 설명을 제공했습니다.

12월 15일은 호스팅 고객의 마이그레이션을 완료하고 Search Banner 구성 요소에 대한 지원/유지를 공식적으로 중단하는 날입니다. 이 구성 요소의 다른 사용자들도 미래에 테마 구성 요소가 Discourse 코어와 호환되지 않게 될 때 당황하지 않도록 그때 이전에 마이그레이션을 완료하도록 권장하고 있습니다.

만약 사람들이 나중에 실행하기로 선택하더라도 여전히 이 작업을 실행하거나 수동으로 마이그레이션을 수행할 수 있어야 하지만, 그 동안에는 지원되지 않는 테마 구성 요소를 실행하게 됩니다.

5개의 좋아요

맞습니다. 제공된 명령어는 세 가지 작업을 순서대로 실행합니다. 각 작업 앞에 번호를 붙여 의도된 실행 순서를 표시했다는 점에 유의해 주세요.

감사합니다. 더 명확하도록 스크립트 마이그레이션 섹션을 업데이트했습니다.

100% 성공을 보장할 수는 없지만, 실패 확률이 매우 낮도록 보장했습니다.

네, 편의를 위한 작업을 추가했습니다: themes:advanced_search_banner:migrate_all.

3개의 좋아요

좋네요! 그 방법이 많이 도움이 될 것 같아요. 우리 같은 사람들은 컨테이너 안에서 몇 개의 rake 태스크를 실행하는 것을 꺼리지 않지만, 대부분의 셀프호스터들은 그렇지 않죠.

관리자 패널에 테마 구성 요소의 비추천(deprecation) 링크를 추가해서 이 페이지를 가리키도록 테마 구성 요소를 업데이트할 수 있다면, 이 주제가 존재한다는 사실을 알게 되는 데 도움이 될 거예요.

제가 하고 싶은 것은 테마 구성 요소가 설치되어 있는지 확인하는 방법을 찾는 거예요. 가능하면 API를 통해 확인하면 좋겠어요. 아마도 테마 구성 요소의 JSON을 가져와서 jq를 통해 파싱하고 구성 요소 이름으로 필터링하는 방식이 될 거예요. 그렇게 하면 될 것 같고, 제 대시보드에는 API 키도 있으니요. 그러면 ansible로 컨테이너 안에서 rake 태스크를 실행할 수 있겠죠!

3개의 좋아요

컴포넌트가 자동으로 설치되는 공식 테마들이, 앞으로 테마가 정상적으로 작동하려면 코어에서 환영 배너를 수동으로 설정해야 한다는 사실을 사용자가 인지하지 못한 채 컴포넌트를 설치하지 않도록 미리 변경되었나요?

3개의 좋아요

참고로, 설명대로 rake 작업을 수행했고, 계획대로 작동한 것으로 보입니다.

rake.txt.md (3.1 KB)

2개의 좋아요

검색 배너를 사용하던 모든 공식 테마가 업데이트되어 환영 배너를 사용하도록 전환되었습니다:

4개의 좋아요

이와 관련하여 질문을 해도 될까요? 오늘 안전 모드(safe mode)를 사용했는데, 마이그레이션 이후 배너를 처음 본 것이 오늘이었기 때문입니다(현재 제 테마에서는 비활성화되어 있습니다. 해당 컴포넌트는 현재 비활성화된 Air 테마에 설치되어 있었습니다).
그래서 배너의 텍스트가 이제 검색 배너의 텍스트와 일치하는 것을 알게 되었습니다.



그런 다음, 인터페이스 언어를 포럼의 기본 언어(독일어)로 전환했는데, 해당 텍스트는 변경되지 않은 것 같습니다.



이것이 마이그레이션의 예상된 결과인가요? 제가 텍스트를 편집했다는 것을 나타내는 로그를 찾을 수 없어서 이것이 마이그레이션의 결과라고 가정하고 있습니다. 하지만 왜 하나의 언어만 변경되고 다른 언어들은 변경되지 않는지 이해가 되지 않습니다. 특히 기본 로케일이 마이그레이션되지 않는 이유에 대해서는 더욱 그렇습니다.

네, 마이그레이션 스크립트는 기본 검색 배너 텍스트를 핵심 환영 배너 텍스트로 마이그레이션하도록 설계되었습니다.

왜 텍스트가 마이그레이션되었나요?

검색 배너가 Air 테마와 함께 설치되었기 때문에 마이그레이션이 실행되었습니다. 스크립트는 부모 테마(귀하의 경우 Air 테마)가 비활성화되어 있는지 확인하지 않으며, 이는 스크립트 로직의 누락입니다.


마이그레이션 스크립트는 로케일이 설정된 경우 여러 로케일을 지원합니다: 소스 코드 링크.

즉, 검색 배너에 독일어 텍스트가 설정되어 있지 않았으므로 마이그레이션할 것이 없었습니다.

마이그레이션 스크립트 작성자로서, 원활한 마이그레이션을 보장하지 못한 이 oversight에 대해 사과드립니다. 귀하의 게시물에서 제가 놓친 부분이 있다면, 더 이상 핵심 팀의 일원이 아니므로 더 나은 도움을 드릴 수 없을 것 같습니다. 이 문제에 대해 여전히 도움이 필요하시다면, 2025-12-15에 마이그레이션을 수행한 사람이 도움을 줄 수 있을 것입니다.

1개의 좋아요

:thinking: 그런데 왜 테마 컴포넌트에서 독일어 텍스트가 보이나요? 그것들은 1년 이상 전에 추가된 기본 번역입니다.

그래서 여전히 영어와 독일어 사이의 차이가 정확히 무엇인지 이해가 되지 않습니다. 사이트 텍스트가 오버라이드된 것으로 보이는 언어는 영어뿐입니다. 스페인어도 아니고, 프랑스어도, 중국어도 아니지만, 검색 배너 컴포넌트는 이 모든 언어로 번역되어 있습니다.

1개의 좋아요

그동안 저는 이 동작을 더 깊이 이해하려고 노력했으며, ChatGPT에게 마이그레이션 로직을 단계별로 설명해 달라고 요청했습니다. 제가 파악한 바로는, 번역 오버라이드가 존재하지 않으면 마이그레이션이 로케일을 결정하지 못하고 영어로 폴백됩니다. 그래서 영어 텍스트가 변경된 것입니다.

아직 이해가 안 되는 부분은 포럼의 기본 로케일이 폴백으로 사용되지 않은 이유, 혹은 마이그레이션이 모든 로케일 또는 어떤 것도 아닌 일관된 방식으로 마이그레이션하지 않은 이유입니다. 사용자 경험 측면에서 보면, 인터페이스 언어와 관계없이 모든 사용자에게 새 웰컴 배너 텍스트 또는 구형 검색 배너 텍스트 중 하나가 일관되게 표시되는 것이 더 합리적일 것입니다.

현재 상태에서는, 독일어 사용자에게는 기본 웰컴 배너 텍스트가, 영어 사용자에게는 기본 검색 배너 텍스트가 표시됩니다. 이는 검색 배너가 웰컴 배너로 마이그레이션되었기 때문입니다. 상당한 시간을 들여 조사해 보았음에도 불구하고, 이 결과는 여전히 제게는 이해가 되지 않습니다.

2개의 좋아요

Hi @Moin, 이번 건을 조사하는 동안 답변이 늦어 죄송합니다.

Search Banner 컴포넌트는 로케일 파일에 독일어, 스페인어, 프랑스어, 중국어 등 여러 언어에 대한 내장 번역이 포함되어 있었습니다. 이러한 번역은 데이터베이스의 TranslationOverrides로 저장되지 않았으며, 컴포넌트 자체의 일부였습니다. Search Banner → Welcome Banner로의 마이그레이션 스크립트는 관리자만 명시적으로 설정한 커스텀 사이트 텍스트인 번역 오버라이드만 마이그레이션하며, 테마 컴포넌트의 내장 번역은 마이그레이션하지 않습니다. 이는 아래에서 확인하실 수 있는 내용입니다:

이러한 누락으로 인해 마이그레이션 과정이 원활하지 못했던 점, 저희의 실수였음을 사과드립니다!

2개의 좋아요

그 부분은 이해합니다. 독일어 텍스트가 이주되지 않은 이유를 설명해 주니까요.

하지만 제가 변경하지 않은 영어 텍스트는 왜 이주되었을까요? 오버라이드된 텍스트만 이주했다면, 그것들도 이주되지 않았어야 하고, 결과는 모든 사용자가 새 텍스트를 보는 일관된 Welcome 배너가 되어야 합니다. 그런데 실제로는 영어 사용자는 Search 배너의 기본 텍스트를 보는 것을 제외하고는 거의 모든 사용자가 새 텍스트를 보는 Welcome 배너가 되었습니다.

마이그레이션 스크립트에는 영어 로케일의 기본 텍스트만 하드코딩되어 있습니다. 다른 기본 로케일을 추가하는 것을 간과했습니다. 이것이 자동 마이그레이션 과정에서 독일어 기본 복사본이 누락된 이유를 설명합니다.

1개의 좋아요