AI 기반 반려동물 찾기 서비스에 자동 데브로그 생성 기능 추가
최근 우리 팀에서 개발 중인 AI 기반 반려동물 찾기 서비스에 흥미로운 기능을 추가했습니다. 바로 Git diff와 개발자의 작업 의도를 바탕으로 개발 블로그 포스트를 자동 생성하는 기능입니다.
AI 기반 반려동물 찾기 서비스에 자동 데브로그 생성 기능 추가
최근 우리 팀에서 개발 중인 AI 기반 반려동물 찾기 서비스에 흥미로운 기능을 추가했습니다. 바로 Git diff와 개발자의 작업 의도를 바탕으로 개발 블로그 포스트를 자동 생성하는 기능입니다.
배경과 목적
개발 팀을 운영하다 보면 기술 블로그 작성이 항상 숙제로 남아있습니다. 매일 의미 있는 개발을 하고 있지만, 이를 글로 정리하고 공유하는 작업은 시간도 많이 걸리고 부담스럽습니다. 특히 우리처럼 사회적 문제 해결에 집중하는 프로젝트에서는 개발 속도와 블로그 포스팅 사이의 균형을 맞추기가 어려웠습니다.
그래서 AI의 힘을 빌려 이 과정을 자동화하기로 결정했습니다. 개발자가 작업 의도만 간단히 입력하면, 최근 커밋 히스토리와 코드 변경사항을 분석해 자동으로 기술 블로그 포스트를 생성하는 시스템을 만들었습니다.
구현 내용
1. Git 히스토리 분석 서비스
먼저 Git 저장소에서 최근 커밋들과 diff 정보를 추출하는 서비스를 구현했습니다:
export async function getRecentDiff(
repoPath: string,
commitCount = 5,
excludePatterns: string[] = DEFAULT_EXCLUDE_PATTERNS,
): Promise<DiffResult> {
const git = simpleGit(repoPath);
// 최근 N개 커밋 로그
const logResult = await git.log({ maxCount: commitCount });
const commitsSummary = logResult.all.map(c => ({
sha: c.hash.slice(0, 7),
message: c.message,
date: c.date,
}));
// diff 내용 추출 (민감한 파일 제외)
const excludeArgs = buildExcludeArgs(excludePatterns);
const diffContent = await git.raw([
'diff', baseRef, headRef, '--', ...excludeArgs
]);
return { commitsSummary, diffStats, diffContent };
}
2. AI 기반 블로그 생성
Claude AI를 활용해 Git diff와 개발자의 작업 의도를 조합하여 자연스러운 기술 블로그 포스트를 생성합니다:
export async function generateDevlogArticle(input: DevlogInput): Promise<DevlogOutput> {
const systemPrompt = `너는 시니어 개발자가 운영하는 기술 블로그의 작성자야.
git diff와 개발자의 작업 의도를 바탕으로 개발 블로그 포스트를 작성해.
규칙:
- 마크다운 형식으로 작성 (# 제목 포함)
- 독자: 개발자
- 구성: 배경/목적 → 구현 내용 → 핵심 코드 설명 → 마주친 문제와 해결 → 결론 및 다음 단계
- 핵심 코드는 \`\`\`언어 블록으로 감싸기`;
const userMessage = buildUserMessage(input.context, input.diffResult);
const markdown = await askClaude(systemPrompt, userMessage);
return {
title: extractTitle(markdown),
markdown,
html: await marked.parse(markdown),
excerpt: extractExcerpt(markdown)
};
}
3. Ghost CMS 자동 발행
생성된 블로그 포스트를 Ghost CMS에 자동으로 발행하는 기능도 추가했습니다:
export async function createGhostPost(post: GhostPostInput): Promise<GhostPostResult> {
const token = buildGhostJwt();
const response = await fetch(`${config.ghostApiUrl}/ghost/api/admin/posts/`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Ghost ${token}`,
},
body: JSON.stringify({ posts: [post] }),
});
const data = await response.json();
return data.posts[0];
}
마주친 문제와 해결
1. Diff 크기 제한
대용량 diff는 AI 토큰 제한에 걸릴 수 있어서 50KB로 제한하고 초과 시 자르도록 했습니다.
2. 민감한 파일 제외
.env, *.key 같은 민감한 파일들은 자동으로 diff에서 제외하도록 패턴 필터링을 구현했습니다.
3. Ghost JWT 인증
Ghost Admin API 사용을 위해 JWT 토큰 생성 로직을 구현해야 했는데, 키 ID와 시크릿을 올바르게 처리하는 부분에서 시행착오가 있었습니다.
결론 및 다음 단계
이제 관리자 페이지에서 간단히 작업 내용을 입력하면 자동으로 기술 블로그가 생성됩니다. 미리보기 기능으로 내용을 확인한 후 Ghost CMS에 바로 발행할 수 있어 개발팀의 블로그 운영 부담이 크게 줄었습니다.
다음 단계로는 다국어 지원과 커스텀 템플릿 기능을 추가할 예정입니다. 또한 생성된 포스트의 품질을 높이기 위해 코드 하이라이팅과 이미지 자동 첨부 기능도 고려하고 있습니다.
기술적으로는 단순해 보이지만, 실제로 팀의 생산성과 지식 공유 문화에 미치는 영향은 상당합니다. AI를 활용한 개발 도구가 어떻게 실무에 도움이 될 수 있는지 보여주는 좋은 사례라고 생각합니다.