<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://blog.occm.cc/</id>
    <title>자커마스 블로그</title>
    <updated>2026-05-23T16:33:44.949Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <author>
        <name>유메카</name>
        <email>yumeka@occm.cc</email>
        <uri>https://blog.occm.cc</uri>
    </author>
    <link rel="alternate" href="https://blog.occm.cc/"/>
    <subtitle>자커마스에 대해 다루는 블로그입니다.</subtitle>
    <icon>https://blog.occm.cc/favicon.svg</icon>
    <rights>All rights reserved 2026, 유메카</rights>
    <entry>
        <title type="html"><![CDATA[서버 접속 불가 장애 원인 분석 및 재발 방지 대책]]></title>
        <id>https://blog.occm.cc/server-outage-postmortem-april-2026</id>
        <link href="https://blog.occm.cc/server-outage-postmortem-april-2026"/>
        <updated>2026-04-24T15:00:00.000Z</updated>
        <summary type="html"><![CDATA[2026년 4월 21일, 25일 발생한 자커마스 서버 3회 접속 불가 장애의 원인 분석 및 재발 방지 대책]]></summary>
        <content type="html"><![CDATA[<main class="notion light-mode notion-page notion-block-34d9d378ca7f801d86f3cf4f51e5da2c"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-34d9d378ca7f804cb898d9b80ae6d17d" data-id="34d9d378ca7f804cb898d9b80ae6d17d"><span><div id="34d9d378ca7f804cb898d9b80ae6d17d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f804cb898d9b80ae6d17d" title="먼저 사과의 말씀부터"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">먼저 사과의 말씀부터</span></span></h3><div class="notion-text notion-block-34d9d378ca7f80f98c54ed8eb93c491e">안녕하세요. 자커마스를 운영하고 있는 유메카입니다.</div><div class="notion-text notion-block-34d9d378ca7f80a5a168d66b645ceb25">2026년 4월 21일과 4월 25일, 총 세 차례에 걸쳐 자커마스를 포함한 서버 전체가 응답 불가 상태가 되어 강제 재부팅을 해야 했습니다. 이용하시던 분들께 불편을 드린 점 진심으로 사과드립니다.</div><div class="notion-text notion-block-34d9d378ca7f800b83f2f6c031ca366c">이 글에서는 무슨 일이 있었는지, 왜 일어났는지, 앞으로 어떻게 방지할 것인지를 최대한 알기 쉽게 설명드리겠습니다.</div><hr class="notion-hr notion-block-34d9d378ca7f80da9da2cf94391574f4"/><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-34d9d378ca7f8048beb4f4d05b162dd3" data-id="34d9d378ca7f8048beb4f4d05b162dd3"><span><div id="34d9d378ca7f8048beb4f4d05b162dd3" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f8048beb4f4d05b162dd3" title="장애 발생 일시"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">장애 발생 일시</span></span></h3><table class="notion-simple-table notion-block-34d9d378ca7f80d8887ada0e6363aa79"><tbody><tr class="notion-simple-table-row notion-simple-table-header-row notion-block-34d9d378ca7f8083b9cac5f699ac8196"><td class="" style="width:89px"><div class="notion-simple-table-cell">횟차</div></td><td class="" style="width:264px"><div class="notion-simple-table-cell">장애 인지 시각 (한국 시간)</div></td><td class="" style="width:264px"><div class="notion-simple-table-cell">복구 시각</div></td></tr><tr class="notion-simple-table-row notion-block-34d9d378ca7f801fb678ca859ac38627"><td class="" style="width:89px"><div class="notion-simple-table-cell">1차</div></td><td class="" style="width:264px"><div class="notion-simple-table-cell">2026년 4월 21일 (화) 오전 5시 03분</div></td><td class="" style="width:264px"><div class="notion-simple-table-cell">오전 5시 12분 (재부팅 후 복구)</div></td></tr><tr class="notion-simple-table-row notion-block-34d9d378ca7f8049a1a7d11f447778aa"><td class="" style="width:89px"><div class="notion-simple-table-cell">2차</div></td><td class="" style="width:264px"><div class="notion-simple-table-cell">2026년 4월 25일 (토) 오전 6시 19분</div></td><td class="" style="width:264px"><div class="notion-simple-table-cell">오전 6시 25분 (재부팅 후 복구)</div></td></tr><tr class="notion-simple-table-row notion-block-34d9d378ca7f8044913bc4d6261483f2"><td class="" style="width:89px"><div class="notion-simple-table-cell">3차</div></td><td class="" style="width:264px"><div class="notion-simple-table-cell">2026년 4월 25일 (토) 오전 10시 43분</div></td><td class="" style="width:264px"><div class="notion-simple-table-cell">오전 10시 48분 (재부팅 후 복구)</div></td></tr></tbody></table><div class="notion-text notion-block-34d9d378ca7f80659947f07436ae8b74">세 번 모두 SSH 접속(서버에 원격으로 접속하는 방법)이 완전히 차단되었고, 웹 서비스도 전부 응답하지 않았습니다. 서버가 켜져 있어도 아무것도 할 수 없는 상태였기 때문에 불가피하게 강제 재부팅을 진행했습니다.</div><hr class="notion-hr notion-block-34d9d378ca7f8057bceff6882b5c1bed"/><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-34d9d378ca7f80b6af33da76ad64e415" data-id="34d9d378ca7f80b6af33da76ad64e415"><span><div id="34d9d378ca7f80b6af33da76ad64e415" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f80b6af33da76ad64e415" title="원인: 서버의 메모리가 한계를 넘었습니다"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">원인: 서버의 메모리가 한계를 넘었습니다</span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-34d9d378ca7f80c39544e7108ea26fd6" data-id="34d9d378ca7f80c39544e7108ea26fd6"><span><div id="34d9d378ca7f80c39544e7108ea26fd6" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f80c39544e7108ea26fd6" title="메모리란 무엇인가요?"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">메모리란 무엇인가요?</span></span></h4><div class="notion-text notion-block-34d9d378ca7f80ecac3fec8e9de2e3a9">컴퓨터에는 저장 공간(하드디스크/SSD)과는 별개로 <b>메모리(RAM)</b> 라는 것이 있습니다. 하드디스크가 책장이라면, 메모리는 책상 위 공간입니다. 프로그램이 실행될 때는 반드시 메모리 위에 올라와야 하고, 책상이 가득 차면 아무것도 더 꺼낼 수 없게 됩니다.</div><div class="notion-text notion-block-34d9d378ca7f800797fbc7526d634cbe">이 서버의 메모리는 총 <b>32GB</b>입니다. 넉넉해 보이지만, 실제로는 그렇지 않았습니다.</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-34d9d378ca7f8073aaadfaf5bb0825f1" data-id="34d9d378ca7f8073aaadfaf5bb0825f1"><span><div id="34d9d378ca7f8073aaadfaf5bb0825f1" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f8073aaadfaf5bb0825f1" title="서버에서 동시에 돌아가던 것들"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">서버에서 동시에 돌아가던 것들</span></span></h4><div class="notion-text notion-block-34d9d378ca7f8077b42fc1a56634e118">이 서버 하나에는 단순히 마스토돈만 올라가 있는 게 아닙니다.</div><table class="notion-simple-table notion-block-34d9d378ca7f8076b855d8642040bd59"><tbody><tr class="notion-simple-table-row notion-simple-table-header-row notion-block-34d9d378ca7f80c693c6c4c3cb7b5e0e"><td class="" style="width:120px"><div class="notion-simple-table-cell">프로그램</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">역할</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">차지하는 메모리</div></td></tr><tr class="notion-simple-table-row notion-block-34d9d378ca7f808eb11cc55bce218572"><td class="" style="width:120px"><div class="notion-simple-table-cell">Elasticsearch</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">마스토돈 검색 기능 담당</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>약 9 GB</b> (고정)</div></td></tr><tr class="notion-simple-table-row notion-block-34d9d378ca7f808f97e6ec04167ac4de"><td class="" style="width:120px"><div class="notion-simple-table-cell">Mastodon Puma (8개)</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">마스토돈 웹 서비스 처리</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">약 3.4 GB</div></td></tr><tr class="notion-simple-table-row notion-block-34d9d378ca7f8061ba8ad911a9befd3b"><td class="" style="width:120px"><div class="notion-simple-table-cell">Mastodon Sidekiq (2개)</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">마스토돈 백그라운드 작업</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">약 0.9 GB</div></td></tr><tr class="notion-simple-table-row notion-block-34d9d378ca7f80cc9ae8f22d0aa3e953"><td class="" style="width:120px"><div class="notion-simple-table-cell">Node.js (스트리밍)</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">실시간 타임라인 갱신</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">약 0.9 GB</div></td></tr><tr class="notion-simple-table-row notion-block-34d9d378ca7f8035b017f33e101d49ba"><td class="" style="width:120px"><div class="notion-simple-table-cell">Redis</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">임시 데이터 캐시</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">약 0.3 GB</div></td></tr><tr class="notion-simple-table-row notion-block-34d9d378ca7f809d8668d6cf55cf9c05"><td class="" style="width:120px"><div class="notion-simple-table-cell">authentik</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">로그인 인증 서비스</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">약 0.6 GB</div></td></tr><tr class="notion-simple-table-row notion-block-34d9d378ca7f8076976ff34ea6c73b34"><td class="" style="width:120px"><div class="notion-simple-table-cell">기타 Python 서비스</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">부가 기능</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">약 0.4 GB</div></td></tr><tr class="notion-simple-table-row notion-block-34d9d378ca7f80afb7a3d9f9f226541e"><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>합계</b></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">ㅤ</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>약 16 GB 이상</b></div></td></tr></tbody></table><div class="notion-text notion-block-34d9d378ca7f80da9920c8f27f4a4153">여기에 운영체제 자체가 사용하는 메모리까지 더해지면, 여유 공간이 생각보다 훨씬 빠르게 줄어듭니다.</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-34d9d378ca7f80888b4fd70b7bad1a8e" data-id="34d9d378ca7f80888b4fd70b7bad1a8e"><span><div id="34d9d378ca7f80888b4fd70b7bad1a8e" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f80888b4fd70b7bad1a8e" title="예비 메모리(스왑)도 너무 작았습니다"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">예비 메모리(스왑)도 너무 작았습니다</span></span></h4><div class="notion-text notion-block-34d9d378ca7f80d4b802d639d68950cd">메모리가 부족해질 때를 대비해 하드디스크의 일부를 임시 메모리처럼 쓰는 방법이 있습니다. 이것을 <b>스왑(Swap)</b> 이라고 합니다. 그런데 이 서버의 스왑은 고작 <b>2GB</b>로 설정되어 있었습니다. 메모리가 한계에 달했을 때 2GB로는 버티기에 턱없이 부족했습니다.</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-34d9d378ca7f80e5bd28de7149856222" data-id="34d9d378ca7f80e5bd28de7149856222"><span><div id="34d9d378ca7f80e5bd28de7149856222" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f80e5bd28de7149856222" title="실제로 얼마나 위험한 상태였나"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">실제로 얼마나 위험한 상태였나</span></span></h4><div class="notion-text notion-block-34d9d378ca7f809aaddbc8edd25574af">서버 로그를 분석한 결과, 장애 당시 서버가 프로그램들에게 약속한 메모리 총량이 실제 처리 가능한 한계를 <b>약 10.8GB 초과</b>한 상태였습니다.</div><div class="notion-text notion-block-34d9d378ca7f8071ae29f31d90ea439a">
<code class="notion-inline-code">실제 처리 가능한 한계: 약 17.4 GB / 프로그램들에게 약속한 총량: 약 28.2 GB / 초과량: +10.8 GB</code></div><div class="notion-text notion-block-34d9d378ca7f807d83e9c09265189036">이 상태에서 프로그램들이 실제로 그 메모리를 전부 사용하려 하면, 운영체제는 공간이 없으니 강제로 프로그램을 종료시킵니다. 이것을 <b>OOM Killer(메모리 부족 강제 종료)</b> 라고 합니다. 이번 장애는 이 OOM Killer가 SSH나 마스토돈 같은 핵심 프로그램들까지 강제로 꺼버려 서버 전체가 응답 불가 상태가 된 것입니다.</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-34d9d378ca7f8003aedafb9b31674063" data-id="34d9d378ca7f8003aedafb9b31674063"><span><div id="34d9d378ca7f8003aedafb9b31674063" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f8003aedafb9b31674063" title="로그가 남지 않은 이유(장애 분석까지 오래 걸린 이유)"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">로그가 남지 않은 이유(장애 분석까지 오래 걸린 이유)</span></span></h4><div class="notion-text notion-block-34d9d378ca7f8059886fc52c738969cf">&quot;OOM Killer가 발동했다면 기록이 남아야 하지 않나?&quot; 하고 의문을 가지실 수 있습니다. 맞는 말이지만, 이번처럼 극단적으로 메모리가 부족한 상황에서는 <b>로그를 기록하는 프로그램(journald) 자체도 메모리 부족으로 종료</b>되어버립니다. 그래서 장애 순간의 기록이 거의 남지 않습니다.</div><div class="notion-text notion-block-34d9d378ca7f8012bba2e4c1af7018fb">실제로 재부팅 후 서버 기록 파일이 <b>&quot;비정상 종료로 인해 손상됨&quot;</b> 이라는 메시지와 함께 교체된 것이 확인되었습니다. 이것이 서버가 정상적으로 종료된 게 아니라 갑자기 쓰러진 증거입니다.</div><hr class="notion-hr notion-block-34d9d378ca7f804bad86d3eb271b9b8f"/><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-34d9d378ca7f800fb259c1b6bb717d3e" data-id="34d9d378ca7f800fb259c1b6bb717d3e"><span><div id="34d9d378ca7f800fb259c1b6bb717d3e" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f800fb259c1b6bb717d3e" title="장애가 하드웨어 문제는 아닌가요?"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">장애가 하드웨어 문제는 아닌가요?</span></span></h3><div class="notion-text notion-block-34d9d378ca7f800da386d8a1d6dfae9e">이번 분석에서 다음 항목들은 모두 정상임을 확인했습니다.</div><ul class="notion-list notion-list-disc notion-block-34d9d378ca7f800cade5d02b1de86e90"><li><b>디스크 오류 없음</b> — 저장장치에 이상 없음 (디스크 사용량 61%, 여유 충분)</li></ul><ul class="notion-list notion-list-disc notion-block-34d9d378ca7f805da52efc132ce24190"><li><b>디스크 아이노드 정상</b> — 파일 개수도 여유 있음</li></ul><ul class="notion-list notion-list-disc notion-block-34d9d378ca7f80aa8bb9c3e5c5caefef"><li><b>커널 패닉 없음</b> — 운영체제 핵심 오류가 아님</li></ul><ul class="notion-list notion-list-disc notion-block-34d9d378ca7f803b86aad8e738ad1f11"><li><b>하드웨어 오류 없음</b> — 메모리 칩 오류(MCE), CPU 과열 등 없음</li></ul><ul class="notion-list notion-list-disc notion-block-34d9d378ca7f800aab6ce5e13d1eaae6"><li><b>네트워크 오류 없음</b> — 회선이나 네트워크 카드 문제 아님</li></ul><ul class="notion-list notion-list-disc notion-block-34d9d378ca7f800fbb5dd02c3f688c99"><li><b>자동 업데이트 연관성 없음</b> — 장애 당일 패키지 업데이트 기록 없음</li></ul><div class="notion-text notion-block-34d9d378ca7f80eab320c5e82c76c2e5">원인은 순수하게 <b>소프트웨어(메모리 관리)</b> 문제였습니다.</div><hr class="notion-hr notion-block-34d9d378ca7f80e0bd65d19319c4ea1e"/><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-34d9d378ca7f80ad8c28ff26c4915ffd" data-id="34d9d378ca7f80ad8c28ff26c4915ffd"><span><div id="34d9d378ca7f80ad8c28ff26c4915ffd" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f80ad8c28ff26c4915ffd" title="재발 방지 대책"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">재발 방지 대책</span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-34d9d378ca7f80539606fae9de54a136" data-id="34d9d378ca7f80539606fae9de54a136"><span><div id="34d9d378ca7f80539606fae9de54a136" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f80539606fae9de54a136" title="1. 스왑 공간 대폭 확장 ✅ 적용 완료"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1. 스왑 공간 대폭 확장 ✅ 적용 완료</span></span></h4><div class="notion-text notion-block-34d9d378ca7f80f1b32ae30fbd66cadb">2GB에 불과했던 스왑을 16<b>GB로 늘렸습니다.</b> 메모리가 부족해지기 시작하면 하드디스크를 임시 메모리로 활용해 버틸 수 있는 시간이 확보됩니다. 속도는 다소 느려질 수 있지만, 서버가 완전히 쓰러지는 최악의 상황을 막는 데 중요한 역할을 합니다.</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-34d9d378ca7f8021bce9c7a3ec224c45" data-id="34d9d378ca7f8021bce9c7a3ec224c45"><span><div id="34d9d378ca7f8021bce9c7a3ec224c45" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f8021bce9c7a3ec224c45" title="2. Elasticsearch 메모리 사용량 조정 ✅ 적용 완료"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2. Elasticsearch 메모리 사용량 조정 ✅ 적용 완료</span></span></h4><div class="notion-text notion-block-34d9d378ca7f80fbba2de76d3c7b0827">검색 담당 프로그램인 Elasticsearch가 기존에는 <b>최소 9GB를 항상 독점</b>하고 있었습니다. 32GB 서버에서 다른 서비스들과 함께 운영하기에는 과도한 양이었기 때문에, 이를 <b>3~4GB 수준으로 낮춰</b> 다른 프로그램들이 사용할 여유 공간을 확보했습니다.</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-34d9d378ca7f8020b0a5c321a6f33007" data-id="34d9d378ca7f8020b0a5c321a6f33007"><span><div id="34d9d378ca7f8020b0a5c321a6f33007" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f8020b0a5c321a6f33007" title="3. 메모리 부족 경보 시스템 도입 ✅ 적용 완료"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3. 메모리 부족 경보 시스템 도입 ✅ 적용 완료</span></span></h4><div class="notion-text notion-block-34d9d378ca7f80d2ba50df4797ad51be">메모리 사용량이 일정 수준을 넘으면 <b>관리자에게 자동으로 알림이 오는 시스템</b>을 구축했습니다. 서버가 위험한 상태에 접어들기 전에 미리 조치를 취할 수 있게 됩니다.</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-34d9d378ca7f8091bef1ec1b53b510ac" data-id="34d9d378ca7f8091bef1ec1b53b510ac"><span><div id="34d9d378ca7f8091bef1ec1b53b510ac" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f8091bef1ec1b53b510ac" title="4. 서버 모니터링 강화 ✅ 적용 완료"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">4. 서버 모니터링 강화 ✅ 적용 완료</span></span></h4><div class="notion-text notion-block-34d9d378ca7f80cc9a73ef96ee75c0d0">10분 단위로 CPU/메모리 사용량을 기록하는 시스템을 정기적으로 검토하는 체계를 갖췄습니다. 이상 징후를 조기에 발견해 장애로 이어지기 전에 대응할 수 있도록 했습니다.</div><hr class="notion-hr notion-block-34d9d378ca7f80fe8d21e3a372dc3fd5"/><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-34d9d378ca7f80208bdad850df6895cd" data-id="34d9d378ca7f80208bdad850df6895cd"><span><div id="34d9d378ca7f80208bdad850df6895cd" class="notion-header-anchor"></div><a class="notion-hash-link" href="#34d9d378ca7f80208bdad850df6895cd" title="마치며"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">마치며</span></span></h3><div class="notion-text notion-block-34d9d378ca7f80518d19f24bf257d127">이번 장애는 서버 관리자인 제가 서버 전체의 메모리 사용량 합계를 충분히 점검하지 않은 채 새로운 서비스들을 올린 결과입니다. 특히 4월 25일 하루에 두 번이나 장애가 발생한 것은, 첫 번째 재부팅 후에도 근본 원인이 해결되지 않았기 때문입니다.</div><div class="notion-text notion-block-34d9d378ca7f80dbb9a6c4f98636eb90">위에서 말씀드린 대책들은 모두 이미 적용을 완료했습니다. 자커마스를 믿고 이용해 주시는 분들께 다시 한번 사과드리며, 더 안정적인 서비스를 제공할 수 있도록 노력하겠습니다.</div><div class="notion-text notion-block-34d9d378ca7f80c5a4dedb285fb15087">감사합니다.</div><div class="notion-text notion-block-34d9d378ca7f80e082e2ce7ecc011656">— 유메카</div><div class="notion-blank notion-block-34d9d378ca7f80f3bd38f59447a25df1"> </div></main>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[자캐커뮤용 마스토돈 운영하기 (1) - 타 서버 이용하기]]></title>
        <id>https://blog.occm.cc/using-other-server-for-oc-community</id>
        <link href="https://blog.occm.cc/using-other-server-for-oc-community"/>
        <updated>2023-08-27T15:00:00.000Z</updated>
        <summary type="html"><![CDATA[자커마스 이외 서버에서 자캐커뮤를 진행시 체크해야 할 부분에 대해 알아봅니다.]]></summary>
        <content type="html"><![CDATA[<main class="notion light-mode notion-page notion-block-e935525d401144f9bace98b7705af5d9"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-8b4b2d185ed14c368c3907f668a44929">뭔가 이상하다고 생각하셨다면 정상입니다.</div><div class="notion-text notion-block-c27a53a9a7fe4d6283335dd4eabea81c">“자커마스”를 두고 굳이 다른 서버를 이용하는 가이드를, 그것도 “자커마스” 블로그에서 다룬다니요.</div><div class="notion-blank notion-block-589615d8c39241f9a8f3f53c970b9c47"> </div><div class="notion-text notion-block-5942590db82b41ddbddf95602a393483">하지만, 잘못 보신게 아닙니다. 여긴 자커마스 블로그가 맞고 타 서버를 이용하는 가이드를 작성중인것도 맞습니다.</div><div class="notion-text notion-block-47cb5881b5fe4c3d81610e886b7dab79">이 가이드는, 자커마스 서버의 불안정성으로 타 서버를 이용하시려는 분들께 도움이 되고자 작성되었습니다.</div><div class="notion-blank notion-block-53fdbba7b1e447109ebc325e76bacbca"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-0e2e2dd64a3847928e9105afe2738337" data-id="0e2e2dd64a3847928e9105afe2738337"><span><div id="0e2e2dd64a3847928e9105afe2738337" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0e2e2dd64a3847928e9105afe2738337" title="어느 서버로 가지?"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">어느 서버로 가지?</span></span></h3><div class="notion-text notion-block-c9da16a9b7c0402caacbcc8476908556">어떤 이유에서건, 자커마스 서버를 이용하지 않기로 결정하셨다면 다른 서버로 가야 하는것은 당연합니다. 하지만, 무턱대고 아무 서버에나 들어갈 수는 없습니다. 만약 서버가 자커마스보다 작은 규모의 서버라면? 자캐커뮤 여러개가 몰려가면 예전 자커마스마냥 터져나갈수도 있습니다. 그 와중 서버 관리자분이 힘들어지는건 덤이고요. </div><div class="notion-blank notion-block-a44df36260474a099072e4a4f0600bf4"> </div><div class="notion-text notion-block-c6fff28263aa47f1afcd104f197f5a93">특정 서버를 추천하기에는 해당 서버에게 민폐가 될 수 있으므로(자칫하다간 제2, 제3의 자커마스가 될수도) 커뮤니티 러닝에 적합한 서버를 찾는 방법만 알려드리겠습니다.</div><div class="notion-blank notion-block-87d18e88618f4d95b257b08db36ad4aa"> </div><ol start="1" class="notion-list notion-list-numbered notion-block-aa8e83d5d4484c2ba1e48b96aa4bb684" style="list-style-type:decimal"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://wiki.mastodon.kr/">한국 마스토돈 연합위키</a>나 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://namu.wiki/w/%EB%A7%88%EC%8A%A4%ED%86%A0%EB%8F%88(SNS)#s-5">나무위키 문서</a> 참고해서 서버 찾기(p.s. 나무위키 문서중 나머지 부분은 부정확한 부분이 많으니 참고하지 않으시는걸 추천드립니다)</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-d95118f90f7d4e73bd99816246a7d7dd" style="list-style-type:decimal"><li>해당 서버 규칙을 보고 “자캐커뮤” 관련 규정이 있는지 확인하기. 예를 들어 마스토돈은 아니지만 미스키 기반 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://phater.xyz/">페이터</a>는 미리 관리자에게 알려서 초대장 및 계정양식 등을 지정해야 합니다.</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-8bad79b2bca948d894e1bcdd95277f9b" style="list-style-type:decimal"><li>만약 관련 공지나 규정이 없다면 해당 서버 관리자에게 문의합니다.  모든 서버 운영자분들은 자발적으로 자원봉사 차원에서 운영하는 것이니 정중히 문의해 주세요.</li></ol><ol start="4" class="notion-list notion-list-numbered notion-block-aa58e83b0c724241be6a54048574a12d" style="list-style-type:decimal"><li>자캐커뮤 운영 및 러닝이 가능하다면, 계정을 생성합니다. 경우에 따라 초대링크 발급을 위해 추가 문의가 필요할 수 있습니다.</li></ol><ol start="5" class="notion-list notion-list-numbered notion-block-c0655cb3f390443b89b0fb271b599798" style="list-style-type:decimal"><li>(추가) 아이디는 가급적 (임의의 아이디)_커뮤약칭 등 최대한 추측이 힘든 아이디를 사용합니다. 이는 해당 서버에 아이디를 무의미하게 선점하여 피해를 주는 일을 막기 위함입니다. (예를 들어 일회성 커뮤용으로 @love 같은 아이디를 선점후 버린다면 그 이후 아무도 해당 아이디를 재사용할수 없습니다)</li></ol><div class="notion-blank notion-block-d0c49ae21bba44189bb0b21f2139c2df"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-a9a6b16961cb43d2a2fc698288cc042c" data-id="a9a6b16961cb43d2a2fc698288cc042c"><span><div id="a9a6b16961cb43d2a2fc698288cc042c" class="notion-header-anchor"></div><a class="notion-hash-link" href="#a9a6b16961cb43d2a2fc698288cc042c" title="찾기 귀찮은데… 자캐커뮤 러닝이 가능한 서버 목록은 없나요?"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">찾기 귀찮은데… 자캐커뮤 러닝이 가능한 서버 목록은 없나요?</span></span></h3><div class="notion-text notion-block-d3f8db16ade946508a887c3f1d3e0de7">자커마스를 제외한, 자캐커뮤 러닝이 가능한 서버는 다음과 같습니다.</div><ol start="1" class="notion-list notion-list-numbered notion-block-d3f64415730249caa70bbcd7ce2f7894" style="list-style-type:decimal"><li>플래닛(https://planet.moe) - <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://planet.moe/@planet/110982616964439643">https://planet.moe/@planet/110982616964439643</a> 반드시 링크된 가이드라인을 정독해주세요.</li></ol><div class="notion-blank notion-block-68ab46112ae646c39e71c031d33c64d2"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-4be8b52b292f455bb7883c8a242f793e" data-id="4be8b52b292f455bb7883c8a242f793e"><span><div id="4be8b52b292f455bb7883c8a242f793e" class="notion-header-anchor"></div><a class="notion-hash-link" href="#4be8b52b292f455bb7883c8a242f793e" title="모르겠고 당장 가입이 가능한 곳 없나요?"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">모르겠고 당장 가입이 가능한 곳 없나요?</span></span></h3><div class="notion-text notion-block-928f4b2f212c4955abc17535482bb835">마스토돈 개발사에서 직접 운영하는 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://mastodon.social/">mastodon.social</a>이나 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="http://mastodon.online">mastodon.online</a> 서버 이용도 방법 중 하나입니다. 단, 다음은 반드시 지켜주셔야 민폐/피해가 되지 않습니다.</div><ol start="1" class="notion-list notion-list-numbered notion-block-37a6d63b582b4ab89abdf5fcd4f22a1d" style="list-style-type:decimal"><li>계정은 수동으로 팔로워를 받도록 설정해주세요. 베타버전 기준 공개 프로필 → Privacy and reach → Automatically accept new followers를 체크 “해제”하시면 수동으로 팔로워를 승인할 수 있습니다.</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-c89d3559df364472b51af1386a7e127b" style="list-style-type:decimal"><li>기본 공개 범위는 “비공개”로 해주세요. 여러분들의 역극이 불필요하게 다른분에게 노출되는걸 막습니다. 설정은 환경설정 → 기타 → 게시물 프라이버시에서 가능합니다.</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-6991046e9c99425db5c19f32570ec936" style="list-style-type:decimal"><li>두 서버 모두 기본적으로 범용 서버인 만큼, 서버 관리자의 지원은 기대하시면 안됩니다. 서버 사용자가 많지만 개발사 직영인 만큼 제일 안정적입니다. 대신 가끔 가입이 몰리면 가입이 막힐 수 있습니다.(타 서버 분산 유도)</li></ol><ol start="4" class="notion-list notion-list-numbered notion-block-b12fff800c704300aa7037e61e69c693" style="list-style-type:decimal"><li>아이디 역시 위 서버를 찾는 방법 5번 참고하여 작성합니다.</li></ol></main>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[서버 접속 불가능 이유, 원인 분석 및 재발 방지 대책]]></title>
        <id>https://blog.occm.cc/why-mastodon-server-was-down-and-how-we-did-to-prevent-that</id>
        <link href="https://blog.occm.cc/why-mastodon-server-was-down-and-how-we-did-to-prevent-that"/>
        <updated>2023-05-29T15:00:00.000Z</updated>
        <summary type="html"><![CDATA[자커마스와 자커마스 서버에서 구동되던 마라탕.인생, 스플래터 서버 장애 원인과 재발 방지 대책]]></summary>
        <content type="html"><![CDATA[<main class="notion light-mode notion-page notion-block-34b5d2b0c51943e8852273ff397824e5"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-ce264f0b768c4d2ea423537865ad13d4">안녕하세요. 자커마스/마라탕.인생/스플래터 3개 서버를 운영중인 유메카라고 합니다.</div><div class="notion-blank notion-block-a0ea8e936c6c4c139411205cc94b0c03"> </div><div class="notion-text notion-block-857f1bafe0c847b0834cc7beb052293e">먼저, 29일 오후 9시 30분경 ~ 30일 오전 6시 50분까지 서버에 장애가 생겼던 이유에 대해 자세히 설명드리고자 합니다.</div><div class="notion-text notion-block-f1fda432b7d6479da0bcce547467ea16">해당 서버는 서버의 안정적인 운영을 위해 실시간 복제와 별개로 한시간 단위 DB 스냅샷도 별도로 보존중입니다. 이는 백업 서버마저 사용 불가능해질 경우를 대비한 2차 백업이자, 작업중 실수로 DB를 지우더라도 손실을 최소화하기 위한 대책입니다.</div><div class="notion-blank notion-block-57a48da233e946fd8dc6d178f68cbc64"> </div><div class="notion-text notion-block-ee885f692c114dd8a3a7d1fe08e4c120">이 한시간 단위 백업본은 서버 외부에 위치한 백업서버(라즈베리 파이로 구성한 홈서버입니다)로 이동되어 장기간 보관되고 있었습니다. 최근 해당 홈서버를 구동하던 USB 메모리가 과부하로 결국 뻗은 일이 있었습니다. 해당 서버에서 백업 진행과 동시에 오래된 백업본 파일을 삭제하도록 되어 있었는데 백업 자체가 장기간 실시되지 않으며 한시간 단위로 생성되던 백업본이 서버 하드디스크를 가득 채웠고, 서버 장애가 발생하였습니다.</div><div class="notion-blank notion-block-43998302480d4b46b7baefa5c9293f37"> </div><div class="notion-text notion-block-f65c7ec703ee43b88f37fbd1ca0119a4">이번 사건은 서버 관리자인 제 부실 관리로 벌어진 일로, 이번 일로 인해 피해를 입으신 모든 분들께 사과드립니다. 해당 백업본 파일로 인해 서버 장애가 발생하지 않도록 현재 백업본 정리 스크립트를 백업과 별개로 분리해 동작하도록 구성하였습니다. 즉 백업서버가 장애로 잠시 다운되어도 메인 서버에 장애가 발생하지 않습니다.</div></main>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[마스토돈에서 도메인을 바꿀 수 없는 이유]]></title>
        <id>https://blog.occm.cc/why-do-we-cannot-change-mastodon-domain</id>
        <link href="https://blog.occm.cc/why-do-we-cannot-change-mastodon-domain"/>
        <updated>2023-03-08T15:00:00.000Z</updated>
        <summary type="html"><![CDATA[마스토돈에서 LOCAL_DOMAIN, WEB_DOMAIN 설정값이 무엇이고 왜 바꿔서는 안되는지 알아봅니다.]]></summary>
        <content type="html"><![CDATA[<main class="notion light-mode notion-page notion-block-d11d5450da4c4c80ac7c45f3be248a5a"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-56a7894b89694e918b05a686bc5aa2cb">오늘은 조금 짧은 글입니다. 최근 모 서버가 접속 도메인을 임의로 변경한 것이 밝혀졌습니다. 이 때문에, 해당 서버의 모든 유저는 타 서버와 교류가 끊기게 되었으며, 사실상 고립된 상태가 되어 버렸습니다. 이는, 마스토돈에서 도메인은 절대로 변경해서는 안되는 값이기 때문입니다. 그 이유를 오늘 간략히 알아보겠습니다.</div><div class="notion-text notion-block-cdd8cd91a03a4511b8c8bdf8827ff6c7">마스토돈에서 아이디는 두가지 부분으로 나뉩니다.</div><div class="notion-text notion-block-5608f068b6094ec2acdbbd7ecc28b47b">yumeka@occm.cc 
예를 들어, 제 아이디를 보면, yumeka와 occm.cc로 나뉜 것을 확인할 수 있습니다. 어딘가 비슷한 것이 보이나요? 네. 맞습니다. 이메일 주소와 완전히 동일한 형식입니다.</div><div class="notion-text notion-block-0dae8e293fa74b0bacd3c3af83914071">이해하기 쉽게 또다시 비유를 해보겠습니다. 지난번 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://blog.occm.cc/what-is-consistency-break-in-mastodon">정합성 훼손에 대해 다룬 글</a>에서 비유했던 아파트를 그대로 가져오겠습니다.</div><div class="notion-blank notion-block-b71475f98dd24c71be83fa4c5e10562b"> </div><div class="notion-text notion-block-93034fe436634d4fbe9ad9b54d49615b">트잉여 아파트, 큐돈 아파트, 플래닛 아파트가 있습니다. 그런데, 플래닛 아파트 주인장이 갑자기 플래닛이라는 이름이 마음에 들지 않는다며 아파트 이름을 마스로 변경했습니다. 이 작업은 쉽습니다. 설정 파일에서 플래닛이라 지정한 아파트 이름을 마스로 변경하면 될테니까요. (주: 단순 비유일 뿐 플래닛 서버가 도메인을 바꿀 일은 일어나지 않습니다!)</div><div class="notion-text notion-block-6ab3c9eb57d44b0ca3a58c9415306b2d">하지만 진짜 문제점은 지금부터 시작됩니다.</div><div class="notion-blank notion-block-926fd85931574aae8d35b296ee2ae31d"> </div><div class="notion-text notion-block-a9009aa737dc4650a47d2e9ab7bf8b0a">트잉여 아파트는 플래닛이란 이름의 아파트는 알지만, 마스라는 아파트는 알지 못합니다. 플래닛 아파트에서 이름을 바꾼 마스 아파트가 편지를 보내면 트잉여 아파트는 새로운 아파트가 생긴 것으로 알 수밖에 없습니다. 실제로는 플래닛 아파트인데도요. 당연히 트잉여 아파트 내 마스 아파트의 편지를 받아보겠다고 한 사람은 없으니 마스 아파트의 모든 편지는 누군가 “마스 아파트”의 편지를 받아보겠다고 나서기 전까지 <b>전부</b> 버려집니다. 이전에 플래닛 아파트의 편지를 받아보겠다고 한 사람까지 편지를 받아볼 수 없는 것이죠.</div><div class="notion-text notion-block-bd8eda2133fe402c846d130a5f2ee55d">반대의 경우도 심각해집니다. 큐돈 아파트에서 편지를 보낼 땐 여전히 플래닛 아파트로 보낼 것입니다. 하지만 플래닛 아파트는 없으니 편지는 보내지지 않고, 마스 아파트(구 플래닛 아파트)의 거주민은 어떠한 편지도 받아볼 수 없게 됩니다.</div><div class="notion-text notion-block-67c0345510b548509d26a2631b9d951e">즉 아파트 이름 하나 바꿨을 뿐인데, 완전히 고립이 되는 것입니다. 더군다나 뒤늦게 실수를 인정하고 되돌리기를 해도 또 문제점이 남습니다.</div><div class="notion-blank notion-block-0fab3fbcae8649588203d22a4127304a"> </div><div class="notion-text notion-block-06a4dfa1f77a4665946bf90f74c839e1">마스 아파트가 다시 플래닛 아파트가 되었다 해도, 그 사이 처음으로 마스 아파트와 교류한 아파트는 마스 아파트로 이름을 바꾸는 상황이 다시 생기게 됩니다. 서로 편지를 주고받을수 없게 되는것이죠. 또, “마스 아파트”로 이름을 바꾼 동안 교류한 내용은 기존 거주민이 아닌 새로운 거주민과 대화를 나눈것으로 기록되어 버립니다. 파편화가 되어 버리는 것이죠.</div><div class="notion-blank notion-block-152be97cd0dc49d89de4384769b59460"> </div><div class="notion-text notion-block-e8c331ff4d684a0cb7b9833de411792a">따라서, 절대로, 절대로 마스토돈 서버를 연 이상 도메인을 맘대로 바꿔서는 안되겠습니다.</div><div class="notion-blank notion-block-22ee538b64eb489ead3648d3bd9e1ed7"> </div></main>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[마스토돈에서 “정합성 훼손”이란? (+ 서버 관리자가 명심해야 할 점)]]></title>
        <id>https://blog.occm.cc/what-is-consistency-break-in-mastodon</id>
        <link href="https://blog.occm.cc/what-is-consistency-break-in-mastodon"/>
        <updated>2022-11-06T15:00:00.000Z</updated>
        <summary type="html"><![CDATA[데이터 무결성과 정합성의 개념에 대해 알아보고, 마스토돈에서 어떤 의미를 가지는지 알아봅니다. 또한 “정합성 훼손”이 마스토돈에서 가지는 의미와 위험성에 대해 알아봅니다.]]></summary>
        <content type="html"><![CDATA[<main class="notion light-mode notion-page notion-block-fbe53ff0d3cc41078d73c7724076fdb0"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-57762c084ca948c48160710e86fae0af"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://velog.io/@yangsijun528/%EB%AC%B4%EA%B2%B0%EC%84%B1%EA%B3%BC-%EC%A0%95%ED%95%A9%EC%84%B1%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80">https://velog.io/@yangsijun528/무결성과-정합성이란-무엇인가</a>
설명을 시작하기 전 글 하나 보고 가시겠습니다. 무결성과 정합성에 대해 개념을 정리한 글입니다.</div><div class="notion-text notion-block-b956f8c8267c45abb96a56e8b3061fa5">해당 글에서 데이터 무결성은 데이터 값이 정확한 상태를, 정합성은 데이터 값이 서로 일치하는 상태를 의미한다고 설명하고 있습니다. 마스토돈을 이용하는 상황을 예로 들어 보겠습니다.</div><div class="notion-text notion-block-44578c866fb24e72b213ef8d1b10691f">툿을 보낼 때 보낸 툿의 내용은 변경되어서는 안될것입니다. 예를 들어 “생일 축하해”라고 보낸 툿이 생ㅇ리 축하해”가 된다면 오해를 부를 거라는건 불보듯 뻔한 일이죠. 하지만 데이터 정합성은 여기에서 더 나아갑니다. 오늘 다룰 주제가 바로 이 “정합성”에 대해서, 그리고 이게 훼손되면 발생하는 일에 대해서입니다.</div><div class="notion-blank notion-block-c83906791d39474babdb5e3cc665bede"> </div><div class="notion-text notion-block-4167e76c601f4bcaaf37c8a47ad33671">먼저, 정합성에 대해 이야기하기 전 마스토돈이 어떻게 다른 서버와 서로 소통하는지부터 간략히 알아봅니다.</div><div class="notion-text notion-block-a8b3630e22ca404a94812fd7922b02ce">이를 위해 아파트를 예시로 들어보겠습니다. 트잉여 아파트와 큐돈 아파트, 플래닛 아파트, 그리고 와르르 맨션이 한 도시에 있습니다. 아파트간 거리는 멀어서 대화할수 없습니다. 같은 아파트내 거주자끼리만 서로 대화할수 있죠. 이러한 서비스 형태의 예로는 기존 SNS 서비스들이 있습니다. 트위터/페이스북/인스타그램 같이요. 인스타그램 계정으로 트위터 계정에게 멘션을 보낼수는 없겠죠?</div><div class="notion-blank notion-block-56d1d93efcee4adf8a92765b8af02dce"> </div><div class="notion-text notion-block-f663561f92cd44db85c1a223102d4275">마스토돈과 같은 분산형 SNS에서는 조금 다릅니다. “편지”라는 것을 이용해서 아파트간 대화를 할 수 있습니다. 이 편지는 받는 아파트가 어떤곳이건(즉 아파트건, 맨션이건, 심지어 단독주택이더라도!) “편지”라는 규격을 이해한다면 내용을 볼수 있도록 해줍니다.</div><div class="notion-text notion-block-0ab02dcb32c249e7b297e30f5cfdddc2">“편지”를 마스토돈에선 ActivityPub라고 부릅니다. ActivityPub를 이해하는 프로그램으로는 마스토돈도 있지만 플레로마나 미스키도 ActivityPub를 이해할수 있습니다. 이를 또다시 아파트에 비유하자면 아파트 단지에 위치한 우편함을 예로 들 수 있습니다.</div><div class="notion-text notion-block-55d62c2f84ee41c2a92258c6a55ff869">우선 아파트 단지별로 관리인이 한명씩 존재한다고 가정해 봅니다. 이 관리인은 아파트에 온 편지를 보고 그 편지가 누구에게 보내진 건지 확인합니다.</div><ul class="notion-list notion-list-disc notion-block-efc3efc5387d4012827bada06854cf1d"><li>만약 받는 주소에서 보낸 사람의 편지를 받는다고 미리 이야기해 뒀다면 편지를 받습니다.</li></ul><ul class="notion-list notion-list-disc notion-block-a7167765e5cb488490ee86258db1bfa7"><li>하지만 편지를 받는다고 하지 않는 경우 그냥 버립니다.</li></ul><ul class="notion-list notion-list-disc notion-block-da54d0faa5594db0bcc327f7cfb43a4d"><li>하지만 그 호수가 반드시 읽어봐야 한다고 표시하면 그냥 보냅니다.(<b>멘션이나 DM</b>)</li></ul><div class="notion-text notion-block-7c2ef4c3f8e849f38ca77b37a1660696"><em>(덧. 실제로 팔로워가 하나도 없는데 공개툿이 서버로 보내지는 일은 없을겁니다. 하지만 비유를 위해 적습니다)</em></div><div class="notion-blank notion-block-fc8ff5b59c2149ff9567cacb4100417c"> </div><div class="notion-text notion-block-ba230092083f4227931a205e12b7b736">이 상황에서 트잉여 아파트 101호에 사는 사람이 플래닛 아파트 201호의 사람의 공개 편지(<b>툿</b>)을 받아보고 싶어합니다. 201호가 공개적으로 보내는 편지를 받아보고 싶어해요. 그렇다면, 201호가 편지를 보낼 때 101호한테도 보내달라고 이야기를 해야합니다. 이를 위해 101호는 201호에 편지를 한통 씁니다.</div><ul class="notion-list notion-list-disc notion-block-b514260698d04261a026dbec1148f761"><li>저는 트잉여 아파트 101호입니다. 플래닛 아파트 201호의 공개 편지를 받아보고 싶어요.</li></ul><div class="notion-text notion-block-9368e0466803455c90132b448be1a8b6">201호는 모든 요청을 아무 조건 없이 받아주는 곳이라 바로 답장을 씁니다.</div><ul class="notion-list notion-list-disc notion-block-0a553f94128645a8bdd8ba07fce30759"><li>저는 플래닛 아파트 201호입니다. 트잉여 아파트 101호에게도 앞으로 공개 편지를 보낼게요.</li></ul><div class="notion-text notion-block-7426f7a2fb4c4ce49dcd0e217a71f200">그리고 공개 편지를 보낼 대상에 트잉여 아파트 101호도 추가합니다.(팔로<b>워</b>) 트잉여 아파트 101호는 플래닛 아파트 201호에게서 온 공개 편지는 의심하지 않고 받아보기 위해 따로 기록해 두고요.(팔로<b>잉</b>)</div><div class="notion-blank notion-block-7d25e96de51446f198a4a188c7ea7291"> </div><div class="notion-text notion-block-0a8f00eb4d4b40b2b161d84583e3cea7">플래닛 아파트 201호의 편지만 받는건 지루합니다. 그래서 큐돈 아파트의 303호의 공개 편지도 받아보고 싶어졌습니다.</div><ul class="notion-list notion-list-disc notion-block-6925a1ee795c416db6a86e69eb727bd5"><li>저는 트잉여 아파트 101호입니다. 큐돈 아파트 303호의 공개 편지를 받아보고 싶어요.</li></ul><div class="notion-text notion-block-f7c86d048f3c476eb3161ef937ade3ac">하지만 큐돈 아파트 303호는 조금 까다롭습니다. 좀 더 고민해 보겠다고 답장을 보냅니다.</div><ul class="notion-list notion-list-disc notion-block-fd8946f2b0514e3899956c1461b7ce60"><li>저는 큐돈 아파트 303호입니다. 트잉여 아파트 101호에게 공개 편지를 보내는건 조금 더 고민해 보겠습니다.(<b>좌물쇠 계정=팔로워 수동 승인</b>)</li></ul><div class="notion-text notion-block-08de629847ac435c82309689a166b93a">시간이 조금 지나고, 큐돈 아파트 303호가 결정했습니다. 트잉여 아파트 101호에게도 공개 편지를 보내기로요. 답장을 다시 해줍니다.</div><ul class="notion-list notion-list-disc notion-block-60a568c5189845e6b8d317b8f70a197c"><li>저는 큐돈 아파트 303호입니다. 트잉여 아파트 101호의 요청을 허락하니 앞으로 제 공개편지를 받아볼 수 있습니다.</li></ul><div class="notion-text notion-block-4a08b7a142404c89b729a10ebdf59173">아까와 똑같이 큐돈 아파트 303호는 공개 편지를 보낼 대상에 트잉여 아파트 101호를 추가합니다.(팔로<b>워</b>) 트잉여 아파트 101호도 큐돈 303호의 공개 편지를 의심하지 않고 받아보기 위해 따로 기록해 둡니다.(팔로<b>잉</b>)</div><div class="notion-blank notion-block-74e30e5064804443ab2f7c7a6e855894"> </div><div class="notion-text notion-block-9952dffc17854dd19bb71d17be9f4614">여기에서 뭔가 눈치채셨나요? 네. “팔로우”라는 과정을 진행하면서 트잉여 아파트, 플래닛 아파트, 큐돈 아파트가 모두 각각 기록을 따로 남겼습니다. 뭔가 불필요해 보이는데 말이죠. 하지만 이 과정중 하나라도 빠지면 이상한 상태가 됩니다.</div><div class="notion-blank notion-block-8688968406804e6699a729a82aebb322"> </div><div class="notion-text notion-block-7a910aa5afa7450c80c5234d02c9af35">이번에는 와르르 맨션이라는, 이상한 아파트를 예로 들어 보겠습니다. 이 아파트의 관리인은 건망증이 심해서 처리해야 하는걸 자꾸 빼먹어 버립니다. 공개 편지를 보낼 대상을 기록하는걸 빼먹은 경우를 예로 보겠습니다.</div><div class="notion-text notion-block-317b26df9c4741fbab69de0c173a3e89">와르르 맨션의 401호가 트잉여 아파트 201호의 공개 편지를 받기 위해 편지를 쓰고, 승인을 받습니다.(아까 설명했으니 자세히 또 적진 않을게요!) 근데… 하필 와르르 맨션 관리자가 빼먹고 공개 편지를 받아볼 대상(팔로<b>잉</b>)에 트잉여 아파트 201호를 추가하지 않았습니다. 이렇게 되면 나중에 트잉여 아파트 201호에서 공개 편지를 보내도 모르는 사람이 보내는 편지가 되서, 편지를 읽지 않고 버리게 됩니다. 불쌍한 401호는 트잉여 아파트 201호의 편지를 받아보고 싶었는데 못 받아보게 되고요.</div><div class="notion-text notion-block-8e7ffcf631e447efb0460001c13771cd">반대의 경우도 문제가 됩니다. 이번엔 플래닛 아파트 301호가 와르르 맨션 502호의 공개 편지를 받아보기 위해 요청을 보냈고 승인을 받았습니다. 아뿔싸! 이번에도 와르르 맨션 관리자가 실수해서 502호가 공개 편지를 보낼 대상(팔로<b>워</b>) 목록에 301호를 추가하지 않았습니다. 이렇게 되면 플래닛 아파트 301호는 와르르 맨션 502호의 공개 편지를 받아보겠다고 했지만 아무것도 못 받아보게 됩니다.</div><div class="notion-blank notion-block-e6fdf05318434613b803028a1b65c445"> </div><div class="notion-text notion-block-a8c924d8f22d46ceae226a45baf56829">이를 보고 “정합성이 훼손되었다”고 표현합니다. 두 아파트 모두가 같은 상태여야 하는데 달라져 버리는거죠. 와르르 맨션의 관리자가 실수를 눈치채고 바로잡지 않는다면 두 아파트간 교류는 일어나지 못할 겁니다.</div><div class="notion-text notion-block-acfe0679488a46ddbbbcfc9c7f4d70b2">이러한 일이 일어나는 이유는 주로 다음과 같습니다.</div><ul class="notion-list notion-list-disc notion-block-7f5094cf1c914f5ba380a1f3b45d82c8"><li>마스토돈 베타 버전에서, 개발자의 실수로 인해</li></ul><ul class="notion-list notion-list-disc notion-block-652ff6533c1745d090f23ca9869ebfab"><li>마스토돈 코드를 임의 수정하며, 실수를 해서</li></ul><div class="notion-text notion-block-6a72ec3fab444f538df247e30703033d">첫번째의 경우 보통 해결방법도 같이 제시해줍니다. 마스토돈 개발사에서 운영하는 인스턴스는 개발 중인 버전을 선적용하기 때문입니다. 하지만 두번째 경우, 즉 코드 임의 수정의 경우 임의 수정을 한 본인이 책임져야 합니다. 관리인의 실수가 다른 사람이 잘못 시킨것라면 시킨 사람에게 책임을 물을수 있지만 관리인 본인의 실수라면 스스로 책임을 져야 하는것입니다.</div><div class="notion-blank notion-block-374983df45d240748dbe5ab8c82fcbb7"> </div><div class="notion-text notion-block-a9e45bf832ad486fa82c271e8364c488">이 글을 통해 당부드리고 싶은 것은, 만약 본인이 위 사례와 같은 일이 생겼을때 바로잡을 수 있는 지식이 없다면 함부로 코드를 수정하거나, 베타버전을 적용해서는 안된다는 것입니다. 정합성이 훼손되면 해당 서버의 유저 뿐만 아니라 다른서버의 사용자까지 피해를 줄수 있으니까요.</div></main>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[자커마스 백업 시스템 소개]]></title>
        <id>https://blog.occm.cc/introducing-occm-backup-system</id>
        <link href="https://blog.occm.cc/introducing-occm-backup-system"/>
        <updated>2022-10-17T15:00:00.000Z</updated>
        <summary type="html"><![CDATA[자커마스에서 서버 문제 발생시 재빠르게 복구하기 위해 어떤 것들을 준비하고 있는지 알아봅니다.]]></summary>
        <content type="html"><![CDATA[<main class="notion light-mode notion-page notion-block-0ce3ef141a4e4fa483491e6a945c595d"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-14bd8fcd450c43979bc9d9f2a773f832">자커마스는 일본에 위치한 가상서버 업체의 서버를 사용하고 있습니다. 12코어 CPU에 48기가 메모리로 마스토돈 구동 정도에는 충분한 사양이죠. 하지만 서버 제공 업체의 사정으로 얼마든지 서비스가 중단될 수 있습니다. 이번 글에서는 자커마스가 이러한 경우에 어떻게 대비하고 있는지 간략하게 알아보겠습니다.</div><div class="notion-text notion-block-73fdb429637040a984dd7912176a5959">먼저 자커마스의 사용자 데이터에는 툿이나 계정 정보가 담기는 데이터베이스, 업로드한 이미지나 동영상과 프로필 사진 등으로 구성된 미디어로 나뉩니다.</div><div class="notion-text notion-block-76c98aeeb4fb42c5a309af2fad9093ce">자커마스의 미디어는 한국에 위치한 서버에 매일 백업되고 있습니다. 여기서 의문점이 생길수 있습니다. 미디어라면 엄청나게 많을 텐데 매일 백업이 가능한가요? 라고요. 새로 생기거나 변경되는 파일만 rsync라는 프로그램으로 동기화하고 있기에 큰 부담 없이 미디어를 백업할 수 있습니다. 추후 미디어 역시 일정 주기로 전체 복제하는 방안을 고민중입니다.</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-37bc107289594fc2aa25b8631d3699ea"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:585px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fed81ebba-35d4-4361-87a8-b96b74eb9201%2FUntitled.png?table=block&amp;id=37bc1072-8959-4fc2-aa25-b8631d3699ea&amp;cache=v2" alt="미디어 파일을 별도 백업서버에 저장하고 있는 모습" loading="lazy" decoding="async"/><figcaption class="notion-asset-caption">미디어 파일을 별도 백업서버에 저장하고 있는 모습</figcaption></div></figure><div class="notion-text notion-block-1e9740d67af7474d824a4dad7de31da0">데이터베이스는 두가지 방식으로 백업되고 있습니다.</div><div class="notion-text notion-block-2d092adedd314407b17abe179db77918">첫번째는 데이터베이스 실시간 복제입니다. 자커마스에서 여러분들이 작성하는 툿이나, 설정한 계정 정보 등은 실시간으로 백업서버에 전송됩니다. 백업서버는 평상시에는 아무 역할도 하지 않으며 대기하다, 메인 서버에 장애가 발생하면 곧바로 전환되어 동작하게 됩니다.</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-fe64c62cef154eb8a40d55841fda77e6"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:435px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F73886fa5-546b-44f7-b281-734a52839f61%2FUntitled.png?table=block&amp;id=fe64c62c-ef15-4eb8-a40d-55841fda77e6&amp;cache=v2" alt="실시간 데이터 복제가 이루어지고 있는 모습" loading="lazy" decoding="async"/><figcaption class="notion-asset-caption">실시간 데이터 복제가 이루어지고 있는 모습</figcaption></div></figure><div class="notion-text notion-block-768b8607dd63488ab41251bd61a8efdf">두번째는 일반적인 한시간 단위 백업입니다. 설령 자커마스 서버가 서버 제공업체 사정으로 폭발함과 동시에 백업서버마저 사라지더라도 서비스를 재개할수 있게 합니다.</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-d0299d7d3be24ad682a38129c9438296"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:467px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F03acc43a-907f-494e-9053-e3966ddeb6ce%2FUntitled.png?table=block&amp;id=d0299d7d-3be2-4ad6-82a3-8129c9438296&amp;cache=v2" alt="1시간 단위 데이터 백업본을 받아오고 있는 모습" loading="lazy" decoding="async"/><figcaption class="notion-asset-caption">1시간 단위 데이터 백업본을 받아오고 있는 모습</figcaption></div></figure></main>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[공유 주소 수정하기 - og:url]]></title>
        <id>https://blog.occm.cc/fixing-embed-url-og-url</id>
        <link href="https://blog.occm.cc/fixing-embed-url-og-url"/>
        <updated>2022-10-04T15:00:00.000Z</updated>
        <summary type="html"><![CDATA[자커마스 블로그 글 공유시 og:url이 메인 페이지로만 연결되는 문제점을 어떻게 고쳤는지 공유합니다.]]></summary>
        <content type="html"><![CDATA[<main class="notion light-mode notion-page notion-block-17c4bc3b50704d8c848b821baa4b66f6"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-e64c460d3475460db8c85e39c402782d">자커마스 블로그 글을 공유하면 아마 다음과 같이 표시되었을 겁니다.</div><div class="notion-blank notion-block-a21b970736624ee9943c5c3dd612e731"> </div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-8e84a8cf7aab46a7aeb116694db3bf07"><div style="position:relative;display:flex;justify-content:center;align-self:start;width:594px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fc8c7aadc-af55-4952-bd60-43cd4a0cadf4%2FUntitled.png?table=block&amp;id=8e84a8cf-7aab-46a7-aeb1-16694db3bf07&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-46d9b31edfff43b1b79efc2859dc1958">하지만 일부 서비스에서는 블로그 글 대신 블로그 메인 페이지로 이동했을겁니다. 이는 og:url 값이 엉뚱하게도 블로그 메인 주소로 설정되어 있었기 때문입니다.</div><div class="notion-text notion-block-2364686320d14f4a8819b52d5722a2e0">og:url을 설명하기 전, 대체 “og”가 무엇인지 짧게 짚고 넘어가겠습니다. og는 <b>O</b>pen <b>G</b>raph의 약자입니다.</div><div class="notion-text notion-block-7b37a2d9c27d46b4b07fd6742ea9472e">Open Graph Protocol은 어떤 웹 페이지를 소셜 미디어 등에 공유했을때 어떻게 보일 것인지 지정하는 방식을 표준화할 목적으로 만들어졌습니다. 즉 기존에는 트위터면 트위터의 방식으로, 페이스북이면 페이스북의 방식으로 정보를 지정했다면 이것을 하나의 태그 - 제목(og:title), 종류(og:type), 미리보기 이미지(og:image), 주소(og:url)와 같이 - 로 지정할 수 있도록 개발된 것입니다.</div><div class="notion-text notion-block-63be4b6a1e0b454b8f8175a4a86121f3">위 공유된 모습에서 글 제목과 설명이 표시되고, 이미지가 뜰 수 있는것도 오픈 그래프 규격에 따라 값을 미리 입력해서 가능했습니다.</div><div class="notion-text notion-block-bd5fa8105f364a2baa968fdead63c965">하지만 일부 서비스에서는 og:url 값을 이용해 링크를 만들었는데, 이 값이 글 주소와 무관하게 같은 블로그 메인을 가리키고 있어 문제가 생겼습니다.</div><div class="notion-text notion-block-ec2193b951354882bffb53e3fc90d152"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/Lastorder-DC/blog.occm.cc/blob/main/components/Container.js#L35-L38">https://github.com/Lastorder-DC/blog.occm.cc/blob/main/components/Container.js#L35-L38</a>
하지만 문제가 생깁니다. 분명 og:url은 slug(글마다 정해진 고유값)에 따라 변경되도록 구성되어 있는데도 주소가 항상 같았던 것이죠. 즉 meta.slug 라는 값이 비어있다는 결론을 내립니다.</div><div class="notion-text notion-block-5c9759e115ad46049bae70d9a1c5ad1e"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/Lastorder-DC/blog.occm.cc/blob/main/layouts/layout.js#L29">https://github.com/Lastorder-DC/blog.occm.cc/blob/main/layouts/layout.js#L29</a>
코드를 따라 가며 근원을 확인해 본 결과, 원인은 의외로 단순했습니다. 글을 읽은 뒤 slug라는 이름으로 값을 보내야 하는데도 title(제목)과 description(설명)와 같은 값만 보낼 뿐 slug를 보내지 않고 있던것입니다. 위 한줄을 추가하자 언제 문제가 있었냐는듯 주소가 잘 설정되기 시작했습니다.</div></main>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[개발중인 마스토돈 그룹 기능 소개]]></title>
        <id>https://blog.occm.cc/about-mastodon-group-function</id>
        <link href="https://blog.occm.cc/about-mastodon-group-function"/>
        <updated>2022-10-03T15:00:00.000Z</updated>
        <summary type="html"><![CDATA[마스토돈에 추가될 예정인 그룹 기능에 대해서 알아봅니다.]]></summary>
        <content type="html"><![CDATA[<main class="notion light-mode notion-page notion-block-d0e433cb290c49959e11df72dfcf7013"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-c3a6be33441247fdabcf9fafb460f4f6">마스토돈은 최근 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://nlnet.nl/discovery/">NGI0 Discovery 기금</a> 지원을 받아 여러 새 기능을 추가해가고 있습니다. (<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://nlnet.nl/project/Mastodon/">NLnet의 마스토돈 페이지</a>)</div><div class="notion-blank notion-block-7bea8409345a4ef0b64976590bb9cffa"> </div><ul class="notion-list notion-list-disc notion-block-9c93bcdca0a448338adf72184e321242"><li>타 인스턴스의 콘텐츠나 이미지 자동 삭제 기간 설정</li><ul class="notion-list notion-list-disc notion-block-9c93bcdca0a448338adf72184e321242"><li>다른 인스턴스에서 보낸 툿이나 이미지/동영상은 별도로 삭제하지 않는 한 반영구적으로 보관되었는데 이제 일정 기간이 지나면 자동 삭제할 수 있습니다.</li></ul></ul><ul class="notion-list notion-list-disc notion-block-286b2a6a93cc4b239a9e39a9a7d58879"><li>번역 기능 추가</li><ul class="notion-list notion-list-disc notion-block-286b2a6a93cc4b239a9e39a9a7d58879"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://www.deepl.com/">DeepL</a>과 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://libretranslate.com/">LibreTranslate</a>를 지원하는데 아쉽게도 DeepL은 한국어를 지원하지 않고 LibreTranslate의 한국어 번역 능력은 아직 좋지 못하답니다.</li></ul></ul><ul class="notion-list notion-list-disc notion-block-9b0ca264108644ed91a5faa5bc70b767"><li>팔로우중인 유저의 툿 중 특정 언어로 된 툿만 볼수 있는 기능 추가</li><ul class="notion-list notion-list-disc notion-block-9b0ca264108644ed91a5faa5bc70b767"><li>예를 들어 영어, 한국어를 모두 구사하는 사용자라면 한국어 툿만 볼수 있는 기능입니다.</li></ul></ul><ul class="notion-list notion-list-disc notion-block-294f3ace696a444292c822a994b41984"><li>필터 기능 강화</li><ul class="notion-list notion-list-disc notion-block-294f3ace696a444292c822a994b41984"><li>이전에는 단어 하나씩 차단되던 것을, 여러개를 묶어 차단할수 있습니다.</li><li>차단시 그냥 필터링되었다고 표시되던 것도 어떤 이유로 차단된 것인지 알 수 있어요.</li></ul></ul><ul class="notion-list notion-list-disc notion-block-3c8aee86abc34fa89fbabc2bfada3746"><li>알림 강화(가입, 신고)</li><ul class="notion-list notion-list-disc notion-block-3c8aee86abc34fa89fbabc2bfada3746"><li>가입시, 새 신고가 들어올시 알림 기능이 추가되었습니다.</li></ul></ul><div class="notion-text notion-block-cc2d7227f0e54550a421745aa80be1f5"><em>오늘은 이 중 그룹 기능에 대해서 알아보겠습니다. 편의상 ~해요 체를 사용하도록 하겠습니다.</em></div><div class="notion-blank notion-block-7ca83376297241ad826fb883ee73f52d"> </div><div class="notion-text notion-block-e2ec0cd39f12499395e1e7c9a9c6025f">타 인스턴스와 소통을 지양하는(그러나 불가능한것은 아닙니다!) 자커마스에는 다른건 큰 변화점이 아니지만, 다음 기능은 큰 변화점이에요.</div><div class="notion-blank notion-block-9facbea0404a4e1ca5cdfca2ecbdb667"> </div><ul class="notion-list notion-list-disc notion-block-f1e37da783bd4218b8f7fc1a8ad1d9f3"><li>그룹 기능 추가</li><ul class="notion-list notion-list-disc notion-block-f1e37da783bd4218b8f7fc1a8ad1d9f3"><li>그룹을 만들고 그룹 관리자를 지정할 수 있습니다.</li><li>그룹에 가입시 승인을 거쳐야 가입되도록 할 수 있습니다.</li><li>그룹에서 보낸 툿은 타임라인에 보이지 않습니다.</li><li>관리자는 그룹내 유저를 추방할 수 있습니다.</li></ul></ul><div class="notion-blank notion-block-dc8b6b8b23b143c1ba79296b5cf7569a"> </div><div class="notion-text notion-block-adef9f31125f4a11ac6861a50742df65">어디서 많이 보던 기능이지 않나요? 네! 트위터의 그룹 DM 기능과 매우 유사한 기능입니다. 차이점이라면 DM과 달리 마스토돈의 그룹 기능은 기본적으로 타임라인 형태로 되어 있을뿐만 아니라 멘션 등 기존 타임라인에서 사용하던 기능도 쓸 수 있다는점이겠네요.</div><div class="notion-blank notion-block-d794656d31194aab9adc2ecd297b91c1"> </div><div class="notion-text notion-block-e178a271b9914e5c8e5ad9e35638b1bc">아, 지금 기능을 소개하는 시점에서 그룹 기능은 아직 <span class="notion-red"><b>활발히 개발중인 기능</b></span>이에요. 여기 소개한 기능이 나중에 적용될때는 없어졌을수도 있어요. 정식 추가되는 시점에서 다시 글을 작성할게요.</div><div class="notion-blank notion-block-17f1b772846c4238a829285ac6a96037"> </div><div class="notion-text notion-block-17f7757b7a3946a785c7ce2009ca3f69">이렇게만 보면 이해가 가지 않으니 동영상으로 보여 드리겠습니다. 이 아래 첨부된 이미지나 영상은 모두 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/mastodon/mastodon/pull/19059">기능 추가 PR</a>에 첨부된 것이니 영어를 잘 하신다면 읽어보시는것도 추천드려요.</div><figure class="notion-asset-wrapper notion-asset-wrapper-video notion-block-25dd49739235429da2261e9eeb697522"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><video playsinline="" controls="" preload="metadata" src="https://file.notion.so/f/f/409bf96c-32f2-4abc-9798-2c6a5a4f14bf/b2e03fff-96da-4333-9637-9de36c3b9fc9/193271051-436428e9-7229-49fa-b82e-fe5f03e81f65.mp4?table=block&amp;id=25dd4973-9235-429d-a226-1e9eeb697522&amp;spaceId=409bf96c-32f2-4abc-9798-2c6a5a4f14bf&amp;expirationTimestamp=1779580800000&amp;signature=95rJCqUoOXKshiSiuN4w7d8NFxVtDnhVaiMIn8wq7p4" title="video"></video></div></figure><div class="notion-blank notion-block-4c36da6a19a744288b4b76d5e217d68d"> </div><div class="notion-text notion-block-fea5a799a06948b58083c61f6498de72">아직도 이해가 되지 않으시다면… 사진으로도 정리해 봤어요.</div><div class="notion-blank notion-block-7403937283524ed394bd2fc35fba7bfc"> </div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-4e44186e21d5499a833bf2a881e8a0df"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F38625280-9cad-48b3-bf2b-958fcd7e73e3%2F192580192-602ec90b-6608-4c81-b611-940e4f879e4c.png?table=block&amp;id=4e44186e-21d5-499a-833b-f2a881e8a0df&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-34e7fae4f0f64169b28149fc48ebde54">로그인하지 않으면 위와 같이 표시됩니다.</div><div class="notion-blank notion-block-2f34edbeb59640cf8b20c476c35d5267"> </div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-ad4bfac86f994aeb8e7847cf03013bd3"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fd4b50be6-02a8-410e-bf2d-4898c59b7d1b%2F191318311-a6b2bd67-5198-4a98-a954-f034771123ad.png?table=block&amp;id=ad4bfac8-6f99-4aeb-8e78-47cf03013bd3&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-00c43c59676a40d482b9617481263a00">그룹에 툿을 보내려면 평상시 지구본/좌물쇠를 선택하던 부분에서 특정 그룹 한정 보이게 합니다! 라고 설정하면 됩니다. 한번 설정해 두면 브라우저를 새로고침하기 전까지 유지도 가능해요.</div><div class="notion-blank notion-block-7aef84f52e5f4b7082a9994fdc702977"> </div><div class="notion-row notion-block-8a9d2cb7a04e49b386db5949f3185751"><div class="notion-column notion-block-7e1c6e944c884ff3946e87c50ed01b59" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.5)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-6cf7c50096e34dd08649818d655cf112"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:350px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F54e6def9-a330-420f-b74d-6cbd57354582%2F192572962-8b0f9d6f-522f-44ff-a8d0-86ce56bd48a9.png?table=block&amp;id=6cf7c500-96e3-4dd0-8649-818d655cf112&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div><div class="notion-column notion-block-edce7f64f40e43fcaad8894ff9c4a283" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.5)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-b2bf9efafe5f4ee7b1722a69551bc5c4"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:350px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F5c9b1896-8f7e-4031-aa83-9b86f8da52fc%2F192573147-855b8f67-f1b4-4a12-902d-72e99b408745.png?table=block&amp;id=b2bf9efa-fe5f-4ee7-b172-2a69551bc5c4&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div></div><div class="notion-text notion-block-39b0fe3aedcc44dcac87e916082baced">관리자가 허가해야 툿이 보이게 할 수도 있어요. 관리자가 거부한 툿은 본인만 볼 수 있답니다. 자캐 커뮤니티라면 러너가 보낸 툿이 잘못되었다면 다른 사람에게 보이기 전 거부하고, 잘 작성된 툿만 보이게 설정할수도 있겠죠? 활용도는 무궁무진해요.</div><div class="notion-blank notion-block-2e06b60a75914d7690b2d6f02469fc1b"> </div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-69b02e7175bb4b3a9647e34fd4bd3e01"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F817c58c6-ea9f-49df-a474-54773d66b762%2F193268539-e3326770-45d3-4cfd-8aa8-12adfe5250e5.png?table=block&amp;id=69b02e71-75bb-4b3a-9647-e34fd4bd3e01&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-86b04a4848734414b8695ec7be1b5de3">이외 관리자는 그룹 구성원을 보거나 가입 대기 사용자를 볼 수 있고요,</div><div class="notion-blank notion-block-d0c02da073d14ab6998c036564bf722b"> </div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-fe31156d837c4f8db25c91b725b9ece5"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fb778c8fa-d57b-46c2-93b0-923780061743%2F193101108-bfcf42e2-2f15-46f4-b2ba-df23c7d04300.png?table=block&amp;id=fe31156d-837c-4f8d-b25c-91b725b9ece5&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-d0f25cc1a4d94ce980380065a62e218f">사용자를 추방하거나 그룹에 다시는 참여할 수 없도록 할수도 있어요.</div><div class="notion-blank notion-block-b3af56907aa54478baaf84771d2bca98"> </div><div class="notion-text notion-block-e0cfaac5d1644645997457259d7fd7b7">굉장히 대단한 기능이죠? 개인적으로 마스토돈에서 자캐 커뮤니티를 진행할때 가장 큰 애로사항이 그룹 DM의 부재였는데 기능이 추가된다면 훨씬 편해질것 같아서 블로그 글을 작성하게 되었어요.</div></main>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[서버 재부팅 예정]]></title>
        <id>https://blog.occm.cc/server-reboot-planned</id>
        <link href="https://blog.occm.cc/server-reboot-planned"/>
        <updated>2022-10-03T15:00:00.000Z</updated>
        <summary type="html"><![CDATA[2022년 10월 4일 22시부터 약 10분간 서버 재부팅 예정입니다.]]></summary>
        <content type="html"><![CDATA[<main class="notion light-mode notion-page notion-block-c1553c124e9b435c9c945191ebab485f"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-9241950a424d4322867ac7b603b8a36d">서버 보안패치 적용과 DB 마이그레이션 작업을 위해 2022년 10월 4일 22시부터 약 10분간 서버 재부팅 예정입니다.</div><div class="notion-text notion-block-b2d37711231349cab0adefd7106eed40">10분간 서버 접속이 불안정할 수 있으며, 해당 시간 동안 발송된 툿은 발행되지 않을 수 있습니다.</div><div class="notion-blank notion-block-4df3a68074cf4c18b2f69f1c1d546c20"> </div><div class="notion-text notion-block-6b252b66512b40f6b009ce07c5cb6406">양해 부탁드립니다.</div></main>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[OCCM Mastodon 소개]]></title>
        <id>https://blog.occm.cc/occm-mastodon-introduce</id>
        <link href="https://blog.occm.cc/occm-mastodon-introduce"/>
        <updated>2022-10-03T15:00:00.000Z</updated>
        <summary type="html"><![CDATA[OCCM Mastodon의 탄생 배경과 설치법에 대해 알아봅니다.]]></summary>
        <content type="html"><![CDATA[<main class="notion light-mode notion-page notion-block-a4cafb04b8b04235afa9b9d465ba1484"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-dbdbd06db2584f8e99944ee44f4266a5">OCCM Mastodon은 마스토돈을 자커마스에 맞게 수정한 버전입니다.
소스코드는 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/Lastorder-DC/mastodon">이 저장소</a>에서 자유롭게 다운로드하실 수 있습니다.</div><div class="notion-text notion-block-ddc90592b330470ab3c6045f6ace0108">OCCM Mastodon과 일반 마스토돈 버전의 차이점은 다음과 같습니다.</div><ul class="notion-list notion-list-disc notion-block-e6eab6caed0f410da053d9379f903dce"><li>계정 생성시 기본 프라이버시 옵션이 “타임라인에 비표시”입니다.(모두가 볼 수는 있으나 프로필 페이지, 로컬/연합 타임라인에는 비표시)</li></ul><ul class="notion-list notion-list-disc notion-block-ff9c0413dec14daf9ae3ac500044e00b"><li>한국어 검색 토크나이저가 기본 적용되어 있습니다. 조사가 붙어있어도 잘 인식됩니다.</li><ul class="notion-list notion-list-disc notion-block-ff9c0413dec14daf9ae3ac500044e00b"><li>예를 들어 “마스토돈”을 검색했다면 토크나이저 미적용시 조사 없이 마스토돈이라 작성한 다음 툿만 검색됩니다.</li><ul class="notion-list notion-list-disc notion-block-d8a08d7659854b118bc2777ff1ae3626"><li><b>마스토돈</b> 정말 좋아요</li><li>저 <b>마스토돈</b> 계정 만들었어요</li></ul><li>토크나이저 적용시 조사가 붙은 다음 툿도 검색됩니다.</li><ul class="notion-list notion-list-disc notion-block-f62ee61754af417ea78c96ff17ecf7ab"><li><b>마스토돈</b>에 계정 만들었어요</li><li>저는 <b>마스토돈</b>을 좋아해요</li></ul><li>마스토돈 자체 검색 제한으로 내 툿이나, 내가 교류한 상대방의 툿만 찾아볼 수 있습니다. 이외 해시태그를 사용한 검색은 자유롭게 가능합니다. (즉 트친소 해시태그를 사용하면 내가 교류한적이 없는 상대방의 툿도 찾을수 있습니다)</li><ul class="notion-list notion-list-disc notion-block-bed0e0e788c44a66aae54e816060fcea"><li>해시태그를 사용한 툿의 예시는 다음과 같습니다</li><ul class="notion-list notion-list-disc notion-block-ce011080d15e4e3eba9549a302dc5288"><li><span class="notion-blue">#XX커뮤_트친소</span> XXX캐릭터 러닝했었던 YYY라고 합니다!</li><li><span class="notion-blue">#커뮤홍보</span> XX커뮤를 홍보합니다!</li></ul></ul></ul></ul><ul class="notion-list notion-list-disc notion-block-d189d11fe399452f80c2d041ea0bf973"><li>이외 마스토돈 소스코드 저장소에는 적용되었지만 버전업데이트가 되지 않아 반영되지 않은 중요한 변경사항을 미리 반영하는 경우도 있습니다.</li></ul><div class="notion-blank notion-block-27f7405324b34099862c8483e8ca74b7"> </div><div class="notion-text notion-block-6e311ef886274d8abfdda521e2449bcb">설치 방법은 기본적으로 마스토돈 설치 방법과 같습니다만, 설치시</div><div class="notion-callout notion-gray_background_co notion-block-eadd18123b3849b08bfb4b968e26d879"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-icon" role="img" aria-label="🐘">🐘</span></div><div class="notion-callout-text">git clone <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/tootsuite/mastodon.git">https://github.com/tootsuite/mastodon.git</a> live &amp;&amp; cd live</div></div><div class="notion-text notion-block-b13c380b28f846dcb603ceea600f5735">대신</div><div class="notion-callout notion-gray_background_co notion-block-ecfdc590a1ad4147a9f455e29f02f44f"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-icon" role="img" aria-label="🇰🇷">🇰🇷</span></div><div class="notion-callout-text">git clone <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/Lastorder-DC/mastodon.git">https://github.com/Lastorder-DC/mastodon.git</a> live &amp;&amp; cd live</div></div><div class="notion-text notion-block-2fc1882f48fc4e5382abd16ff1d69c8d">를 사용해주시면 됩니다.</div><div class="notion-blank notion-block-606fba72d18046338852d1d71112f3d0"> </div><div class="notion-text notion-block-3ec625e7fef24ad59391e5925e56e9e5">혹시나 특정 버전 설치가 필요하다면 git checkout 명령을</div><div class="notion-callout notion-gray_background_co notion-block-aa6d336181234e988eda6fe83db040b0"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-icon" role="img" aria-label="🇰🇷">🇰🇷</span></div><div class="notion-callout-text">git checkout v3.5.3-occm1</div></div><div class="notion-text notion-block-5a1ee01f6053414d9b98bb3b9f0fb260">와 같이 입력해주세요.</div></main>]]></content>
    </entry>
</feed>