# Discourse를 Ember 4로 업그레이드하기

**URL:** https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032
**Category:** Development
**Tags:** ember
**Created:** [4월 22, 2022, 1:09오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032 "2022-04-22T13:09:17Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Johani](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/johani/32/176920_2.png) [@Johani](https://meta.discourse.org/u/Johani)
#### Post date: [4월 22, 2022, 1:09오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/1 "2022-04-22T13:09:18Z")

</div>

Discourse에서 사용되는 Ember 버전을 업데이트하고자 합니다.

현재 **3.15** 버전을 사용 중이며, **4.1** 버전으로 업그레이드하는 것이 목표입니다.

이번 작업을 올해 말까지 완료하는 것을 목표로 하고 있습니다. 이 토픽은 로드맵이며, 모든 계획과 추정치는 잠정적인 것입니다. 이 토픽은 특정 업그레이드나 변경 사항에 대한 중요한 논의를 위한 공간이 아닙니다. 따라서 여기에서의 대화를 다소 집중적으로 유지합시다. 이러한 업데이트가 여러분의 사이트/플러그인/테마에 어떤 영향을 미칠지에 대한 질문은 오프토픽입니다. 계획된 변경 사항은 100% 프론트엔드(Ember 앱)에 국한됩니다.

우리는 도입할 변경 사항에 대해 **매우 신중** 할 것입니다. 모든 공식 플러그인/테마가 업데이트될 것입니다 **(CDCK가 고객들을 위해 수행한 모든 커스텀 작업 포함)**. 또한 인기 있는 비공식 플러그인/테마를 업데이트하기 위해 PR을 보내겠습니다.

여러분이 자신의 사이트를 위해 직접 만든 커스텀 플러그인/테마가 있다면 걱정하지 마세요. 필요한 변경 사항을 수행할 수 있도록 충분한 시간을 드리기 위해 적시에 비추천(deprecation) 경고와 필요한 공지사항을 게시하겠습니다. 필요시 이러한 변경 사항에 대해 안내도 드릴 것입니다.

목표부터 시작해 보겠습니다. 당연히 가능한 가장 높은 버전으로 이동하는 것이 목표이지만, 현재부터 최종 목적지까지 중간 목표를 설정해야 합니다.

우리는 점진적인 업데이트를 수행할 계획입니다. **4.1** 로 한 번에 대규모 업데이트하는 대신, 이 작업을 **여섯** 단계로 나누어 진행하겠습니다. 각 단계는 하나의 Ember 업데이트에 초점을 맞춥니다.

| 단계 | 규모 | 업데이트 내용 |
| --- | --- | --- |
| 1 | #size-l | Ember **3.15** → Ember **3.16**   
 |
| 2 | #size-m | Ember **3.16** → Ember **3.25** |
| 3 | #size-xl | Ember **3.25** → Ember **3.26** (Part 1 - **일반** )  
 Ember **3.25** → Ember **3.26** (Part 2 - **템플릿** )  
 Ember **3.25** → Ember **3.26** (Part 3 - **jQuery** )   
 Ember **3.25** → Ember **3.26** (Part 4 - **Octane 준비 작업** )   
 Ember **3.25** → Ember **3.26** (Part 5 - **Octane** ) |
| 4 | #size-l | Ember **3.26** → Ember **3.27** (Part 1 - **일반** )   
 Ember **3.26** → Ember **3.27** (Part 2 - **`RenderTemplate`** )   
 Ember **3.26** → Ember **3.27** (Part 3 - **레거시 내장 컴포넌트** ) |
| 5 | #size-s | Ember **3.27** → Ember **3.28** |
| 6 | #size-s | Ember **3.28** → Ember **4.1** |

이러한 특정 버전을 선택한 것은 전적으로 해당 버전이 도입하는 비추천 항목과 작업량, 그리고 암시되는 위험도에 기반하고 있습니다.

자, 더 명확하도록 이를 자세히 나눠 보겠습니다.

# 업데이트별 비추천 항목

## Stage 1 (#size-l)

### Ember **3.15** → Ember **3.16**

이 업데이트는 **하나** 의 비추천 항목만 도입합니다.

1. **레거시 글로벌 리졸버 대신 ember-CLI 리졸버 사용** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-globals-resolver) - 종료: 4.0.0 - #size-l

## Stage 2 (#size-m)

### Ember **3.16** → Ember **3.25**

이 업데이트는 **여덟** 개의 비추천 항목을 도입합니다.

~~
1. **`@ember/string#loc` 및 `{{loc}}`** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-string-loc) 종료: 4.0.0 - ✔

2. **Without for - Ember의 내장 비추천** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-source-deprecation-without-for) 종료: 4.0.0 - ✔

3. **Without since - Ember의 내장 비추천** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-source-deprecation-without-since) 종료: 4.0.0 - ✔

4. **@ember/utils의 tryInvoke** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-utils-try-invoke) 종료: 4.0.0 - ✔

5. **Meta Destruction API** [🔗](https://deprecations.emberjs.com/v3.x#toc_meta-destruction-apis) - 종료: 3.25.0 - ✔

~~
1. ~~**Ember getter 사용 및 undefined 명시적 확인** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-metal-get-with-default) - 종료: 4.0.0 - #size-s~~

2. ~~**String 프로토타입 확장** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-string-prototype_extensions) - 종료: 4.0.0 - #size-m~~

3. ~~**@ember/string에서 `htmlSafe` 및 `isHTMLSafe` 가져오기** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-string-htmlsafe-ishtmlsafe) - 종료: 4.0.0 - #size-m~~

## Stage 3 (#size-xl)

**3.25** 에서 **3.26** 으로의 업그레이드는 상당히 복잡한 과정입니다. 여기서 대부분의 “추격” 작업이 이루어집니다. 총 **열여섯** 개의 비추천 항목이 있습니다. 이 업데이트를 **다섯** 부분으로 나누어 진행할 계획이며, 모든 비추천 항목이 처리된 후에만 버전 업을 수행합니다.

### Ember **3.25** → Ember **3.26** (Part 1 - 일반)

이 부분은 상대적으로 처리하기 쉬운 **아홉** 개의 비추천 항목을 다룹니다.

~~
1. **Array Observers** [🔗](https://deprecations.emberjs.com/v3.x#toc_array-observers) - 종료: 4.0.0 - ✔

2. **Component Manager Capabilities** [🔗](https://deprecations.emberjs.com/v3.x#toc_manager-capabilities-components-3-4) - 종료: 4.0.0 - ✔

3. **Modifier Manager Capabilities** [🔗](https://deprecations.emberjs.com/v3.x#toc_manager-capabilities-modifiers-3-13) - 종료: 4.0.0 - ✔

4. **Optional Feature: application-template-wrapper** [🔗](https://deprecations.emberjs.com/v3.x#toc_optional-feature-application-template-wrapper) - 종료: 4.0.0 - ✔

5. **템플릿 내 인수로 사용된 classBinding 및 classNameBindings** [🔗](https://deprecations.emberjs.com/v3.x#toc_class-binding-and-class-name-bindings-in-templates) - 종료: 4.0.0 - ✔

~~
1. **루트 및 컨트롤러의 Transition 메서드** [🔗](https://deprecations.emberjs.com/v3.x#toc_routing-transition-methods) - 종료: 5.0.0 - #size-m

2. ~~**브라우저 지원 정책** [🔗](https://deprecations.emberjs.com/v3.x#toc_3-0-browser-support-policy) - 종료: 4.0.0 - #size-s~~

3. ~~**{{hasBlock}} 및 {{hasBlockParams}}** [🔗](https://deprecations.emberjs.com/v3.x#toc_has-block-and-has-block-params) - 종료: 4.0.0 - #size-s~~

4. ~~**`{{with}}` 헬퍼** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-glimmer-with-syntax) - 종료: 4.0.0 - #size-s~~

### Ember **3.25** → Ember **3.26** (Part 2 - 템플릿)

이 부분은 주로 `.hbs` 템플릿과 관련된 비추천 항목에 초점을 맞출 것입니다. 여기서 집중해야 할 **세** 개의 비추천 항목이 있습니다.

1. **Property Fallback Lookup** [🔗](https://deprecations.emberjs.com/v3.x#toc_this-property-fallback) - 종료: 4.0.0 - #size-l

2. **{{attrs}}를 통한 이름 지정 인수 접근** [🔗](https://deprecations.emberjs.com/v3.x#toc_attrs-arg-access) - 종료: 4.0.0 #size-xl

3. **`<LinkTo>` 위치 인수** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-glimmer-link-to-positional-arguments) - 종료: 4.0.0 - #size-m

### Ember **3.25** → Ember **3.26** (Part 3 - jQuery)

이 부분에 대해 여러분이 이미 알고 있는 것 외에 제가 더 말할 것은 많지 않습니다. 새로운 Ember 앱은 jQuery를 사용하지 않으며, Ember 4.0에서 제거될 예정입니다.

이 부분에서는 **하나** 의 비추천 항목에 초점을 맞출 것입니다.

1. **Optional Feature: jquery-integration** [🔗](https://deprecations.emberjs.com/v3.x#toc_optional-feature-jquery-integration) - 종료: 4.0.0 - #size-xl

### Ember **3.25** → Ember **3.26** (Part 4 - Octane 준비 작업)

이 부분에서는 우리의 파일들이 Octane에 대비할 수 있도록 준비하는 데 초점을 맞춰야 합니다. 우리는 **두** 개의 비추천 항목을 처리할 것입니다.

1. **Optional Feature: template-only-glimmer-components** [🔗](https://deprecations.emberjs.com/v3.x#toc_optional-feature-template-only-glimmer-components) - 종료: 4.0.0 - #size-m

2. **Implicit Injections** [🔗](https://deprecations.emberjs.com/v3.x#toc_implicit-injections) - 종료: 4.0.0 #size-xl

### Ember **3.25** → Ember **3.26** (Part 5 - Octane)

이것은 **3.25** → Ember **3.26** 업그레이드의 마지막 구간입니다. 이 시점에서 우리는 **하나** 의 비추천 항목만 남게 되지만, 그것은 큰 것입니다.

1. **Edition: Classic** [🔗](https://deprecations.emberjs.com/v3.x#toc_editions-classic) - 종료: 4.0.0 - #size-xl

## Stage 4

Ember **3.26** → Ember **3.27** 업데이트는 **열두** 개의 비추천 항목을 도입합니다. 저는 그것들을 **세** 부분으로 나누자고 제안합니다. 모든 비추천 항목이 처리된 후에 버전 업을 수행할 것입니다.

### Ember **3.26** → Ember **3.27** (part 1 - 일반)
~~
1. **Reopening Classic Component Super Class** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-built-in-components-reopen) - 종료: 4.0.0 - ✔

2. **Class-based template compilation plugins** [🔗](https://deprecations.emberjs.com/v3.x#toc_template-compiler-registerPlugin) - 종료: 4.0.0 - ✔

3. **LinkTo @disabled-when argument** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-link-to-disabled-when) - 종료: 4.0.0 - ✔

~~
1. **`Route#disconnectOutlet` 비추천** [🔗](https://deprecations.emberjs.com/v3.x#toc_route-disconnect-outlet) - 종료: 4.0.0 - #size-s

2. **인수와 괄호 없이 이름 지정 인수 위치에서 헬퍼 호출** [🔗](https://deprecations.emberjs.com/v3.x#toc_argument-less-helper-paren-less-invocation) - 종료: 4.0.0 - #size-s

3. **Run loop and computed dot access** [🔗](https://deprecations.emberjs.com/v3.x#toc_deprecated-run-loop-and-computed-dot-access) - 종료: 4.0.0 - #size-m

4. **Ember Global 비추천** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-global) - 종료: 4.0.0 - (#size ?)

### Ember **3.26** → Ember **3.27** (part 2 - `renderTemplate`)

이 부분은 **하나** 의 비추천 항목에만 초점을 맞출 것입니다.

1. `Route#renderTemplate` 비추천 [🔗](https://deprecations.emberjs.com/v3.x#toc_route-render-template) - 종료: 4.0.0 - #size-l

### Ember **3.26** → Ember **3.27** (part 3 - 레거시 내장 컴포넌트)

이 부분은 내장 레거시 컴포넌트에 초점을 맞출 것이며, **네** 개의 비추천 항목을 처리할 것입니다.

1. **레거시 내장 컴포넌트 가져오기** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-built-in-components-import) - 종료: 4.0.0
2. **내장 컴포넌트 레거시 인수** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-built-in-components-legacy-arguments) - 종료: 4.0.0
3. **내장 컴포넌트 레거시 HTML 속성 인수** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-built-in-components-legacy-attribute-arguments) - 종료: 4.0.0
4. **레거시 내장 컴포넌트 Reopening** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-built-in-components-reopen) - 종료: 4.0.0

저는 이것들에 크기를 추가하지 않았습니다. 왜냐하면… 정말로 상황에 따라 다르기 때문입니다. 설명해 드리겠습니다.

`Checkbox`, `TextField`, `TextArea`, `LinkComponent`와 같은 레거시 내장 컴포넌트는 Ember **4.0** 에서 제거될 것입니다. 우리는 그것들을 꽤 많은 곳에서 사용하며, 또한 그것들에서 일부 비추천 패턴도 사용합니다.

Ember는 우리가 그것들을 계속 사용할 수 있도록 업그레이드 경로를 제공하지만, 우리는 그것들을 다르게 가져와야 합니다. 그러나, 그것들은 Ember로부터 더 이상 업데이트를 받지 않고 동결된 상태로 남을 것입니다. 저는 그것들을 모두 폐기할 수 있기를 희망하지만, 그것은 다소 복잡할 수 있습니다. 이 변경 사항은 때가 되면 더 많은 논의가 필요합니다.

## Stage 5

### Ember **3.27** → Ember **3.28**

이것은 버전 업만 있기 때문에 #size-s입니다. 3.28은 3.x 개발 주기에서 마지막 [LTS 릴리스](https://emberjs.com/releases/lts/)입니다. 3.27 이후 새로운 비추천 항목을 도입하지 않으며, 상황이 안정될 때까지 몇 주 동안 머물러 있기 좋은 버전입니다.

3.28 LTS는 2022년 8월까지 지원됩니다 (버그 수정 및 보안 패치 모두 포함).

이 "휴식"에는 몇 가지 이점이 있습니다.

1. 문제가 발생하는지 확인하는 데 더 많은 시간을 줍니다.
2. 안정적인 버전을 배포할 때, 그것은 3.28 위에 있어야 합니다.
3. 자체 유지보수 테마 및 플러그인에 대해 필요한 공지를 할 시간을 줍니다.
4. jQuery → no jQuery 전환이 최대한 매끄럽도록 보장하는 시간을 줍니다.

## Stage 6

몇 주가 지나면, 마침내 우리의 버전을 Ember 4로 올릴 수 있습니다.

### Ember **3.28** → Ember **4.1**

이제 우리는 3.x 주기의 마지막 비추천 항목인 선택적 jQuery 통합을 꺼낼 수 있습니다.

이 업데이트는 **두** 개의 경미한 비추천 항목을 도입합니다.

1. ~~**Ember.assign 비추천** [🔗](https://deprecations.emberjs.com/v4.x#toc_ember-polyfills-deprecate-assign) - 종료: 5.0.0 - #size-s~~

2. **AutoLocation Class** [🔗](https://deprecations.emberjs.com/v4.x#toc_deprecate-auto-location) - 종료: 5.0.0 - #size-s

## 워크플로우

시작에서 언급했듯이, 우리는 이 업데이트들에 대해 매우 신중할 것입니다. 우리는 모든 업데이트마다 모든 공식 플러그인/테마를 테스트/수정/고정(pinned)할 것이며, 인기 있는 비공식 플러그인/테마에도 PR을 보내겠습니다.

여기서의 목표는 개발을 늦추거나 두통을 유발하는 것이 아닙니다. 따라서, PR은 엄격하게 범위가 제한되어야 하며, PR당 하나의 변경 사항만 포함하고 너무 크지 않아야 합니다.

이상적인 세계에서는, 모든 변경 사항이 다른 사람들의 작업을 방해하지 않고 백그라운드에서 일어나야 합니다. 이것이 우리가 PR을 짧고 간결하게 유지하려는 이유입니다. 또한, 우리는 혼합된 패턴을 좋아하지 않습니다. 따라서, 파일 단위로 중간 상태에 갇히기를 원하지 않습니다. 컴포넌트는 classic이거나 Glimmer이고, 템플릿은 중괄호를 사용하거나 앵글 브래킷을 사용하며, 그 사이에는 아무것도 없습니다.

이 로드맵이 명확했기를 바랍니다. 처음에 언급했듯이, 이것은 단지 일반적인 최상위 개요입니다. 만약 불분명하거나, 잘못되었거나, 마음에 들지 않는 부분이 있다면, 우리에게 알려 주십시오.

---

<div class="post-metadata">

### Author: ![isaac](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/isaac/32/235758_2.png) [@isaac](https://meta.discourse.org/u/isaac)
#### Post date: [5월 13, 2022, 4:35오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/2 "2022-05-13T16:35:14Z")

</div>

> [@Johani](#):
>
> **String 프로토 타입 확장** [🔗](https://deprecations.emberjs.com/v3.x#toc_ember-string-prototype_extensions) - until: 4.0.0 - #size-m

**Core** : _모두 완료_ ✅

- [DEV: ‘underscore’ 문자열 프로토 타입 확장 제거](https://github.com/discourse/discourse/pull/16748)
- [DEV: ‘decamelize’ 문자열 프로토 타입 확장 제거](https://github.com/discourse/discourse/pull/16747)
- [DEV: ‘dasherize’ 문자열 프로토 타입 확장 제거](https://github.com/discourse/discourse/pull/16740)
- [DEV: ‘classify’ 문자열 프로토 타입 확장 제거](https://github.com/discourse/discourse/pull/16739)
- [DEV: ‘capitalize’ 문자열 프로토 타입 확장 제거](https://github.com/discourse/discourse/pull/16738)
- [DEV: 문자열 프로토 타입 확장 제거](https://github.com/discourse/discourse/pull/16736)

**Plugins** :

#### [discourse-events](https://github.com/paviliondev/discourse-events)

- [DEV: ‘camelize’ 문자열 프로토 타입 확장 제거](https://github.com/paviliondev/discourse-events/pull/102)

#### [discourse-data-explorer](https://github.com/discourse/discourse-data-explorer)

- ✅ [DEV: ‘capitalize’ 문자열 프로토 타입 확장 제거](https://github.com/discourse/discourse-data-explorer/pull/172)
- ✅ [DEV: ‘dasherize’ 문자열 프로토 타입 확장 제거](https://github.com/discourse/discourse-data-explorer/pull/173)

* * *

---

<div class="post-metadata">

### Author: ![featheredtoast](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/featheredtoast/32/116994_2.png) [@featheredtoast](https://meta.discourse.org/u/featheredtoast)
#### Post date: [6월 17, 2022, 12:05오전 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/6 "2022-06-17T00:05:08Z")

</div>

@Johani Ember 4를 직접적으로 차단하는 문제는 아닐 수 있지만, [mixins](https://guides.emberjs.com/release/upgrading/current-edition/native-classes/#toc_mixins) 역시 로드맵에서 고려할 가치가 있을 수 있습니다:

> 또한 Glimmer 컴포넌트와 같은 일부 새로운 프레임워크 클래스는 Ember mixins을 전혀 지원하지 않습니다. 미래에는 mixins이 프레임워크에서 제거될 것이며, 직접적인 대체 방안은 제공되지 않을 것입니다.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [6월 29, 2023, 5:51오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/8 "2023-06-29T17:51:11Z")

</div>

토픽 목록이 Glimmer Components로 이관되고 원시 템플릿이 제거되는 시기에 대해 감을 잡고 계신가요?

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [6월 29, 2023, 5:55오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/9 "2023-06-29T17:55:16Z")

</div>

다음 3~6개월 안에 진행할 수 있기를 조심스럽게 희망하고 있지만, 아직 확정된 것은 아닙니다.

현재 우리 “JS 현대화” 팀의 주요 초점은 Discourse를 Ember 4.x 이상(3.28은 이제 EOL 상태)으로 전환하는 것입니다.

---

<div class="post-metadata">

### Author: ![SimonBiggs](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simonbiggs/32/292760_2.png) [@SimonBiggs](https://meta.discourse.org/u/SimonBiggs)
#### Post date: [6월 29, 2023, 11:06오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/10 "2023-06-29T23:06:03Z")

</div>

안녕하세요 @david,

참고로, 테마 관련해서 어떤 추천을 주실 수 있을까요? 저희는 Discourse의 대규모 테마 재구성을 검토 중입니다. (단순화, "소셜 미디어 스타일"로 변경, 개발자 중심에서 벗어나기, 스레드 대신 댓글이 있는 게시물을 사용)

앞으로 6개월 동안 Discourse의 프론트엔드에서 많은 변경 사항이 예정되어 있으므로, 이 작업을 시도하기 전에 기다리는 것이 더 나을 수도 있을까요?

감사합니다.  
Simon

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [6월 30, 2023, 8:53오전 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/11 "2023-06-30T08:53:26Z")

</div>

시몬 씨, 안녕하세요. 타임라인에 대한 불확실성으로 인해 여기서 명확한 답변을 드리기 어렵습니다.

CDCK에서는 기존 코어 버전을 기반으로 고객들을 위한 새로운 테마를 개발하고 있습니다. 큰 변경 사항(예: 토픽 목록 재작성)은 초기에 선택적 적용(opt-in) 방식으로 제공되므로, 대응할 충분한 시간을 가질 수 있습니다.

일반적으로 플러그인 아웃렛과 같은 “권장” API를 사용하고 템플릿을 오버라이드하는 것을 피하면 마이그레이션 경로가 더 수월해집니다.

---

<div class="post-metadata">

### Author: ![SimonBiggs](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simonbiggs/32/292760_2.png) [@SimonBiggs](https://meta.discourse.org/u/SimonBiggs)
#### Post date: [7월 3, 2023, 4:17오전 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/12 "2023-07-03T04:17:37Z")

</div>

@david님, 도움 주셔서 감사합니다.

감사합니다,  
Simon

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [10월 13, 2023, 7:33오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/13 "2023-10-13T19:33:06Z")

</div>

Octane의 Glimmer와 “data-down, actions up” 접근 방식을 고려할 때, 모델 수정을 어떻게 처리할 계획인가요?

Plugin outlets에서 문제를 발견했습니다. 이전에는 양방향 바인딩(2-way binding)이 가능했지만, outlet에 Glimmer 컴포넌트를 연결하면 더 이상 해당 옵션이 사라집니다.

Plugin outlets를 통한 양방향 바인딩은 확립된 패턴이며, 일부 경우에는 plugin outlet을 통해 전달된 모델을 업데이트하고 싶어 합니다.

Ember 문서에서 다음 권고를 확인했습니다:

> **[Introduction - Octane Upgrade Guide - Ember Guides](https://guides.emberjs.com/release/upgrading/current-edition/#toc_refactoring-checklist)**
>
> Octane is Ember's current edition. 
> 
> The next edition, which is a work-in-progress, is called Polaris. How do I migrate to Octane? 
> 
> If you have an older app that you are trying to upgrade, there is a step by step guide in an earlier version of the...

특히 주목할 점은 다음과 같습니다:

“두 번째 옵션은, 나머지 모든 컴포넌트에 대해 [`ember-native-class-codemod`](https://github.com/ember-codemods/ember-native-class-codemod)을 실행하는 것입니다. 이를 통해 `@ember/component`에서 가져오는 컴포넌트로 변환되며, 클래식 컴포넌트가 가진 동일한 모든 API를 유지하되, 네이티브 클래스 문법으로 표현됩니다.”

이 부분에 대한 여러분의 의견을 감사히 듣고 싶습니다.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [10월 13, 2023, 8:44오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/14 "2023-10-13T20:44:34Z")

</div>

양방향 바인딩 변경 사항은 인수를 **재할당** 하는 것을 의미하지만, 여전히 변경(mutation)은 가능합니다.

예를 들어, Glimmer 컴포넌트에서는 다음과 같은 작업이 허용되지 않습니다:

```plaintext
this.args.topic = blah

```

하지만 다음과 같은 방식은:

```plaintext
this.args.topic.title = "blah"

```

여전히 가능합니다.

실제로, Plugin Outlets에서는 인수를 전달하기 위해 `{{hash}}`를 사용하는 방식 때문에 현재 인수를 재할당하는 것이 불가능하다고 생각합니다. 따라서 이 부분에 대해 변경 사항이 있을 것으로 기대하지 않습니다. 🤞

많은 공식 테마/플러그인이 이미 Glimmer 컴포넌트를 플러그인 아웃렛 커넥터로 사용하고 있으며, 현재 문서([meta에서 보기](https://meta.discourse.org/t/using-plugin-outlet-connectors-from-a-theme-or-plugin/32727))에는 이를 수행하는 방법에 대해 설명하고 있습니다.

Glimmer 컴포넌트는 개발자 경험과 성능 향상을 제공합니다. 하지만 클래식 컴포넌트에서 Glimmer 컴포넌트로의 전환을 서두를 필요는 없음을 주목할 가치가 있습니다. 클래식 컴포넌트는 여전히 Ember 5에서 지원됩니다.

가장 중요한 것은 현재 테마/플러그인에서 발생하는 비추천(deprecation) 메시지를 해결하는 것입니다. 향후 몇 주/개월 동안 업그레이드 전략에 대해 더 많은 정보를 게시할 예정이지만, 코어 업그레이드를 위한 준비 작업은 좋은 진전을 보이고 있습니다. 심지어 지난 몇 주 동안 내부 인스턴스에서 성공적으로 실행해 온 [실험용 Ember 5.3](https://github.com/discourse/discourse/pull/21720) Discourse 브랜치도 있습니다! 🎉

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [10월 13, 2023, 9:07오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/15 "2023-10-13T21:07:09Z")

</div>

> [@david](#):
>
> 양방향 바인딩 변경은 인수를 **재할당** 하는 것을 가리키지만, 여전히 변경(mutation)할 수 있습니다.

오! 정말 흥미롭네요. 감사합니다!

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [6월 7, 2024, 10:22오전 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/16 "2024-06-07T10:22:10Z")

</div>

업그레이드의 범위가 넓다는 점은 충분히 이해합니다. 또한, 구체적인 일정표를 제시하기가 매우 어렵다는 것도 잘 알고 있습니다. 그런데 주제 목록에 대해 아직 진행 상황이 있나요?

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [6월 7, 2024, 10:31오전 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/17 "2024-06-07T10:31:44Z")

</div>

물론 있습니다! @cvx가 이 작업을 적극적으로 진행 중이며, 직접 사용해 보고 싶으시다면 "experimental glimmer topic list groups"라는 사이트 설정이 이미 존재합니다.

**다만** 아직 이 기능의 사용자 정의 가능성에 대한 탐색을 시작하지 않았으므로, 이 기능을 기반으로 테마나 플러그인을 개발하지 마시기 바랍니다. 향후 몇 주 내에 이 부분을 작업할 예정입니다.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [6월 7, 2024, 10:36오전 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/18 "2024-06-07T10:36:05Z")

</div>

훌륭한 진전이네요!

맞아요, 커스터마이징 옵션을 최대한 유연하게 유지해 주시면 정말 감사하겠습니다.

일반적인 것과 매우 다른 주제 목록 항목 레이아웃에 대한 요청을 많이 받고 있습니다.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [12월 18, 2024, 12:02오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/19 "2024-12-18T12:02:25Z")

</div>

새로운 비권장(deprecation) 공지사항을 확인했습니다. 예를 들어 다음과 같습니다:

“대신 `topic-list-columns` 값 변환기(value transformer)와 기타 새로운 topic-list 플러그인 API를 사용하세요.”

이와 관련하여 공지나 안내가 있을까요? (혹시 제가 놓친 건가요? 🤔)

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [12월 18, 2024, 12:06오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/20 "2024-12-18T12:06:02Z")

</div>

네, 다음 주쯤에 문서를 올릴 예정이에요!

아직 ‘정식’ 비추천(deprecation) 메시지는 아니에요. `console.warn` 대신 `console.debug`로 로깅하고 있어서, 기본 Chrome DevTools 설정에서는 아예 표시되지 않아요. (cc @cvx)

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [12월 19, 2024, 5:46오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/21 "2024-12-19T17:46:53Z")

</div>

시작합니다 @merefield

> [@예정된 주제 목록 변경 - 테마 및 플러그인 준비 방법](https://meta.discourse.org/t/upcoming-topic-list-changes-how-to-prepare-themes-and-plugins/343404?u=david):
>
> Discourse 코드베이스 전반의 렌더링 시스템 표준화를 위한 지속적인 노력의 일환으로, 토픽 목록(topic-list) 구현 방식을 교체하고 있습니다. 기존에는 ‘raw handlebars’(.hbr) 방식을 사용했으며, 템플릿 오버라이드와 raw-plugin-outlets를 통해 커스터마이징할 수 있었습니다. 새로운 토픽 목록 구현은 최신 Glimmer 컴포넌트를 사용하며, 지속 가능한 방식으로 커스터마이징할 수 있도록 처음부터 다시 설계되었습니다. 새로운 구현은 이제 glimmer\_topic\_list\_mode 설정 뒤에 사용 가능합니다. disabled: 레거시 “raw handlebars” 토픽 목록 사용 auto: 현재 플러그인과 테마의 호환성을 감지합니다. 호환되지 않는 항목이 있으면 레거시 시스템을 사용하고, 그렇지 않으면 새로운 구현을 사용합니다. enabled: 새로운 토픽 목록 구현을 사용합니다. 호환되지 않는 플러그인이나 테마가 있는 경우 사이트가 손상될…

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [12월 19, 2024, 6:23오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/22 "2024-12-19T18:23:10Z")

</div>

> [@david](#):
>
> 그래서 기본 Chrome DevTools 설정에서는 아예 보이지 않습니다. (cc @cvx)

오. 그걸 알아야 할 것 같네요. 어떻게 **확인** 하나요? `console.debug`를 사용하면 린터가 불만을 제기하지 않나요?

제 답변의 일부라고 생각합니다:

> [@](#):
>
> debug 메시지를 보려면 콘솔 사용 중 DevTools 상단 바에서 로그 레벨을 Verbose로 설정해야 합니다. log 메시지는 기본적으로 표시됩니다.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [12월 19, 2024, 6:26오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/23 "2024-12-19T18:26:14Z")

</div>

> [@pfaffman](#):
>
> Devtools 상단 바에서 로그 레벨을 Verbose로 설정하세요.

네!

> [@pfaffman](#):
>
> 그것에 대해 알고 싶을 수도 있잖아요.

그들을 `debug`로 만든 이유는, 경고 홍수 방울을 열기 전에 모든 것이 준비되었는지 확인하고 싶었기 때문입니다. 다만 @merefield가 너무 관찰력이 뛰어나 결국 찾아냈을 뿐이죠 😉

이제 해당 주제가 공개되었으므로, 곧 일반 비추천(deprecation)으로 격상할 예정입니다 🔥

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [12월 19, 2024, 6:30오후 UTC](https://meta.discourse.org/t/upgrading-discourse-to-ember-4/225032/24 "2024-12-19T18:30:33Z")

</div>

하지만 나만의 개발 작업에서는 `console.log` 대신 `console.debug`를 사용하려는 경우가 있을 수 있습니다. 일반적으로 내가 하는 작업은 나만 신경 쓸 일이니까요.
