utterances๋Š” ๊ฐœ์ธ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์˜คํ”ˆ์†Œ์Šค ๋Œ“๊ธ€ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ๊นƒํ—™ ์Šคํƒ€์ผ์˜ ๊น”๋”ํ•œ ๋””์ž์ธ๊ณผ ๋‹คํฌ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ์—๋Š” ๋‚˜์ดํŠธ ๋ชจ๋“œ์™€ ๋‹คํฌ๋ชจ๋“œ๋ฅผ ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ดํŠธ๊ฐ€ ๋งŽ์•„์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ๋ธ”๋กœ๊ทธ ๋˜ํ•œ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์ด๋ฏ€๋กœ utterances์˜ ํ…Œ๋งˆ๋ฅผ ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ์ ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฑฐ์˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” utterances์˜ ํ…Œ๋งˆ๋ฅผ ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ค‘์ ์œผ๋กœ ์†Œ๊ฐœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Utterances ์ ์šฉ ๋ฐฉ๋ฒ•

๋‹จ์ผ ํ…Œ๋งˆ ์ ์šฉ

์›น์‚ฌ์ดํŠธ๊ฐ€ ํ•˜๋‚˜์˜ ํ…Œ๋งˆ๋งŒ ์ ์šฉ๋  ๋•Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋Œ“๊ธ€ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  1. ๋Œ“๊ธ€ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๋ ˆํฌ๋ฅผ public์œผ๋กœ ์„ค์ •
  2. ๊นƒํ—™์— utterances app ์„ค์น˜
  3. utterances ์‚ฌ์ดํŠธ์— ์ ‘์†
  4. repo์™€ theme๋ฅผ ์ง€์ •ํ•ด์ฃผ๊ณ  ํ•˜๋‹จ์— ์œ„์น˜ํ•œ ์Šคํฌ๋ฆฝํŠธ ๋ณต์‚ฌ
  5. ๋Œ“๊ธ€์„ ์œ„์น˜์‹œํ‚ฌ ๋ถ€๋ถ„์— ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๋ถ™์—ฌ๋„ฃ๊ธฐ

utterances app์„ ์„ค์น˜ํ•  ๋•Œ, ๋ชจ๋“  ๋ ˆํฌ ํ˜น์€ ๋Œ“๊ธ€ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ๋ ˆํฌ๋งŒ ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์ด๋‚˜๋ฏน ํ…Œ๋งˆ ์ ์šฉ

๋‹คํฌ๋ชจ๋“œ์™€ ๋‚˜์ดํŠธ๋ชจ๋“œ๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๋Š” ์‚ฌ์ดํŠธ์˜ ๊ฒฝ์šฐ, Utterances ๋˜ํ•œ ์—ฌ๊ธฐ์— ๋งž์ถฐ์„œ ํ…Œ๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋””์ž์ธ์ ์ธ ํ†ต์ผ์„ฑ์„ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€์„ ์ ์šฉํ•  ์œ„์น˜ ์„ ์ •

/layouts/partials/comments.html

{{- /* Comments area start */ -}}
<div class="comments">
    <script>
        <!-- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ -->
    </script>
</div>
{{- /* Comments area end */ -}}

์šฐ์„  ๋Œ“๊ธ€์„ ๋„ฃ์„ ๋ถ€๋ถ„์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ œ ๋ธ”๋กœ๊ทธ์— ์‚ฌ์šฉ๋œ hugo์˜ ๊ฒฝ์šฐ ํ…Œ๋งˆ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ๋งˆ๋ฅผ ์ œ์ž‘ํ•˜๋Š” ๋ถ„๋“ค๋„ ์ด๋Ÿฌํ•œ ๊ฒƒ์„ ๊ณ ๋ คํ•˜์—ฌ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒŒ์ผ์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋‘ก๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” comments.html์ด๋ผ๋Š” ํŒŒ์ผ๋งŒ์„ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ๋Œ“๊ธ€ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

loadComment();
const callback = (mutationsList) => {
    mutationsList.forEach(mutation => {
        if (mutation.attributeName === "class" && document.querySelector('.utterances-frame')) {
            const message = {
                type: 'set-theme',
                theme: getTheme()
            };
            const iframe = document.querySelector('.utterances-frame');
            iframe.contentWindow.postMessage(message, 'https://utteranc.es');
        }
    })
}
const mutationObserver = new MutationObserver(callback);
mutationObserver.observe(document.body, { attributes: true });

function getTheme() { // ์‚ฌ์ดํŠธ์˜ ํ…Œ๋งˆ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ
    var theme = window.localStorage && window.localStorage.getItem("pref-theme");
    if (theme == null) {
        theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
    }
    return theme === 'dark' ? 'github-dark' : 'github-light';
}

function loadComment() {
    let s = document.createElement('script');
    s.src = 'https://utteranc.es/client.js';
    s.setAttribute('repo', 'junghoon-vans/vanslog'); // ๋ณธ์ธ ๋ ˆํฌ ์ง€์ •
    s.setAttribute('issue-term', 'pathname');
    s.setAttribute('theme', getTheme());
    s.setAttribute('crossorigin', 'anonymous');
    s.setAttribute('async', '');
    document.querySelector('div.comments').innerHTML = '';
    document.querySelector('div.comments').appendChild(s);
}

์œ„ ์ฝ”๋“œ๋Š” loadComments ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ utterances ๋Œ“๊ธ€์„ ๋ถˆ๋Ÿฌ์˜จ ์ดํ›„, mutationObserver๊ฐ€ DOM์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ธ์ง€ํ•˜์—ฌ utterances์˜ ํ…Œ๋งˆ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ต๋‹ˆ๋‹ค. getTheme ๋ฉ”์„œ๋“œ๋Š” ํ˜„์žฌ ์‚ฌ์ดํŠธ๊ฐ€ ์–ด๋–ค ๋ชจ๋“œ์ธ์ง€๋ฅผ ํ™•์ธํ•ด์„œ ๋Œ“๊ธ€์— ์ ์šฉํ•  ํ…Œ๋งˆ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ œ ๋ธ”๋กœ๊ทธ ํ…Œ๋งˆ์ธ papermod๋Š” ํ˜„์žฌ ๋ชจ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— pref-theme๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๊ฒƒ์„ ํ†ตํ•ด ํ˜„์žฌ ๋‹คํฌ ๋ชจ๋“œ์ธ์ง€ ๋ผ์ดํŠธ ๋ชจ๋“œ์ธ์ง€๋ฅผ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ…Œ๋งˆ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•œ ์ ์ด ์—†๋‹ค๋ฉด ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ํ•ด๋‹น ๊ฐ’์ด null์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์‹œ์Šคํ…œ ์„ค์ •์„ ๋”ฐ๋ผ๊ฐ€๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํ˜น์‹œ๋ผ๋„ ์ด ๊ธ€์„ ์ฐธ๊ณ ํ•˜์—ฌ ๋ณธ์ธ ๋ธ”๋กœ๊ทธ์— ์ ์šฉํ•˜๋ ค ํ•˜์‹œ๋ ค๋Š” ๋ถ„์ด ๊ณ„์‹œ๋‹ค๋ฉด ๋‹ค์Œ์„ ์œ ์˜ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. getTheme ๋ฉ”์„œ๋“œ์˜ ๊ฒฝ์šฐ ์‚ฌ์ดํŠธ์— ๋”ฐ๋ผ ์ƒ‰์ƒ ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ผญ ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์–ด๋–ค ๊ฒƒ์ธ์ง€๋ฅผ ํ™•์ธํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‘˜์งธ๋กœ loadCommant ๋ฉ”์„œ๋“œ์—์„œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ง€์ •์„ ๋ณธ์ธ์˜ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์น˜๋ฉฐ

๋ธ”๋กœ๊ทธ๋ฅผ ์ง์ ‘ ์ปค์Šคํ…€ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ”„๋ก ํŠธ์—”๋“œ ์†Œ์Šค์ฝ”๋“œ์— ์†์„ ๋Œ€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „๊นŒ์ง€ ์ €์˜ ์˜์—ญ์€ ๋ฐฑ์—”๋“œ์— ํ•œ์ •๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๋ง‰์ƒ ํ•ด๋ณด๋‹ˆ ํ”„๋ก ํŠธ์—”๋“œ๋„ ์žฌ๋ฏธ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ž์‹ ์˜ ํ•œ๊ณ„๋ฅผ ์ œ ์Šค์Šค๋กœ ์„ค์ •ํ•˜๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ์€ ์•„๋‹Œ์ง€์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋Š” ์กฐ๊ธˆ ๋” ์—ด๋ฆฐ ๋งˆ์Œ์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฉด์œผ๋กœ ๊ณต๋ถ€ํ•˜๋Š” ๋งˆ์Œ๊ฐ€์ง์„ ๊ฐ€์ ธ์•ผ ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.