# Discourse의 읽기 전용 모드

**URL:** https://meta.discourse.org/t/read-only-modes-in-discourse/296976
**Category:** Site Management
**Tags:** how-to, explanation, read-only
**Created:** [2월 27, 2024, 10:13오후 UTC](https://meta.discourse.org/t/read-only-modes-in-discourse/296976 "2024-02-27T22:13:14Z")
**Posts on this page:** 12
**Page:** 1

<div class="post-metadata">

### Author: ![Discourse](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/discourse/32/148734_2.png) [@Discourse](https://meta.discourse.org/u/Discourse)
#### Post date: [2월 27, 2024, 10:13오후 UTC](https://meta.discourse.org/t/read-only-modes-in-discourse/296976/1 "2024-02-27T22:13:14Z")

</div>

> 🔖 이 가이드에서는 Discourse에서 사용할 수 있는 다양한 읽기 전용(Read-Only) 모드, 각 모드를 활성화 및 비활성화하는 방법, 그리고 각 모드를 사용해야 하는 시나리오에 대해 설명합니다.
> 
> 🙋 필요한 사용자 권한: 관리자

Discourse에서 활기찬 온라인 커뮤니티를 관리하다 보면 관리자가 사용자 활동을 일시적으로 제한해야 하는 경우가 있습니다. 이러한 상황은 서버 유지보수, 백업 처리, 서버 이전 등 다양한 형태로 발생할 수 있습니다. 이러한 시기에 사용자 접근을 완전히 차단하지 않으면서도 포럼 활동을 제한하는 것이 중요합니다.

Discourse는 사이트 내에서 다양한 유형의 상호작용을 일시적으로 동결할 수 있도록 관리자가 활성화할 수 있는 다양한 **읽기 전용(Read-Only) 모드**를 제공합니다.

이 가이드에서는 이러한 모드, 특히 활성화 및 비활성화 방법과 특정 모드가 겹치는 상황을 처리하는 방법에 초점을 맞추어 살펴봅니다.

## 읽기 전용 모드 이해하기

Discourse는 다양한 관리 요구 사항에 부합하도록 두 가지 다른 수준의 읽기 전용 모드를 지원합니다. 다음과 같습니다:

1. **전체 읽기 전용 모드 (Full Read Only-Mode)**

- 포럼의 모든 쓰기 작업을 제한하여 사용자가 게시, 댓글, 좋아요와 같은 콘텐츠 생성 또는 수정을 방지합니다.
- 포럼이 현재 상태로 사실상 "동결"되도록 하여, 사용자는 데이터베이스에 영향을 주지 않고 기존 콘텐츠를 읽거나 탐색할 수 있습니다.
- 데이터베이스의 현재 상태를 보존하기 위해 관리자 사이트 설정 또는 사이트 사용자 정의 변경을 비활성화합니다.
- 일반 사용자의 새 포럼 로그인을 비활성화합니다. 관리자는 관리자 이메일 로그인 플로우(`/u/admin-login`)를 사용하여 여전히 로그인할 수 있습니다.
- API 호출은 읽기(GET)는 가능하지만, 쓰기(POST/PUT/DELETE)는 불가능합니다.
- 대기 중인 발신 웹훅은 전달되지만, 웹훅을 트리거하는 작업이 차단되므로 새 웹훅은 트리거되지 않습니다.
- 수신 웹훅(이메일 바운스)은 503 응답으로 차단됩니다. 이메일 제공업체는 자체 백오프 스케줄에 따라 재시도합니다.

1. **스태프 쓰기 전용 모드 (Staff Writes Only-Mode)**

- _일반 사용자_의 포럼 내 쓰기 작업(게시, 댓글, 좋아요 등)을 제한합니다. 비스태프 사용자는 읽기 전용 작업으로 제한되지만, 여전히 계정에 로그인할 수 있습니다.
- 관리자 및 모더레이터의 활동이 정상적으로 계속되도록 허용합니다. 관리자는 사이트 설정을 변경할 수 있고, 스태프 사용자는 게시, 좋아요, 프로필 수정과 같은 쓰기 작업을 수행할 수 있습니다.
- API 호출은 읽기(GET)가 가능합니다. 스태프 API 키만 쓰기(POST/PUT/DELETE)를 수행할 수 있습니다.
- 대기 중인 발신 웹훅은 전달됩니다. 스태프의 작업은 새 발신 웹훅을 트리거할 수 있으며 이는 성공적으로 처리되지만, 비스태프 사용자의 작업은 웹훅을 트리거하지 않습니다.
- 수신 웹훅(이메일 바운스)은 503 응답으로 차단됩니다. 이메일 제공업체는 자체 백오프 스케줄에 따라 재시도합니다.

이러한 모드는 중요한 관리 기간 동안 포럼의 운영 유연성을 보장합니다.

## 읽기 전용 모드 활성화/비활성화 방법

> ⚠ 관리자는 다른 읽기 전용 모드 간의 전환을 신중하게 관리해야 합니다. 어떤 읽기 전용 모드를 활성화하기 전에 이전에 활성화된 모드가 비활성화되었는지 확인하십시오.

### 전체 읽기 전용 모드

#### Rails 콘솔을 통한 방법

Discourse 설치 환경에 접근 권한이 있다면, Docker 컨테이너에 `./launcher enter app` 명령으로 진입한 후 `rails c` 명령으로 Rails 콘솔을 열고 다음 명령을 실행하십시오:

```plaintext
Discourse.enable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

```

#### 관리자 패널을 통한 방법

웹 인터페이스를 통해 관리자 접근 권한이 있다면, `관리자(Admin)` \> `백업(Backups)` \> `읽기 전용 모드 활성화(Enable Read-Only Mode)`로 이동하여 읽기 전용 모드를 활성화할 수 있습니다.

 ![image](https://global.discourse-cdn.com/meta/original/4X/8/a/6/8a6f043d5af7859632dd3b280ae9137f187af2ac.png)

읽기 전용 모드를 비활성화하려면 다음 Rails 명령을 실행하십시오:

```plaintext
Discourse.disable_readonly_mode(Discourse::USER_READONLY_MODE_KEY)

```

또는 `관리자(Admin)` \> `백업(Backups)` \> `읽기 전용 모드 비활성화(Disable Read-Only Mode)`로 이동하여 관리자 패널을 사용할 수도 있습니다.

 ![image](https://global.discourse-cdn.com/meta/original/4X/a/3/0/a30dd57bef661b0deb1f45b3d24984334ad640f4.png)

### 스태프 쓰기 전용 모드

> :discourse: 스태프 쓰기 전용 모드는 Discourse Rails 콘솔에서만 활성화/비활성화할 수 있습니다.如果您的 사이트가 Discourse에 의해 호스팅되는 경우, 이 모드 중 하나를 활성화하거나 비활성화하려면 team@discourse.org에 문의하십시오.

스태프 쓰기 전용 모드를 활성화하려면 다음 Rails 콘솔 명령을 사용하십시오:

```plaintext
Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

```

비활성화하려면:

```plaintext
Discourse.disable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)

```

## 모범 사례

- **적시 소통** : 적절한 기대치를 설정하기 위해 계획된 읽기 전용 기간에 대해 커뮤니티에 사전에 알리십시오.
- **테스트** : 이러한 모드를 중요한 작업 중에 구현하기 전에, 그 영향을 이해하기 위해 트래픽이 적은 시간에 테스트를 수행하십시오.
- **문서화** : 향후 운영 계획 수립을 돕기 위해 각 모드가 언제, 왜 활성화 또는 비활성화되었는지에 대한 상세한 기록을 유지하십시오.

## 자주 묻는 질문 (FAQ)

- **읽기 전용 모드를 활성화/비활성화하는 데 얼마나 걸립니까?**

- **도움말! 읽기 전용 모드 때문에 제 사이트에 잠금이 걸렸습니다 - 사이트를 다시 접근하려면 어떻게 해야 합니까?**

- **[discourse/lib/discourse.rb](https://github.com/discourse/discourse/blob/main/lib/discourse.rb#L746-L754)에 나열된 다른 `READ-ONLY` 모드가 있는 것을 확인했습니다. 이 모드들은 무엇을 하는 것입니까?**

---

<div class="post-metadata">

### Author: ![Ed\_S](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_s/32/134015_2.png) [@Ed\_S](https://meta.discourse.org/u/Ed_S)
#### Post date: [2월 28, 2024, 8:50오전 UTC](https://meta.discourse.org/t/read-only-modes-in-discourse/296976/2 "2024-02-28T08:50:46Z")

</div>

> [@SaraDev](#):
>
> 1. **사용자 읽기 전용 모드**
> 
> - 일반 사용자의 게시, 좋아요, 프로필 수정 등 쓰기 작업이 제한됩니다.
> - 관리자 및 모더레이터의 활동은 정상적으로 계속됩니다.
> 
> 1. **스태프 쓰기 전용 모드**
> 
> - 스태프(관리자 및 모더레이터)만 게시판에 글을 쓸 수 있습니다.
> - 일반 사용자는 읽기 작업만 가능합니다.

차이를 찾을 수 없습니다! 실제로 차이가 있다면, 이 설명들을 그에 맞게 조정할 수 있을까요?

---

<div class="post-metadata">

### Author: ![SaraDev](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/saradev/32/335139_2.png) [@SaraDev](https://meta.discourse.org/u/SaraDev)
#### Post date: [2월 28, 2024, 8:52오후 UTC](https://meta.discourse.org/t/read-only-modes-in-discourse/296976/3 "2024-02-28T20:52:56Z")

</div>

> [@Ed\_S](#):
>
> 차이를 볼 수 없네요! 실제로 차이가 있다면, 이 설명들을 그에 맞게 조정할 수 있을까요?

여기에 대해 좀 더 명확하도록 가이드를 업데이트했습니다. 읽기 전용 모드에 대해 여전히 질문이 있으시면 알려주세요. 🙂

---

<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: [2월 29, 2024, 3:47오후 UTC](https://meta.discourse.org/t/read-only-modes-in-discourse/296976/4 "2024-02-29T15:47:05Z")

</div>

그렇다면

`discourse enable_readonly`는 무엇을 하는 것일까요?

> <https://github.com/discourse/discourse/blob/main/script/discourse#L196-L202>

이것은 `READONLY_MODE_KEY`를 사용하며, 해당 `ttl`을 60으로 설정하여 어느 시점에 다시 꺼지도록 만듭니다. 이제야 깨닫게 되었는데

> [@SaraDev](#):
>
> 이 모드는 `discourse enable_readonly`와 `discourse disable_readonly`를 사용하여 Discourse 커맨드 라인 인터페이스에서도 활성화하거나 비활성화할 수 있습니다. 하지만 이 키는 컨테이너 재시작을 거치면 유지되지 않습니다.

이 명령어의 기본 동작이 이렇게 설정된 데에는 어떤 이유가 있을까요? 이 명령어가 웹 인터페이스의 읽기 전용 모드와 완전히 다르다는 것을 깨닫기까지 저에게는 거의 10년이 걸렸고, 그 과정에서 여러 번 당해봤습니다. 그리고 누군가 이 키들에 대해 한 번 알려주려 했던 기억이 나는데, 당시에는 그 중요성을 제대로 이해하지 못했습니다.

개인적으로 `discourse enable_readonly`가 더 합리적인 동작을 하려면 `Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)`를 실행하는 것이 훨씬 낫다고 생각합니다. 이런 걸 몇 년 전에라도 알아차렸으면 좋았을 텐데!

다음과 같은 PR을 제출해도 될까요?

```plaintext
  desc "enable_readonly", "Enable the readonly mode, allowing staff writes"
  def staff_writes_only
    load_rails

    Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)
    puts 'The site is now in readonly mode with staff writes permitted.'
  end

```

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [3월 4, 2024, 7:09오후 UTC](https://meta.discourse.org/t/read-only-modes-in-discourse/296976/6 "2024-03-04T19:09:22Z")

</div>

> [@pfaffman](#):
>
> IMHO, `discourse enable_readonly`가 `Discourse.enable_readonly_mode(Discourse::STAFF_WRITES_ONLY_MODE_KEY)`를 실행하는 것이 훨씬 합리적이라고 생각합니다. 이걸 수년 전에 알아차렸으면 좋았을 텐데 말이죠!

이 부분은 잘 알지 못하지만, `enable_readonly_mode`가 사이트를 `staff_writes_only_mode`로 설정하는 것은 혼란을 줄 것 같습니다. 두 가지는 서로 다른 모드이며, 특정 작업을 수행할 때(예: 복원 중에는 DB에 대한 스태프의 쓰기 권한이 제거되므로) 스태프에게 DB 쓰기 권한을 부여하지 않는 것이 바람직한 경우가 있습니다.

대신 여기에서 다음 몇 가지 사항을 수행할 수 있습니다:

1. 읽기 전용 모드(readonly mode)가 해당 작업 설명에 TTL을 설정한다는 점을 명확히 합니다.
2. `keep_readonly_mode`를 호출하는 작업을 추가하여 60분 이상으로 연장할 수 있도록 합니다.
3. `enable_staff_writes_only` 및 `disable_staff_writes_only` 작업을 추가합니다.

---

<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: [3월 4, 2024, 7:46오후 UTC](https://meta.discourse.org/t/read-only-modes-in-discourse/296976/7 "2024-03-04T19:46:18Z")

</div>

> [@pmusaraj](#):
>
> 이 부분에 대해 잘 알고 있지는 않지만, `enable_readonly_mode`가 사이트를 `staff_writes_only_mode`로 설정하는 것은 혼란을 줄 것 같습니다.

동의합니다. 하지만 "잠시 동안 읽기 전용 모드를 설정한다"는 표현보다는 훨씬 혼란이 적을 것입니다.

> [@pmusaraj](#):
>
> 예를 들어 복원(restore) 중에는 DB에 대한 작성 권한이 허용되지 않도록 해야 합니다(복원 과정에서 데이터가 삭제되므로).

복원 스크립트가 스스로 읽기 전용 모드를 설정한다고 꽤 확신합니다. 따라서 이 명령어에는 영향을 받지 않습니다.

> [@pmusaraj](#):
>
> - 읽기 전용 모드(readonly mode)가 해당 작업 설명에 TTL을 설정한다는 점을 명확히 하기

설정을 변경할 때 X분 동안 설정된다고 명시하는 것이 더 좋겠습니다. 작업 설명을 찾는 것이 그리 쉬운 일이 아니기 때문입니다.

> [@pmusaraj](#):
>
> - `keep_readonly_mode`를 호출하는 작업을 추가하여 60분을 초과하도록 확장 가능하게 하기

아마도 그렇겠습니다. 누가 이를 사용할지 명확하지 않습니다.

> [@pmusaraj](#):
>
> 1. `enable_staff_writes_only`와 `disable_staff_writes_only` 작업 추가

그것은 훌륭할 것입니다!

또한, rake 작업과 `discourse` 명령어를 통해 사용할 수 있는 명령어를 혼동하지 않도록 명확히 해야 합니다.

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [3월 4, 2024, 7:55오후 UTC](https://meta.discourse.org/t/read-only-modes-in-discourse/296976/8 "2024-03-04T19:55:51Z")

</div>

> [@pfaffman](#):
>
> 설정된 경우 X분으로 설정되어 있다고 명시하는 것이 더 나을 것 같습니다. 설명을 찾는 것이 그리 쉽지는 않습니다.

이해가 갑니다. 혹시 PR로 제출해 주실 수 있으신가요? 가능하다면 `enable_staff_writes_only`와 `disable_staff_writes_only` 명령어에 대해서도 마찬가지입니다. 감사합니다!

---

<div class="post-metadata">

### Author: ![Ethsim2](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ethsim2/32/522255_2.png) [@Ethsim2](https://meta.discourse.org/u/Ethsim2)
#### Post date: [6월 7, 2025, 8:19오전 UTC](https://meta.discourse.org/t/read-only-modes-in-discourse/296976/9 "2025-06-07T08:19:37Z")

</div>

읽기 전용으로 설정한 후 어떤 시계(카운트다운)가 멈추는지 궁금합니다. 읽기 전용으로 설정한 후에도 토픽이 위로 올라가는(부스트) 현상은 발생하는가요?

---

<div class="post-metadata">

### Author: ![Ethsim2](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ethsim2/32/522255_2.png) [@Ethsim2](https://meta.discourse.org/u/Ethsim2)
#### Post date: [6월 7, 2025, 8:56오전 UTC](https://meta.discourse.org/t/read-only-modes-in-discourse/296976/10 "2025-06-07T08:56:23Z")

</div>

웹 UI에서 읽기 전용 모드가 설정된 경우 업데이트가 작동하지 않는 것처럼 보입니다.

---

<div class="post-metadata">

### Author: ![Lucian\_Chung](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lucian_chung/32/552885_2.png) [@Lucian\_Chung](https://meta.discourse.org/u/Lucian_Chung)
#### Post date: [4월 30, 2026, 1:42오후 UTC](https://meta.discourse.org/t/read-only-modes-in-discourse/296976/11 "2026-04-30T13:42:31Z")

</div>

UI가 업데이트된 것 같아 관리자 백업 섹션에서 읽기 전용 모드를 비활성화하는 옵션을 찾을 수 없습니다. UI를 통해 이 기능을 비활성화하는 방법은 무엇인가요?

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [4월 30, 2026, 4:47오후 UTC](https://meta.discourse.org/t/read-only-modes-in-discourse/296976/12 "2026-04-30T16:47:30Z")

</div>

이상하네요. 활성화와 비활성화 버튼을 볼 수 있고, 정상적으로 작동하는 것 같습니다. 현재 보이는 화면의 스크린샷을 보내주실 수 있을까요?

---

<div class="post-metadata">

### Author: ![southpaw](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/southpaw/32/79352_2.png) [@southpaw](https://meta.discourse.org/u/southpaw)
#### Post date: [5월 1, 2026, 2:43오후 UTC](https://meta.discourse.org/t/read-only-modes-in-discourse/296976/13 "2026-05-01T14:43:09Z")

</div>

안녕하세요 @Lucian\_Chung님,

자신의 사이트가 자체 호스팅인지, 아니면 Discourse에서 호스팅되는지, 후자인 경우 어떤 플랜인지도 함께 알려 주세요. 호스팅 사이트의 경우 특정 조건에서는 UI에서 읽기 전용 모드를 비활성화할 수 없습니다.
