Gemini 2.5 Pro로 구축한 AI 블로그 자동화 시스템
최신 Google Gemini 2.5 Pro 모델을 활용하여 완전 자동화된 블로그 포스팅 시스템을 구축했습니다. 이 글에서는 실제 구현된 시스템의 아키텍처, 주요 기능, 그리고 코드 예시를 공유합니다.
프로젝트 개요
이 프로젝트는 다음 세 가지 핵심 목표를 달성합니다:
- Google AdSense 정책 준수: 가치있는 콘텐츠만 자동 포스팅
- 품질 관리: 6가지 차원의 자동 품질 검증
- 최신 AI 활용: Gemini 2.5 Pro 모델 사용
시스템 아키텍처
8단계 자동화 파이프라인:
- 카테고리 선택 (7개 라운드-로빈)
- 키워드 선택 (중복 체크)
- 한글 콘텐츠 생성 (2500-3500자)
- 품질 검증 (6개 차원)
- 영문 번역
- 이미지 생성
- WordPress 발행
- Search Console 등록
Gemini 2.5 Pro 선정 이유
기존 문제:
# 이전 시도 (실패)
response = client.models.generate_content(
model="gemini-2.0-pro", # v1beta에서 지원 안 함
contents=[prompt]
)
# Error: 404 NOT_FOUND
해결책:
from google import genai
client = genai.Client(api_key=os.getenv('GEMINI_API_KEY'))
response = client.models.generate_content(
model="gemini-2.5-pro", # v1beta 완벽 지원
contents=[prompt]
)
result = response.text
선정 이유:
- v1beta API 완벽 지원
- 강력한 문맥 이해
- 정확한 한글 처리
- 빠른 응답 (60-120초)
- 고품질 구조화 콘텐츠
핵심 구현 코드
1. 콘텐츠 생성
def generate_detailed_post(category, keyword):
# Gemini 2.5 Pro content generation
from google import genai
client = genai.Client(api_key=os.getenv('GEMINI_API_KEY'))
prompt = "Write detailed post about " + keyword
response = client.models.generate_content(
model="gemini-2.5-pro",
contents=[prompt]
)
return response.text
2. 중복 키워드 회피
def is_keyword_duplicate(new_kw, recent_kws, threshold=0.75):
# Jaccard similarity for duplicate detection
def jaccard(str1, str2):
set1 = set(str1.lower().split())
set2 = set(str2.lower().split())
inter = len(set1 & set2)
union = len(set1 | set2)
return inter / union if union > 0 else 0
for kw in recent_kws:
if jaccard(new_kw, kw) >= threshold:
return True
return False
3. 품질 검증 (6개 차원)
def validate_content(content, keyword):
# Auto quality validation
issues = []
# 1. Character count (minimum 6000)
if len(content) < 6000:
issues.append("too_short")
# 2. Header count (minimum 3)
headers = content.count('') + content.count('')
if headers < 3:
issues.append("insufficient_headers")
# 3. Keyword frequency (2-12 times)
freq = content.lower().count(keyword.lower())
if freq < 2 or freq > 12:
issues.append("keyword_freq_out_of_range")
# 4. Duplicate paragraphs (<20%)
# 5. Value signal (4+ points)
# 6. AI section required
return len(issues) == 0
4. WordPress 자동 발행
def publish_to_wordpress(title, content, category_id):
# WordPress REST API publishing
wp_url = os.getenv('WP_URL')
auth = (os.getenv('WP_USER'), os.getenv('WP_APP_PW'))
post_data = {
"title": title,
"content": content,
"status": "publish",
"categories": [category_id]
}
response = requests.post(
wp_url + "/wp-json/wp/v2/posts",
json=post_data,
auth=auth
)
return response.status_code in [200, 201]
데이터 구조
참고 사이트 (23개 소스)
{
"sources": [
{
"category": "Technology",
"websites": [
{"name": "D2", "url": "https://d2.naver.com"},
{"name": "Kakao Tech", "url": "https://tech.kakao.com"}
]
},
{
"category": "AI",
"websites": [
{"name": "OpenAI", "url": "https://openai.com"},
{"name": "Anthropic", "url": "https://anthropic.com"}
]
}
]
}
품질 검증 설정
{
"duplicate_threshold": 0.75,
"min_chars": 6000,
"min_headers": 3,
"min_value_score": 4,
"require_ai_section": true
}
성능 지표
- 포스팅 소요 시간: 2.5-5분
- 평균 콘텐츠: 6500자
- 이미지 성공률: 95%+
- 품질 통과율: 92%+
배운 점
1. API 버전 관리 - 최신 모델 이름과 API 버전 호환성 확인 필수
2. 품질 검증 필수 - AdSense 정책 만족을 위해 자동 생성 콘텐츠도 검증 필수
3. 중복 회피 중요 - Jaccard 유사도로 최근 200개 키워드와 비교
다음 단계
- 자동 스케줄링 (매일 9:00, 15:00)
- Google Analytics 연동
- 트렌드 키워드 자동 수집
- 이미지 스타일 고도화
참고한 관점
이 프로젝트는 다음 기술 리소스를 참고했습니다:
- 기술: D2, Kakao Tech, NHN Cloud
- AI: OpenAI, Anthropic, Google DeepMind
- 클라우드: AWS, Google Cloud, Azure
AI 활용 팁:
- ChatGPT: 빠른 프로토타이핑
- Claude: 코드 리뷰
- Gemini: 실시간 정보 및 이미지
태그: AI, Gemini, 자동화, 블로그, Python, WordPress, AdSense
하지만 아직까지 구글 서치콘솔에 조회수와 애드센스입장에서는 가치있는 포스팅이 많지않은 상태입니다.
일단은 내가 필요해서 내가 진행한걸 차분히 기록하는걸로 해야겠어요
English version: Read this article in English