안녕하세요!
 
블로그나 웹사이트를 운영하는 경우 댓글 시스템을 추가하는 것은 독자와 소통하고 콘텐츠를 중심으로 커뮤니티를 구축하는 좋은 방법이 될 수 있습니다. 그러나 올바른 댓글 시스템을 찾는 것은 어려움이 있습니다.. 특히 개인 정보 보호, 보안 및 사용 편의성이 우려되는 경우 더욱 그렇습니다.
 
오늘은 notion api를 활용해 개발중인 blog에 utterance를 활용한 댓글기능 구현에 대해 알아보도록 하겠습니다. 보통 댓글작업할때 server db나 파이어베이스 등 을 활용해서 작업하는데요, utterance라는 것을 활용하면 github issue를 마치 댓글처럼 사용할 수 있습니다.

Utterances

[Utterances_공홈]을 보면 사용방법에 대해 자세하게 알려져 있습니다.
 
utterance는 GitHub 문제를 댓글 저장 및 관리를 위한 백엔드로 사용하는 간단한 오픈 소스 댓글 시스템입니다. 이번 포스팅에서는 스크립트를 사용하여 React 앱에 Utterances 주석 시스템을 추가하는 방법을 소개할 예정입니다!

Utterances 사용해보기!

1단계: GitHub 리포지토리 생성

Utterances를 사용하려면 웹 사이트 또는 블로그에 대한 공용 GitHub 리포지토리를 만들어야 합니다. 웹 사이트의 각 페이지 또는 게시물에는 저장소에 해당 문제가 있으므로 저장소에 문제가 활성화되어 있는지 확인해야합니다.

2단계: 반응 구성 요소 만들기

React 앱에서 페이지 또는 게시물에 대한 새 구성 요소를 만듭니다. useEffect hook을 사용하여 Utterances 스크립트를 DOM에 추가합니다.
 
JavaScript
import { useEffect } from 'react';

function Post() {
  useEffect(() => {
    const script = document.createElement('script');
    script.setAttribute('src', 'https://utteranc.es/client.js');
    script.setAttribute('crossorigin', 'anonymous');
    script.setAttribute('async', true);
    script.setAttribute('repo', 'myusername/mywebsite-comments');
    script.setAttribute('issue-term', 'pathname');
    script.setAttribute('theme', 'github-light');
    document.body.appendChild(script);
  }, []);

  return (
    <div>
      <h1>My Awesome Post</h1>
      <p>Welcome to my post! Here's some content...</p>
      <div id="utterances-container" />
    </div>
  );
}
 
이 코드에서는 useEffect 를 사용하여 새 script 요소를 만들고 Utterances 스크립트에 필요한 속성을 설정하고 문서의 body에 추가합니다.
 
또한 댓글을 표시하는 데 사용될 utterances-containerid를 사용하여 빈 div를 렌더링하고 있습니다.

3단계: Utterances 스크립트 사용자 지정

repo 속성은 GitHub 리포지토리의 사용자 이름/repo-name으로 설정되어야 하며 issue-term 속성은 pathname 으로 설정되어야 합니다. theme 속성을 설정하여 댓글 시스템의 테마를 사용자 정의할 수도 있습니다.

4단계: 구성 요소 추가

마지막으로 Post 구성 요소를 React 앱에 추가하고 테스트해볼 수 있습니다.
JavaScript
function App() {
  return (
    <div>
      <Post />
    </div>
  );
}
 
이제 끝입니다! 스크립트를 사용하여 React 앱에 Utterances 주석 시스템을 성공적으로 추가했습니다.
Utterances를 사용하면 기존 GitHub 문제 시스템을 활용하여 안전하고 사용하기 쉽고 사용자 지정 가능한 방식으로 웹 사이트 또는 블로그에 댓글 시스템을 추가할 수 있습니다.

Utterances에 darkmode, lightmode 추가하기

우리는 next를 사용하고 있으며, theme에 따라 darkmode, lightmode 를 구분하게 할 것입니다.
 
TypeScript
"use client";
import { useEffect } from "react";
import { CONFIG } from "../../../site.config";
import { useTheme } from "next-themes";

type Props = {
  issueTerm: string;
};

export default function Utterances({ issueTerm }: Props) {
  const { systemTheme, theme } = useTheme();
  const currentTheme = theme === "system" ? systemTheme : theme;

  useEffect(() => {
    const theme = currentTheme === "dark" ? "github-dark" : "github-light";
    // 'github-dark'
    const script = document.createElement("script");
    const anchor = document.getElementById("comments");
    if (!anchor) return;

    script.setAttribute("src", "https://utteranc.es/client.js");
    script.setAttribute("crossorigin", "anonymous");
    script.setAttribute("async", `true`);
    script.setAttribute("issue-term", issueTerm);
    script.setAttribute("theme", theme);
    const config: { [key: string]: string } = CONFIG.utterances.config;
    Object.keys(config).forEach((key) => {
      script.setAttribute(key, config[key]);
    });
    anchor.appendChild(script);
    return () => {
      anchor.innerHTML = "";
    };
  });
  return (
    <>
      <div id="comments" className="md:-ml-16">
        <div className="utterances-container"></div>
      </div>
    </>
  );
}
 
여기서 봐야할 내용은 useTheme() 입니다. 우리는 useTheme을 통해서 시스템의 다크, 라이트 모드를 구분 그로인해 utterances의 theme을 변경해주는 것입니다.
 
이렇게 하면 우리는 darkmode와 lightmode를 구분할 수 있습니다.

결론

결론적으로 Utterances는 웹사이트나 블로그에 댓글 시스템을 추가할 수 있는 간단하고 오픈 소스이며 사용자 지정 가능한 방법을 제공합니다. Utterances는 GitHub 문제의 기능을 활용하여 댓글을 관리하고 구성하기 위한 안전하고 사용하기 쉬운 플랫폼을 제공합니다.
 
이 포스팅에 설명된 단계를 따르면 스크립트를 사용하여 쉽고 빠르게 Utterances 주석 시스템을 React, Next.js 앱에 추가할 수 있습니다. 개인 블로그를 운영하든 대규모 웹 사이트를 운영하든 Utterances는 독자와 소통하고 콘텐츠를 중심으로 커뮤니티를 구축하는 데 도움이 될 수 있습니다.
 
그렇다면 Utterances를 사용해 보고 웹 사이트나 블로그에서 사용자 경험을 향상시키는 데 어떻게 도움이 되는지 확인해보세요! 사용 용이성, 보안 및 사용자 지정 옵션을 갖춘 Utterances는 자신의 웹사이트나 블로그에 댓글 시스템을 추가하려는 모든 사람에게 탁월한 선택일겁니다.
 
이상입니다! 감사합니다 :D