# 삭제된 긴 주제 복원하기

**URL:** https://meta.discourse.org/t/restore-a-long-topic-that-has-been-deleted/180986
**Category:** Sysadmins
**Tags:** how-to
**Created:** [2월 24, 2021, 8:58오전 UTC](https://meta.discourse.org/t/restore-a-long-topic-that-has-been-deleted/180986 "2021-02-24T08:58:16Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![neounix](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/neounix/32/215617_2.png) [@neounix](https://meta.discourse.org/u/neounix)
#### Post date: [2월 24, 2021, 8:58오전 UTC](https://meta.discourse.org/t/restore-a-long-topic-that-has-been-deleted/180986/1 "2021-02-24T08:58:16Z")

</div>

우리 포럼에서 300개 이상의 게시글이 있는 긴 토픽 하나를 운영했는데, 상용 웹 개발 클라이언트 관련 내용이었습니다. 그런데 몇일 전 일부 게시글을 다른 토픽으로 이동시킨 후, 해당 토픽 전체가 사라져 버렸습니다.

사용자 활동 로그를 확인해 보니, 사라진 토픽이 삭제되거나 수정된 기록은 없었습니다. 유일한 작업은 약 10개의 게시글이 새 토픽으로 이동된 것이었습니다.

오늘 Discourse DB를 확인해 보니 306개의 게시글은 모두 존재했지만, 이 306개 게시글의 topic\_id를 확인했을 때 해당 id를 가진 토픽은 비어 있었습니다. ` []`

예를 들어, 게시글 기록에서 사라진 토픽의 topic\_id가 "300000"이라고 가정해 보겠습니다.

콘솔에서 다음을 실행했을 때 결과는 다음과 같았습니다:

```ruby
> Topic.with_deleted.where(id: 300000)
> []
> Post.where(topic_id:300000).count
> 306

```

이 306개의 게시글을 모두 새 토픽으로 복원했습니다. Discourse UI에서 “Dummy”(플레이스홀더) 토픽을 생성한 후, “고아(부모가 없는)” 게시글들의 topic\_id를 모두 새 플레이스홀더 토픽의 id로 변경했습니다. 과정은 다음과 같습니다:

새로 생성된 토픽(더미 토픽)의 id가 304000이라고 가정하면:

```ruby
Post.where(topic_id: 300000).update_all(topic_id: 304000)

```

이렇게 하면 306개의 게시글이 모두 새 플레이스홀더/더미 토픽 id로 복원되었습니다.

그 후 새 토픽의 제목을 단순히 수정했을 뿐인데 모든 것이 정상으로 돌아왔습니다. 또한 이 긴 비공개 토픽에 대한 링크가 없었기 때문에 새 토픽 id로 인해 링크가 깨질 우려도 없었고, 모든 것이 잘 해결되었습니다.

토픽 기록이 비어 있었고 해당 topic\_id를 가진 모든 게시글은 그대로 남아 있던 이유는 정확히 알 수 없습니다. 기록과 로그에는 해당 토픽에 대한 어떠한 작업(삭제, 수정)도 없었습니다. 해당 토픽에 대한 유일한 작업은 일부 게시글을 새 토픽으로 이동시킨 것이었는데, 이것이 토픽 기록을 "초기화"시켰을 리가 없습니다.

이 상황을 재현할 수 없기 때문에(그리고 무슨 일이 일어났는지 정확히 모르기 때문에) 이를 "버그"로 보고하지 않았습니다. 대신 오늘 시간이 나자 연구를 통해 306개의 게시글이 부모 토픽을 잃어버렸다는 것을 발견했고, 이 방법으로 모두 복원했습니다.

원래 토픽 id를 유지하고 싶었다면 원래 토픽 기록을 복원하는 것을 시도했을 것입니다. 하지만 이는 다소 더 많은 작업이 필요해 보이므로, 306개의 “토픽 없는” 게시글을 새 토픽에 할당했고, 결과는 예상대로였습니다:

```ruby
> Post.where(topic_id:304000).count
> 307

```

앞으로 유사한 상황을 겪는 분들에게 도움이 되기를 바랍니다.
