개인 블로그를 만들다 보면 댓글 기능을 추가하고 싶어지는 순간이 있습니다.
이번 글에서는 GitHub Discussions 기반 댓글 시스템인 Giscus를 사용해서 Next.js 블로그에 댓글 기능을 추가하는 방법을 정리합니다.
Giscus란?
Giscus는 GitHub Discussions를 활용한 댓글 시스템입니다.
블로그 게시글마다 GitHub Discussion을 연결하고, 사용자가 남긴 댓글을 블로그 화면에 보여주는 방식으로 동작합니다.
쉽게 말하면 블로그 댓글 데이터는 GitHub Discussions에 저장되고, 블로그에서는 Giscus 위젯을 통해 그 댓글을 보여주는 구조입니다.
Giscus의 장점
Giscus를 사용하면 다음과 같은 장점이 있습니다.
- GitHub 계정으로 댓글 작성 가능
- GitHub Discussions에 댓글 저장
- 별도의 댓글 서버 없이 사용 가능
- 무료 사용 가능
- React, Next.js 프로젝트에 쉽게 적용 가능
- 다크모드 지원
- 댓글 관리를 GitHub에서 할 수 있음
개발 블로그라면 방문자도 GitHub 계정을 가지고 있을 가능성이 높기 때문에 댓글 시스템으로 잘 어울립니다.
동작 방식
Giscus는 현재 페이지와 GitHub Discussion을 연결합니다.
블로그 게시글 페이지
→ Giscus가 현재 페이지 경로 확인
→ 해당 경로와 연결된 GitHub Discussion 탐색 또는 생성
→ 댓글 작성
→ 댓글은 GitHub Discussions에 저장
→ 블로그에서 댓글 목록 출력
1. GitHub 저장소 준비하기
먼저 댓글을 저장할 GitHub 저장소가 필요합니다.
블로그 코드가 올라가 있는 저장소를 그대로 사용해도 되고, 댓글 전용 저장소를 따로 만들어도 됩니다.
단, Giscus를 사용하려면 저장소가 Public이어야 합니다.
2. GitHub Discussions 활성화하기
Giscus는 GitHub Issues가 아니라 GitHub Discussions를 기반으로 동작합니다.
저장소에서 Discussions 기능을 켜야 합니다.
Repository → Settings → General → Features → Discussions 체크
활성화하면 저장소 상단에 Discussions 탭이 생깁니다
3. Discussion Category 만들기
댓글을 저장할 카테고리를 만들어줍니다.
저는 기존의 General을 사용했습니다 카테고리 추가가 필요한 경우 아래의 경로에서 추가하면 됩니다
Repository → Discussions → Categories
Giscus 설정에서 카테고리를 선택하면 댓글들이 해당 카테고리에 저장됩니다
현재는 General로 설정되어 있습니다.
4. Giscus App 설치하기
Giscus가 저장소의 Discussions에 접근하려면 GitHub App 설치가 필요합니다.
Giscus App을 설치할 때는 전체 저장소가 아니라 댓글을 사용할 저장소만 선택하는 것이 좋습니다.
설정에서 댓글기능을 사용할 레포지터리에 권한 부여
5. Giscus 라이브러리 설치하기
Giscus 설정을 마쳤다면 Next.js 프로젝트에 공식 React 컴포넌트 라이브러리를 설치합니다. 스크립트로도 작성 가능하지만 라이브러리를 사용하면 테마 변경이나 컴포넌트 언마운트 시의 상태 관리를 Next.js가 알아서 안전하게 처리해 줍니다.
# npm 사용시
npm install @giscus/react
# 또는 yarn, pnpm, bun 사용 시
yarn add @giscus/react
pnpm add @giscus/react
bun add @giscus/react
Giscus 설정 페이지에서 댓글 기능에 사용할 저장소 정보를 확인합니다.
설정해야 할 항목은 다음과 같습니다.
<script src="https://giscus.app/client.js"
data-repo="댓글을 사용할 저장소명(github아이디/레포지터리명)"
data-repo-id="github 저장소 고유 ID"
data-category="댓글이 생성될 Github Discussions 카테고리"
data-category-id="카테고리 고유 ID"
data-mapping="어떤 기준으로 Discussion을 연결할지 정하는 옵션"
data-strict="Discussion을 어느정도로 엄격하게 할지 정하는 옵션(0, 1)"
data-reactions-enabled="댓글에 Github Reaction 기능을 사용할지 정하는 옵션(좋아요, 하트 등 사용)"
data-emit-metadata="메타데이터 이벤트를 보낼지 정하는 옵션"
data-input-position="댓글 입력창의 위치를 정하는 옵션"
data-theme="댓글창의 테마를 정하는 옵션"
data-lang="언어 설정"
crossorigin="CORS 정책과 관련된 옵션 외부 스크립트를 불러올때 사용"
async>
</script>
6. 댓글 컴포넌트 만들기
컴포넌트 파일을 생성합니다.
giscus 설정 페이지에서 생성된 값을 그대로 넣으면 됩니다. (https://giscus.app/ko)
'use client';
import { useEffect, useState } from 'react';
import { useTheme } from 'next-themes';
import Giscus from '@giscus/react';
export default function Comments() {
const { theme, resolvedTheme } = useTheme();
const [isMounted, useState] = useState(false);
// 하이드레이션 에러 방지를 위한 마운트 체크
useEffect(() => {
useState(true);
}, []);
if (!isMounted) {
return <div className="mt-12 min-h-[380px]" />;
}
// next-themes의 테마 상태에 맞춰 Giscus 테마 동적 지정
const currentTheme = resolvedTheme || theme || 'light';
const giscusTheme = currentTheme === 'dark' ? 'dark_dimmed' : 'light';
return (
<section className="mt-12 w-full border-t border-slate-200 pt-10 dark:border-slate-800">
<h2 className="mb-6 text-xl font-bold text-slate-950 dark:text-slate-50">💬 댓글 나누기</h2>
<div className="min-h-[380px]">
<Giscus
id="comments"
repo="GitHub아이디/저장소명"
repoId="github 저장소 고유 ID"
category="댓글이 생성될 Github Discussions 카테고리"
categoryId="카테고리 고유 ID"
mapping="pathname" // 보통 현재 페이지 경로(pathname)를 기준으로 묶습니다.
strict="1" // 엄격한 일치 옵션 (0 또는 1)
reactionsEnabled="1" // 리액션(좋아요, 하트 등) 활성화 (1 또는 0)
emitMetadata="0" // 메타데이터 이벤트 송신 여부 (1 또는 0)
inputPosition="bottom" // 댓글 입력창 위치 (top 또는 bottom)
theme={giscusTheme} // 가공한 테마 값 전달
lang="ko" // 언어 설정 (한국어: ko)
loading="lazy" // 지연 로딩을 통한 초기 페이지 성능 최적화
/>
</div>
</section>
);
}
게시글 본문 아래에 추가합니다.
<Comments />
7. 댓글 기능 확인
페이지 하단에 댓글 영역이 보이면 성공입니다.
GitHub 계정으로 로그인하면 댓글을 작성할 수 있습니다.
마무리
이번 글에서는 Next.js로 구현한 블로그에 Giscus를 사용해 댓글 기능을 추가했습니다.
Giscus는 GitHub Discussions를 기반으로 동작하기 때문에 개발 블로그와 잘 어울립니다.
정리하면 다음과 같습니다.
- Giscus는 GitHub Discussions 기반 댓글 시스템
- GitHub 계정으로 댓글 작성 가능
- 별도 댓글 서버 없이 사용 가능
- Next.js에서 컴포넌트 하나로 쉽게 적용 가능
- 게시글 경로 기준으로 댓글 영역 연결 가능
- 무료로 사용할 수 있음
개인 개발 블로그에 댓글 기능을 추가하고 싶다면 Giscus는 가장 간단하고 실용적인 선택지 중 하나입니다.
