# Developer Guides

**URL:** https://meta.discourse.org/c/documentation/developer-guides/56.md?page=1

[최신](https://meta.discourse.org/latest.md) · [카테고리](https://meta.discourse.org/categories.md) · [태그](https://meta.discourse.org/tags.md)

**Page:** 2

---

## [modifyClass를 사용하여 핵심 동작 변경](https://meta.discourse.org/t/using-modifyclass-to-change-core-behavior/262064)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 6\
**마지막 업데이트:** [3월 4, 2026, 7:13오전 UTC](https://meta.discourse.org/t/using-modifyclass-to-change-core-behavior/262064 "2026-03-04T07:13:43Z")

</div>

고급 테마와 플러그인의 경우, Discourse는 modifyClass 시스템을 제공합니다. 이를 통해 코어의 자바스크립트 클래스 중 상당수의 기능을 확장하고 오버라이드할 수 있습니다. modifyClass를 사용할 때 modifyClass는 마지막 수단으로 사용해야 합니다…

---

## [Using Plugin Outlet Connectors from a Theme or Plugin](https://meta.discourse.org/t/using-plugin-outlet-connectors-from-a-theme-or-plugin/32727)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 12\
**마지막 업데이트:** [10월 14, 2024, 10:37오전 UTC](https://meta.discourse.org/t/using-plugin-outlet-connectors-from-a-theme-or-plugin/32727 "2024-10-14T10:37:16Z")

</div>

Discourse includes hundreds of Plugin Outlets which can be used to inject new content or replace existing contend in the Discourse UI. ‘Outlet arguments’ are made available so that content can be customized based on the …

---

## [Using the JS API](https://meta.discourse.org/t/using-the-js-api/41281)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 18\
**마지막 업데이트:** [1월 30, 2026, 7:30오전 UTC](https://meta.discourse.org/t/using-the-js-api/41281 "2026-01-30T07:30:33Z")

</div>

Discourse’s JavaScript API allows themes and plugins to make extensive customizations to the user experience. The simplest way to use it is to create a new theme from the admin panel, click “Edit Code”, and then head to …

---

## [레거시 컨트롤러의 모달을 새로운 DModal 컴포넌트 API로 변환하기](https://meta.discourse.org/t/converting-modals-from-legacy-controllers-to-new-dmodal-component-api/268057)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 9\
**마지막 업데이트:** [11월 7, 2023, 5:05오후 UTC](https://meta.discourse.org/t/converting-modals-from-legacy-controllers-to-new-dmodal-component-api/268057 "2023-11-07T17:05:46Z")

</div>

:information\_source: 새로운 Modal을 구현하고 있다면, 여기 있는 주요 문서를 확인하세요. 이 주제는 기존 컨트롤러 기반 Modal을 새로운 컴포넌트 기반 API로 마이그레이션하는 방법에 대해 설명합니다. 과거에 Discourse는…

---

## [GitHub Actions를 사용하여 지속적 통합 설정하기](https://meta.discourse.org/t/setup-continuous-integration-using-github-actions/240150)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 8\
**마지막 업데이트:** [3월 3, 2025, 9:12오전 UTC](https://meta.discourse.org/t/setup-continuous-integration-using-github-actions/240150 "2025-03-03T09:12:26Z")

</div>

:mag: 개요 Discourse용 견고한 확장 기능을 구축하려면 플러그인이나 테마 컴포넌트에 지속적 통합(CI)을 포함하는 것이 현명할 수 있습니다. 이를 통해 오류를 조기에 감지하고 버그 발생 가능성을 줄일 수 있습니다…

---

## [구글의 'tachometer'를 사용해 Discourse의 JS 성능 변화를 측정하기](https://meta.discourse.org/t/using-googles-tachometer-to-measure-js-performance-changes-in-discourse/281158)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 0\
**마지막 업데이트:** [10월 5, 2023, 1:57오후 UTC](https://meta.discourse.org/t/using-googles-tachometer-to-measure-js-performance-changes-in-discourse/281158 "2023-10-05T13:57:29Z")

</div>

Discore 코어/플러그인/테마에서 클라이언트 사이드 작업을 수행할 때 성능 영향을 고려하는 것이 중요합니다. Google의 ‘Tachometer’ 프로젝트는 통계적으로 엄격한 벤치마킹 도구를 제공하며, 이를 통해 ...를 사용할 수 있습니다.

---

## [Ember 객체 소유권 (getOwner, 서비스 주입 등)](https://meta.discourse.org/t/ember-object-ownership-getowner-service-injections-etc/292080)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 0\
**마지막 업데이트:** [1월 19, 2024, 1:28오후 UTC](https://meta.discourse.org/t/ember-object-ownership-getowner-service-injections-etc/292080 "2024-01-19T13:28:42Z")

</div>

:warning: discourse-common/lib/get-owner에서 getOwner를 가져오는 것은 더 이상 권장되지 않습니다. 예를 들어 서비스에는 사용할 수 있는 몇 가지 방법이 있습니다. 컴포넌트/컨트롤러/루트에서는 서비스 주입을 사용해야 합니다 …

---

## [구형 Discourse 설치에서 플러그인 및 테마 버전 고정 (d-compat 브랜치)](https://meta.discourse.org/t/pinning-plugin-and-theme-versions-for-older-discourse-installs-d-compat-branches/272665)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 6\
**마지막 업데이트:** [7월 17, 2026, 10:56오전 UTC](https://meta.discourse.org/t/pinning-plugin-and-theme-versions-for-older-discourse-installs-d-compat-branches/272665 "2026-07-17T10:56:56Z")

</div>

:open\_book: 배경 테마 및 플러그인 개발자는 일반적으로 Discourse의 최신 릴리스를 대상으로 개발하되, 하위 호환성에 대해서는 걱정하지 않기를 원합니다. 하지만 구형 Discourse 릴리스를 실행 중인 사이트에는 여전히 특정 버전이 필요합니다…

---

## [How to run Discourse core, plugin and theme QUnit test suites](https://meta.discourse.org/t/how-to-run-discourse-core-plugin-and-theme-qunit-test-suites/66857)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 0\
**마지막 업데이트:** [7월 26, 2017, 2:09오후 UTC](https://meta.discourse.org/t/how-to-run-discourse-core-plugin-and-theme-qunit-test-suites/66857 "2017-07-26T14:09:58Z")

</div>

Discourse has extensive frontend tests for core, plugins and themes. Once you have a functioning local development environment, those tests can be run locally in a number of different ways. Running tests in the browser C…

---

## [Write acceptance tests and component tests for Ember code in Discourse](https://meta.discourse.org/t/write-acceptance-tests-and-component-tests-for-ember-code-in-discourse/49167)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 3\
**마지막 업데이트:** [2월 23, 2024, 12:42오후 UTC](https://meta.discourse.org/t/write-acceptance-tests-and-component-tests-for-ember-code-in-discourse/49167 "2024-02-23T12:42:10Z")

</div>

Automated tests are a great way to protect your code against future regressions. Many people are familiar with how to do this in our Rails codebase with rspec, but the Javascript side can be somewhat of an enigma to some…

---

## [커밋 전 코드 린트 및 포맷 자동 실행](https://meta.discourse.org/t/automatically-lint-and-format-code-before-commits/132947)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 0\
**마지막 업데이트:** [11월 8, 2019, 5:16오후 UTC](https://meta.discourse.org/t/automatically-lint-and-format-code-before-commits/132947 "2019-11-08T17:16:12Z")

</div>

Discourse는 git 훅을 위해 lefthook을 사용하며, 동일한 검사를 수동으로 실행하기 위한 주요 CLI 진입점으로 bin/lint를 사용합니다. 로컬 클론에서 작업하고 있다면, 훅을 한 번만 설치하십시오: pnpm install pnpm lefthook install Aft…

---

## [테마 설정용 Objects 유형](https://meta.discourse.org/t/objects-type-for-theme-setting/305009)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 32\
**마지막 업데이트:** [4월 13, 2026, 1:45오전 UTC](https://meta.discourse.org/t/objects-type-for-theme-setting/305009 "2026-04-13T01:45:38Z")

</div>

테마 설정에 사용할 수 있는 지원 유형에 새로운 유형인 objects를 도입합니다. 이 유형은 곧 비활성화(deprecate)할 예정인 기존 json\_schema 유형을 대체하는 데 사용할 수 있습니다. objects 유형 테마 설정 정의 cr…

---

## [Install the Discourse Theme CLI console app to help you build themes](https://meta.discourse.org/t/install-the-discourse-theme-cli-console-app-to-help-you-build-themes/82950)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 16\
**마지막 업데이트:** [7월 30, 2026, 8:47오전 UTC](https://meta.discourse.org/t/install-the-discourse-theme-cli-console-app-to-help-you-build-themes/82950 "2026-07-30T08:47:18Z")

</div>

The Discourse Theme CLI is a ruby gem that allows you to use your editor of choice when developing Discourse themes and theme components. As you save files the CLI will update the remote theme or component and changes t…

---

## [Create and share a color scheme](https://meta.discourse.org/t/create-and-share-a-color-scheme/61196)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 1\
**마지막 업데이트:** [8월 1, 2025, 6:49오후 UTC](https://meta.discourse.org/t/create-and-share-a-color-scheme/61196 "2025-08-01T18:49:05Z")

</div>

Discourse now supports importing color schemes from remote repository. Here I will demonstrate how you would go about doing this. Navigate to colors and add a color scheme. Head to /admin/customize/colors on your site…

---

## [Create and share a font theme component](https://meta.discourse.org/t/create-and-share-a-font-theme-component/62462)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 4\
**마지막 업데이트:** [8월 19, 2025, 10:34오후 UTC](https://meta.discourse.org/t/create-and-share-a-font-theme-component/62462 "2025-08-19T22:34:35Z")

</div>

Discourse supports importing themes containing assets from a remote repository. This allows theme authors to share fonts and images. Create a new git repository with the font mkdir discourse-roboto-theme cd discourse-r…

---

## [Developing Discourse Plugins - Part 6 - Add acceptance tests](https://meta.discourse.org/t/developing-discourse-plugins-part-6-add-acceptance-tests/32619)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 32\
**마지막 업데이트:** [6월 2, 2022, 11:06오전 UTC](https://meta.discourse.org/t/developing-discourse-plugins-part-6-add-acceptance-tests/32619 "2022-06-02T11:06:38Z")

</div>

Previous tutorial: Developing Discourse Plugins - Part 5 - Add an admin interface Did you know that Discourse has two large test suites for its code base? On the server side, our Ruby code has a test suite that uses rs…

---

## [Developing Discourse Plugins - Part 5 - Add an admin interface](https://meta.discourse.org/t/developing-discourse-plugins-part-5-add-an-admin-interface/31761)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 46\
**마지막 업데이트:** [9월 24, 2024, 11:10오전 UTC](https://meta.discourse.org/t/developing-discourse-plugins-part-5-add-an-admin-interface/31761 "2024-09-24T11:10:58Z")

</div>

Previous tutorial: Developing Discourse Plugins - Part 4 - Setup git Sometimes site settings aren’t enough of an admin interface for your plugin to work the way you want. For example, if you install the discourse-akism…

---

## [Developing Discourse Plugins - Part 4 - Setup git](https://meta.discourse.org/t/developing-discourse-plugins-part-4-setup-git/31272)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 10\
**마지막 업데이트:** [1월 30, 2024, 11:12오전 UTC](https://meta.discourse.org/t/developing-discourse-plugins-part-4-setup-git/31272 "2024-01-30T11:12:28Z")

</div>

Previous tutorial: Developing Discourse Plugins - Part 3 - Add custom site settings Now that your plugin is getting more sophisticated, it’s time to get more sophisticated about how you develop it. We suggest that you…

---

## [Developing Discourse Plugins - Part 1 - Create a basic plugin](https://meta.discourse.org/t/developing-discourse-plugins-part-1-create-a-basic-plugin/30515)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 32\
**마지막 업데이트:** [7월 8, 2025, 8:52오후 UTC](https://meta.discourse.org/t/developing-discourse-plugins-part-1-create-a-basic-plugin/30515 "2025-07-08T20:52:10Z")

</div>

Building a plugin in Discourse can be really simple, once you learn a couple of quirks. The goal of this post is to create a skeleton plugin and introduce you to the basics. Your development environment Make sure you ha…

---

## [Theme Developer Tutorial: 1. Introduction](https://meta.discourse.org/t/theme-developer-tutorial-1-introduction/357796)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**댓글:** 0\
**마지막 업데이트:** [3월 18, 2025, 3:59오후 UTC](https://meta.discourse.org/t/theme-developer-tutorial-1-introduction/357796 "2025-03-18T15:59:08Z")

</div>

This tutorial will teach you how to create a Discourse Theme or Theme Component from the ground up. While this topic assumes no previous experience working on Discourse themes, it does assume some prior experience using H…

---

## [Change icons globally](https://meta.discourse.org/t/change-icons-globally/87751)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 26\
**마지막 업데이트:** [10월 5, 2025, 1:10오후 UTC](https://meta.discourse.org/t/change-icons-globally/87751 "2025-10-05T13:10:20Z")

</div>

This is an easy way to change a Discourse icon globally. Right click on the icon you want to change and select “Inspect element” or “Inspect” (depends on the browser) Find the icon name Search a new icon here…

---

## [테마 커스터마이징 유지보수 최소화하기](https://meta.discourse.org/t/minimizing-maintenance-on-theme-customizations/261388)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 0\
**마지막 업데이트:** [4월 11, 2023, 11:58오후 UTC](https://meta.discourse.org/t/minimizing-maintenance-on-theme-customizations/261388 "2023-04-11T23:58:36Z")

</div>

Discourse는 테마를 통해 외관의 거의 모든 요소를 수정할 수 있도록 고도로 사용자 정의할 수 있습니다. 계속되는 Discourse 업데이트 및 새로운 기능과의 호환성을 유지하기 위해, 모든 테마는 주기적인 유지보수가 필요합…

---

## [Developing Discourse Plugins - Part 7 - Publish your plugin](https://meta.discourse.org/t/developing-discourse-plugins-part-7-publish-your-plugin/101636)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 4\
**마지막 업데이트:** [7월 29, 2021, 2:01오후 UTC](https://meta.discourse.org/t/developing-discourse-plugins-part-7-publish-your-plugin/101636 "2021-07-29T14:01:04Z")

</div>

Previous tutorial: Developing Discourse Plugins - Part 6 - Add acceptance tests You’ve created your plugin, you’ve uploaded it to GitHub and you’ve added tests. Great! Problem is, no one else knows about it. Documenti…

---

## [Insert text or images anywhere on your site using CSS pseudo-elements](https://meta.discourse.org/t/insert-text-or-images-anywhere-on-your-site-using-css-pseudo-elements/99200)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 0\
**마지막 업데이트:** [10월 11, 2018, 11:12오전 UTC](https://meta.discourse.org/t/insert-text-or-images-anywhere-on-your-site-using-css-pseudo-elements/99200 "2018-10-11T11:12:34Z")

</div>

So, you want to insert some text or image in your Discourse site. Regarding the text in most cases it is sufficient to modify it from /admin/customize/site\_texts. Sometimes, however, it is our desire to add a sentence …

---

## [Theme Developer Tutorial: 2. Creating a remote theme](https://meta.discourse.org/t/theme-developer-tutorial-2-creating-a-remote-theme/357797)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**댓글:** 0\
**마지막 업데이트:** [3월 18, 2025, 3:59오후 UTC](https://meta.discourse.org/t/theme-developer-tutorial-2-creating-a-remote-theme/357797 "2025-03-18T15:59:09Z")

</div>

In the last chapter, we created a basic theme via the Discourse admin interface. This works well enough for very simple themes. But as soon as you want to do something more complex, or share a theme more widely, you’ll n…

---

## [멀티사이트 개발 환경 설정하기](https://meta.discourse.org/t/set-up-a-multisite-development-environment/229310)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 0\
**마지막 업데이트:** [6월 7, 2022, 4:01오후 UTC](https://meta.discourse.org/t/set-up-a-multisite-development-environment/229310 "2022-06-07T16:01:37Z")

</div>

개발 환경에서 Discourse를 멀티사이트 모드로 실행할 수 있습니다. 멀티사이트 서버는 각 사이트를 제공하기 위해 서로 다른 데이터베이스와 호스트명을 사용합니다. 이는 특정 기능이나 플러그인을 개발할 때 유용하며…

---

## [Docker가 아닌 개발 환경에서 플러그인 설치하기](https://meta.discourse.org/t/install-plugins-in-your-non-docker-development-environment/205337)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 0\
**마지막 업데이트:** [10월 6, 2021, 9:47오전 UTC](https://meta.discourse.org/t/install-plugins-in-your-non-docker-development-environment/205337 "2021-10-06T09:47:24Z")

</div>

(이 가이드는 Docker를 사용하지 않는 개발용 설치만 다룹니다. Docker 개발용 🐋: Docker를 사용한 Discourse 개발용 설치 참고) 로컬 discourse를 설정하는 지침을 따랐다면 플러그인을 로컬에 설치할 수 있습…

---

## [Install Discourse for development using Docker](https://meta.discourse.org/t/install-discourse-for-development-using-docker/102009)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**댓글:** 226\
**마지막 업데이트:** [5월 22, 2026, 5:35오전 UTC](https://meta.discourse.org/t/install-discourse-for-development-using-docker/102009 "2026-05-22T05:35:27Z")

</div>

Developing using Docker Since Discourse runs in Docker, you should be able to run Discourse directly from your source directory using a Discourse development container. :white\_check\_mark: Pros: No need to install any …

---

## [Developing Discourse on GitHub Codespaces](https://meta.discourse.org/t/developing-discourse-on-github-codespaces/336131)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**댓글:** 14\
**마지막 업데이트:** [9월 9, 2025, 1:50오후 UTC](https://meta.discourse.org/t/developing-discourse-on-github-codespaces/336131 "2025-09-09T13:50:26Z")

</div>

GitHub Codespaces is a very fast way to get started with Discourse development. Their free tier is good for 30 hours per month of a 4-core machine. Getting Started Navigate to the github repository Press the , (com…

---

## [Developing Discourse using a Dev Container](https://meta.discourse.org/t/developing-discourse-using-a-dev-container/336366)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**댓글:** 13\
**마지막 업데이트:** [5월 28, 2026, 6:59오후 UTC](https://meta.discourse.org/t/developing-discourse-using-a-dev-container/336366 "2026-05-28T18:59:23Z")

</div>

Dev Containers is an open standard for configuring a development environment inside a container. This almost entirely eliminates the need to install/configure Discourse-specific tools/dependencies on your local machine, …

[이전 페이지](https://meta.discourse.org/c/documentation/developer-guides/56.md)

[다음 페이지](https://meta.discourse.org/c/documentation/developer-guides/56.md?page=2)
