안녕하세요, 자바파커입니다.
"블로그에 글만 올리면 끝인가요? 수익도 낼 수 있고, 독자와 소통도 할 수 있다면 좋겠는데..."
GitHub Pages 블로그도 광고를 달아 수익을 만들 수 있고, 댓글 시스템을 붙여 독자와 소통할 수 있습니다. 결론부터 말씀드리면 — 정적 사이트라서 불가능할 것 같지만, 방법은 충분히 있습니다.
이번 포스팅에서는 Google AdSense와 쿠팡 파트너스로 수익화하는 방법, 그리고 Utterances로 GitHub 기반 댓글 시스템을 구축하는 방법을 다룹니다. "GitHub 블로그 A to Z" 시리즈의 마지막 편입니다.
블로그 수익화 옵션 비교
GitHub Pages 블로그에 적용할 수 있는 수익화 방법은 크게 세 가지입니다.
| 방법 | 난이도 | 승인 필요 | 수익 구조 | 특징 |
|---|---|---|---|---|
| Google AdSense | 중간 | 승인 심사 있음 | CPC (클릭당 과금) | 가장 보편적, 심사 통과가 관건 |
| 쿠팡 파트너스 | 쉬움 | 가입 즉시 가능 | CPS (구매당 수수료) | 한국 사용자 대상으로 효과적 |
| 제휴 마케팅 | 중간 | 업체별 다름 | 건당 수수료 | 특정 상품/서비스 추천 |
초보 블로거라면 쿠팡 파트너스를 먼저 시작하고, 블로그가 어느 정도 성장한 뒤 AdSense 승인을 신청하는 것을 추천합니다.
Google AdSense 신청 및 설정
AdSense 승인 조건
구글이 공식적으로 밝히지는 않지만, 경험적으로 알려진 조건들이 있습니다.
- 양질의 포스팅이 15개 이상
- 각 포스팅이 1,000자 이상의 충실한 내용
- 개인정보처리방침(Privacy Policy) 페이지 존재
- 커스텀 도메인 사용 (github.io 도메인으로는 승인이 어려울 수 있음)
- 저작권 문제가 없는 콘텐츠
AdSense 신청 절차
- Google AdSense에 접속하여 가입합니다
- 블로그 URL(
https://blog.javapark.kr)을 등록합니다 - AdSense에서 제공하는 인증 코드를 블로그의
<head>에 추가합니다 - 심사 결과를 기다립니다 (보통 1~2주)
Gatsby에 AdSense 코드 삽입하기
gatsby-ssr.js 파일을 사용해 <head>에 스크립트를 추가합니다.
// gatsby-ssr.js
import React from "react"
export const onRenderBody = ({ setHeadComponents }) => {
setHeadComponents([
<script
key="adsense"
async
src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXXXXXXXXXX"
crossOrigin="anonymous"
/>,
])
}ca-pub-XXXXXXXXXXXXXXXX 부분은 AdSense에서 제공하는 본인의 퍼블리셔 ID로 교체합니다.
포스팅 내에 광고 배치하기
승인이 완료되면, 광고 컴포넌트를 만들어 원하는 위치에 삽입할 수 있습니다.
// src/components/AdSense.js
import React, { useEffect } from "react"
const AdSense = ({ slot, format = "auto", responsive = true }) => {
useEffect(() => {
try {
;(window.adsbygoogle = window.adsbygoogle || []).push({})
} catch (e) {
console.error("AdSense error:", e)
}
}, [])
return (
<div style={{ textAlign: "center", margin: "20px 0" }}>
<ins
className="adsbygoogle"
style={{ display: "block" }}
data-ad-client="ca-pub-XXXXXXXXXXXXXXXX"
data-ad-slot={slot}
data-ad-format={format}
data-full-width-responsive={responsive}
/>
</div>
)
}
export default AdSense포스팅 템플릿에서 사용할 때는 다음과 같이 합니다.
// 포스팅 본문 아래에 삽입
<AdSense slot="1234567890" />쿠팡 파트너스 가입 및 광고 삽입
쿠팡 파트너스는 가입 후 바로 사용할 수 있어서 블로그 초기부터 적용하기 좋습니다. 방문자가 링크를 통해 24시간 내에 구매하면 수수료(보통 3~5%)를 받을 수 있습니다.
가입 절차
- 쿠팡 파트너스에 접속하여 가입합니다
- 미디어(블로그) 정보를 등록합니다
- 승인 후 광고 소재를 생성할 수 있습니다
다이나믹 배너 삽입 (iframe 방식)
쿠팡 파트너스에서 제공하는 다이나믹 배너를 Gatsby 컴포넌트로 만들어봅시다.
// src/components/CoupangAd.js
import React from "react"
const CoupangAd = ({ src, width = "100%", height = "100" }) => {
return (
<div style={{ margin: "20px 0", textAlign: "center" }}>
<iframe
src={src}
width={width}
height={height}
frameBorder="0"
scrolling="no"
referrerPolicy="unsafe-url"
title="쿠팡 파트너스"
style={{ maxWidth: "100%" }}
/>
<p style={{ fontSize: "11px", color: "#888", marginTop: "4px" }}>
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를
제공받습니다.
</p>
</div>
)
}
export default CoupangAd쿠팡 파트너스 사이트에서 생성한 다이나믹 배너의 src 값을 복사해서 사용합니다.
텍스트 링크 방식
배너 대신 본문에 자연스럽게 상품 링크를 넣는 방법도 있습니다. 리뷰 글이나 추천 글에 적합합니다.
개발에 사용 중인 키보드가 궁금하시다면, [제가 사용하는 키보드](쿠팡_파트너스_링크)를 참고해보세요.광고 위치 전략
| 위치 | 효과 | 주의사항 |
|---|---|---|
| 포스팅 상단 (제목 아래) | 노출률 높음 | 사용자 이탈 위험 |
| 포스팅 중간 | 자연스러운 노출 | 내용 흐름을 깨지 않도록 배치 |
| 포스팅 하단 (본문 끝) | 글을 다 읽은 독자에게 노출 | 가장 무난한 위치 |
| 사이드바 | 지속적 노출 | 모바일에서는 안 보일 수 있음 |
저는 포스팅 하단에 하나, 긴 글의 경우 중간에 하나 정도 배치하는 것을 추천합니다. 솔직히 광고를 너무 많이 넣으면 독자가 떠납니다.
댓글 시스템 비교
GitHub Pages는 서버가 없는 정적 사이트이기 때문에, 자체적으로 댓글 기능을 구현할 수 없습니다. 외부 서비스를 활용해야 합니다.
| 서비스 | 기반 | 로그인 방식 | 비용 | 장점 | 단점 |
|---|---|---|---|---|---|
| Disqus | 자체 플랫폼 | 소셜 로그인 | 무료 (광고 포함) | 설정 간편 | 광고 삽입, 무거움 |
| Utterances | GitHub Issues | GitHub 로그인 | 무료 | 가볍고 깔끔 | GitHub 계정 필요 |
| Giscus | GitHub Discussions | GitHub 로그인 | 무료 | 스레드 지원, 리액션 | GitHub 계정 필요 |
개발 블로그라면 Utterances 또는 Giscus를 추천합니다. 독자 대부분이 개발자이고 GitHub 계정을 가지고 있을 테니까요. 이번 글에서는 설정이 간단한 Utterances를 기준으로 설명하겠습니다.
Utterances 설정하기
Utterances는 GitHub Issues를 댓글 저장소로 활용하는 오픈소스 위젯입니다. 누군가 댓글을 달면, 해당 포스팅에 대응하는 GitHub Issue가 자동으로 생성됩니다.
1단계: utterances 앱 설치
- utterances 앱 페이지에 접속합니다
- Install 버튼을 클릭합니다
- 블로그 레포지토리(예:
javapark/javapark.github.io)를 선택합니다 - Install 을 확인합니다
2단계: Utterances 컴포넌트 만들기
// src/components/Utterances.js
import React, { useEffect, useRef } from "react"
const Utterances = ({ repo, theme = "github-light" }) => {
const containerRef = useRef(null)
useEffect(() => {
if (!containerRef.current) return
const script = document.createElement("script")
script.src = "https://utteranc.es/client.js"
script.async = true
script.setAttribute("repo", repo)
script.setAttribute("issue-term", "pathname")
script.setAttribute("theme", theme)
script.setAttribute("crossorigin", "anonymous")
// 기존 스크립트가 있으면 제거
const existingScript = containerRef.current.querySelector("script")
if (existingScript) {
existingScript.remove()
}
containerRef.current.appendChild(script)
}, [repo, theme])
return <div ref={containerRef} />
}
export default Utterances3단계: 포스팅 템플릿에 삽입
// src/templates/blog-post.js (또는 해당 템플릿 파일)
import Utterances from "../components/Utterances"
// 본문 아래에 추가
<Utterances
repo="javapark/javapark.github.io"
theme="github-light"
/>Utterances 설정 옵션
| 옵션 | 값 | 설명 |
|---|---|---|
repo |
사용자명/레포명 |
댓글이 저장될 레포지토리 |
issue-term |
pathname |
Issue 매핑 기준 (URL 경로 기준) |
issue-term |
title |
Issue 매핑 기준 (포스팅 제목 기준) |
theme |
github-light |
라이트 테마 |
theme |
github-dark |
다크 테마 |
theme |
preferred-color-scheme |
OS 설정에 따라 자동 전환 |
issue-term은 pathname을 추천합니다. URL이 바뀌지 않는 한 댓글이 유지되기 때문입니다.
다크모드 대응 댓글 시스템
gatsby-starter-hoodie 테마는 다크모드를 지원합니다. 블로그가 다크모드로 전환되면 댓글 위젯도 함께 변해야 자연스럽습니다.
테마 상태에 따라 Utterances 테마 변경
// src/components/Utterances.js (다크모드 대응 버전)
import React, { useEffect, useRef, useContext } from "react"
import { ThemeContext } from "../contexts/ThemeContext"
const Utterances = ({ repo }) => {
const containerRef = useRef(null)
const { isDarkMode } = useContext(ThemeContext)
const theme = isDarkMode ? "github-dark" : "github-light"
useEffect(() => {
if (!containerRef.current) return
// 기존 iframe 제거
const existingIframe = containerRef.current.querySelector(
".utterances"
)
if (existingIframe) {
existingIframe.remove()
}
const script = document.createElement("script")
script.src = "https://utteranc.es/client.js"
script.async = true
script.setAttribute("repo", repo)
script.setAttribute("issue-term", "pathname")
script.setAttribute("theme", theme)
script.setAttribute("crossorigin", "anonymous")
containerRef.current.appendChild(script)
}, [repo, theme])
return <div ref={containerRef} />
}
export default Utterances메시지 방식으로 테마 변경 (iframe 재생성 없이)
위 방법은 테마가 변경될 때마다 iframe을 다시 만들기 때문에 깜빡임이 발생합니다. postMessage를 활용하면 더 부드럽게 전환할 수 있습니다.
useEffect(() => {
const iframe = document.querySelector(".utterances-frame")
if (iframe) {
iframe.contentWindow.postMessage(
{ type: "set-theme", theme },
"https://utteranc.es"
)
}
}, [theme])이 코드를 기존 컴포넌트의 useEffect와 별도로 추가하면, 다크모드 전환 시 댓글 위젯이 부드럽게 테마를 변경합니다.
광고 배치 팁 — 사용자 경험과 수익의 균형
솔직히 말하면, 광고는 많이 넣을수록 수익이 올라갈 것 같지만 현실은 반대인 경우가 많습니다.
광고 배치 원칙
- 본문 내용을 방해하지 않기 — 독자가 글을 읽다가 광고에 가로막히면 이탈합니다
- 한 페이지에 3개 이하 — AdSense 정책상 제한은 없지만, 3개를 넘기면 사용자 경험이 급격히 나빠집니다
- 모바일 대응 필수 — 모바일에서 화면을 가득 채우는 광고는 최악입니다
- 관련성 있는 광고 — 쿠팡 파트너스 링크는 포스팅 주제와 관련된 상품으로 설정합니다
추천 배치 패턴
[포스팅 제목]
[본문 시작]
...
(본문의 40~50% 지점)
--- 쿠팡 파트너스 배너 ---
...
[본문 끝]
--- AdSense 광고 ---
--- 댓글 시스템 ---이 패턴이면 독자가 글을 읽는 흐름을 크게 방해하지 않으면서도 광고 노출을 확보할 수 있습니다.
시리즈 마무리 — GitHub 블로그 A to Z 정리
"GitHub 블로그 A to Z" 시리즈 6편을 통해 블로그의 생성부터 수익화까지 전 과정을 다뤘습니다. 지금까지의 여정을 정리해보겠습니다.
| 편 | 주제 | 핵심 내용 |
|---|---|---|
| 1편 | 시작하기 | Gatsby + gatsby-starter-hoodie로 블로그 생성 |
| 2편 | 스킨 커스터마이징 | 테마 색상, 폰트, 레이아웃 변경 |
| 3편 | 마크다운과 카테고리 | 포스팅 작성법, 시리즈/태그 관리 |
| 4편 | SEO 최적화 | 메타태그, sitemap, 구조화 데이터, Search Console |
| 5편 | 자동 배포 | GitHub Actions CI/CD 파이프라인 |
| 6편 | 광고와 댓글 | AdSense, 쿠팡 파트너스, Utterances |
블로그 운영을 시작하시는 분들께
블로그는 기술적 완성도보다 꾸준한 글쓰기가 훨씬 중요합니다. 완벽한 디자인과 모든 기능이 갖춰져야 시작할 수 있는 게 아닙니다. 글 하나라도 먼저 쓰고, 나머지는 천천히 개선해 나가시면 됩니다.
직접 조사하고 경험한 내용을 바탕으로 이 시리즈를 작성했는데, 여러분의 블로그 시작에 조금이라도 도움이 되었으면 좋겠습니다.
자주 묻는 질문 (FAQ)
Q. AdSense 승인이 거절되면 어떻게 하나요?
거절 사유를 메일로 받게 됩니다. 가장 흔한 거절 사유는 "콘텐츠 불충분"입니다. 양질의 포스팅을 5~10개 더 작성한 뒤 재신청하면 됩니다. 재신청 횟수에는 제한이 없으니, 콘텐츠를 보강하면서 꾸준히 신청해보세요. 커스텀 도메인을 사용하는 것도 승인률을 높이는 데 도움이 됩니다.
Q. Utterances 대신 Giscus를 사용하는 것이 더 좋나요?
둘 다 좋은 선택입니다. Giscus는 GitHub Discussions 기반이라 댓글에 대한 답글(스레드)과 리액션을 지원하는 장점이 있습니다. 설정 방법도 Utterances와 거의 동일합니다. 만약 댓글 간 대화가 활발할 것 같다면 Giscus를, 단순 댓글이면 Utterances를 추천합니다.
Q. 쿠팡 파트너스 수익은 어느 정도 나오나요?
솔직히 일일 방문자가 100명 이하일 때는 월 수익이 커피 한 잔 값도 안 됩니다. 블로그 트래픽이 핵심이기 때문에, SEO 최적화(4편 참고)와 꾸준한 포스팅으로 방문자를 먼저 늘리는 데 집중하시는 게 좋습니다. 트래픽이 올라오면 자연스럽게 수익도 따라옵니다.
여러분은 블로그 수익화를 어떻게 하고 계신가요? 또는 어떤 댓글 시스템을 사용하고 계신가요? 댓글로 알려주세요.
"GitHub 블로그 A to Z" 시리즈를 끝까지 읽어주셔서 감사합니다. 앞으로도 블로그 운영에 도움이 되는 글을 꾸준히 올리겠습니다.