# UI가 짧은 시간 동안 무작위로 오류가 납니다

**URL:** https://meta.discourse.org/t/ui-randomly-fails-during-a-short-period/232293
**Category:** Self-hosting
**Created:** [7월 8, 2022, 10:12오전 UTC](https://meta.discourse.org/t/ui-randomly-fails-during-a-short-period/232293 "2022-07-08T10:12:47Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![gmoirod](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gmoirod/32/263768_2.png) [@gmoirod](https://meta.discourse.org/u/gmoirod)
#### Post date: [7월 8, 2022, 10:12오전 UTC](https://meta.discourse.org/t/ui-randomly-fails-during-a-short-period/232293/1 "2022-07-08T10:12:48Z")

</div>

안녕하세요!

외부 Postgres와 Redis를 사용하여 자체 ‘stable’ 버전의 Discourse를 설치했습니다.  
아키텍처에 대해 정확히 말씀드리면: Azure 환경에서 1개의 LoadBalancer, NFS 공유를 통한 백업 및 이미지 저장을 위한 Discourse 컨테이너를 호스팅하는 1개의 VM, 1개의 Postgres, 1개의 Redis로 구성되어 있습니다.

자체 로고, discourse-calendar 및 discourse-news 플러그인(그 외 여기서는 관련 없는 다른 사항들 포함)으로 커스터마이징을 했습니다.

무작위로 약 30분 정도의 기간 동안 일부 UI 오류가 발생합니다:

- 메인 로고가 기본 로고로 되돌아옵니다.
- 파비콘이 기본 파비콘으로 되돌아옵니다.
- discourse-calendar가 생성한 “upcoming-events” 페이지가 사라집니다(링크가 없고 URL로 직접 접속 시 404 응답이 반환됩니다).
- discourse-news에 지정된 커스텀 로고(URL 지정)가 사라집니다.

이후 다시 정상으로 돌아옵니다.

로그에는 이에 대한 정보가 전혀 없습니다.  
브라우저 콘솔에도 아무것도 표시되지 않습니다.  
알 수 있는 한 가지는 이 기간 동안 Redis 캐시 미스(cache misses)가 증가한다는 점입니다.

이 문제를 해결하는 데 도움을 주실 수 있는 분이 있을까요? 관련 로그를 어디서 찾아야 할지조차 모르겠습니다…

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [7월 22, 2022, 8:37오전 UTC](https://meta.discourse.org/t/ui-randomly-fails-during-a-short-period/232293/2 "2022-07-22T08:37:08Z")

</div>

> [@gmoirod](#):
>
> 외부 Postgres와 Redis를 사용하여 자체 ‘stable’ discourse를 설치했습니다.

표준 설치와 너무 달라서 제가 아는 것이 없습니다. 🙂

필요한 것을 찾았나요?

---

<div class="post-metadata">

### Author: ![gmoirod](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gmoirod/32/263768_2.png) [@gmoirod](https://meta.discourse.org/u/gmoirod)
#### Post date: [7월 22, 2022, 8:41오전 UTC](https://meta.discourse.org/t/ui-randomly-fails-during-a-short-period/232293/3 "2022-07-22T08:41:41Z")

</div>

> [@JammyDodger](#):
>
> 필요한 것을 찾았나요?

아니요, 찾지 못했습니다.  
그리고 제 문제는 가끔 계속 나타납니다 😥  
어디서 단서를 찾아야 할지 모르겠어요…

---

<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: [7월 22, 2022, 9:04오전 UTC](https://meta.discourse.org/t/ui-randomly-fails-during-a-short-period/232293/4 "2022-07-22T09:04:34Z")

</div>

가장 쉬운 방법은 스테이브/스탠다드 설치로 전환하는 것입니다. 비용도 더 저렴할 것입니다. 그게 대체 뭘 의미하는지 상상조차 되지 않습니다.

---

<div class="post-metadata">

### Author: ![gmoirod](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gmoirod/32/263768_2.png) [@gmoirod](https://meta.discourse.org/u/gmoirod)
#### Post date: [7월 22, 2022, 10:55오전 UTC](https://meta.discourse.org/t/ui-randomly-fails-during-a-short-period/232293/5 "2022-07-22T10:55:47Z")

</div>

@pfaffman 제 관점에서는 표준 설치를 사용했습니다.  
다만, 제공된 기능을 이용해 외부 DB와 Redis를 사용했습니다.  
하지만 표준 설치에 설명된 app.yaml과 docker build, run은 그대로 사용했습니다.

이는 고가용성과 다양한 확장 전략을 제공하기 위해서였습니다. 완전한 스탠드얼론 배포에서는 수직 확장(노드 스케일업)만 가능하고, 고가용성을 확보할 수 없기 때문입니다.

---

<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: [7월 22, 2022, 11:45오전 UTC](https://meta.discourse.org/t/ui-randomly-fails-during-a-short-period/232293/6 "2022-07-22T11:45:09Z")

</div>

알겠습니다. 그렇게 하면 작동할 것 같네요. 제 추측으로는 가상 머신을 0개로 축소(scale down)하는 과정에서 브라우저에 캐시된 사이트가 표시되고 있는 것 같습니다. 아니면 로드 밸런서가 호스트에 연결되지 못하는 다른 문제가 있을 수도 있고요. 또는 Discourse가 실제 IP를 받지 못해 레이트 리미팅이 적용되는 경우일 수도 있지만, 보통은 그 경우 에러가 표시되죠.

하지만 현재 고가용성 기능이 오히려 낮은 가용성을 제공하고 있습니다. 대부분의 시간 동안 수십 명의 사용자가 접속하다가 가끔 수천 명으로 급증하는 경우(스포츠 사이트처럼)가 아니라면, 오토스케일링은 해결보다는 더 많은 문제를 일으킬 가능성이 큽니다.

따라서 제가 먼저 할 일은 로드 밸런서를 제거해 보며 문제가 해결되는지 확인하는 것입니다. 그 다음에 어떻게 할지 결정하면 됩니다. 한 달에 한 번 정도 발생하는 문제라면 원인을 파악하기가 쉽지 않을 겁니다.
