LangGraph 기반의 다중 AI 모델을 활용한 공방 마케팅 콘텐츠 생성 시스템
본 프로젝트는 사용자가 업로드한 도자기 그릇, 컵 등의 이미지를 멀티모달(Multimodal) AI로 정밀 분석하여, 공방 고유의 브랜드 감성(Warm, Minimal, Traditional)에 맞는 인스타그램용 이미지, 본문 캡션, 해시태그 칩셋을 원클릭으로 최종 완성하는 든든한 AI 마케팅 에이전트 시스템입니다.
- 로컬 공방의 세대교체 및 마케팅 한계: 수원 화성 공방거리의 활성화를 목표로 하는 로커톤 프로젝트의 일환으로, 전통 도자기 공방인 '향기도예'와 매칭되어 협업을 진행했습니다. 향기도예 사장님은 젊은 층을 공략하기 위한 인스타그램 등 SNS 마케팅의 필요성을 절감하고 계셨으나, 연령대로 인한 디지털 도구 활용의 미숙함으로 인해 실제 운영에 큰 어려움을 겪고 있었습니다.
- SNS 운영의 높은 진입장벽: 인스타그램 마케팅은 유입을 유도하는 해시태그 선정, 타깃층에 어필할 수 있는 감성적인 문구 작성, 그리고 피드 전체의 균일한 무드(톤앤매너) 유지가 필수적입니다. 하지만 1인 작가가 작품 제작과 마케팅 기획을 동시에 수행하기에는 리소스가 절대적으로 부족합니다.
- 기술적 불안정성 체계: 기존의 단순 AI 생성 도구들은 매번 호출할 때마다 답변의 무드가 일관되지 않아 공방 고유의 정체성을 해치기 쉽습니다. 또한, 무료 API를 연동할 경우 잦은 호출 제한으로 인해 시스템이 멈추는 백엔드 관점의 기술적 한계가 존재합니다.
- 도메인 특화 무드 고정: 향기도예가 가진 정갈하고 따뜻한 정체성을 시스템 내부 프리셋으로 고정하여, 누가 사용하더라도 항상 일정한 톤앤매너의 감성 피드를 출력합니다.
- 사용자 친화적 원클릭 인터페이스: SNS 사용이 서툰 사장님도 복잡한 프롬프트 입력 없이 사진 업로드와 클릭 한 번으로 이미지, 본문 카피, 해시태그 칩셋을 한 화면에서 얻을 수 있도록 구현합니다.
- 백엔드 무중단 안정성 확보: API 호출 제한이나 일시적인 서버 에러가 발생하더라도 백업 모델로 자동 우회 전환하는 시스템을 구축하여, 어떤 상황에서도 마케팅 텍스트 자산을 안전하게 제공하는 백엔드를 지향합니다.
- 젊은 소비층 유입 및 지역 상권 활성화: 타깃층이 선호하는 감성 문구와 트렌디한 해시태그를 통해 SNS 도달률을 높이고, 이를 바탕으로 수원 화성 공방거리와 향기도예로의 젊은 오프라인 고객 유입을 유도합니다.
- 전통 공방의 디지털 전환: 디지털 소외 계층인 고연령대 소상공인도 AI 기술의 혜택을 누릴 수 있도록 진입장벽을 낮추어, 공방 본연의 작품 제작 활동에만 집중할 수 있는 환경을 조성합니다.
- 리소스 최적화 및 운영 지속성: 콘텐츠 기획부터 해시태그 연구까지 걸리던 마케팅 시간을 대폭 단축하여, 1인 공방이 지치지 않고 장기적으로 SNS 채널을 운영할 수 있는 지속 가능성을 제공합니다.
# 저장소 클론
git clone [https://github.com/본인_깃허브_아이디/AI-Feed-generator.git](https://github.com/본인_깃허브_아이디/AI-Feed-generator.git)
cd AI-Feed-generator
# 가상환경 생성 및 활성화
python -m venv .venv
.\.venv\Scripts\Activate.ps1
# 의존성 패키지 설치
pip install -r requirements.txt
프로젝트 루트 디렉토리에 .env 파일을 생성하고 구글 제미나이 API 키를 입력합니다.
GEMINI_API_KEY=your_actual_gemini_api_key_here
가장 빠르게 LangGraph 상태 기반 파이프라인을 검증하기 위한 CLI 모드입니다. 윈도우 인코딩 크래시 방지 설정을 켜준 뒤 실행합니다.
$env:PYTHONUTF8=1
python main.py "input/도자기컵.jpeg" warm
- 참고: 이미지 생성(
Imagen 4.0) 모델이 무료 쿼터 제한으로 실패할 경우, 전체 크래시 대신 우아한 폴백(Failover) 로직이 작동하여 캡션과 해시태그 텍스트 자산을 끝까지 안전하게 뽑아냅니다.
FastAPI 백엔드와 실전 시각화 다크모드 웹 페이지를 연동하여 GUI 환경에서 테스트합니다.
python server.py
서버 구동 후 브라우저에서 http://localhost:8000으로 접속하여 드래그 앤 드롭으로 시연할 수 있습니다.
팀원 공유 및 외부 모바일 기기 테스트를 위해 터널을 개통합니다.
npx ngrok http 8000
# 터미널에 생성된 [https://xxxx.ngrok-free.dev](https://xxxx.ngrok-free.dev) 주소로 어디서나 접속 가능합니다.
[사용자 이미지 업로드] ────┐
│
[추가 공지/이벤트 텍스트] ─┴─> [FastAPI 데이터 통합]
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ LangGraph Workflow Agent Pipeline │
│ │
│ 1. analyze_image ──> 2. extract_mood ──> 3. generate_prompt │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ [gemini-2.0-flash] [스타일 프리셋 결합] [영문 이미지 프롬프트 생성] │
│ │
│ │
│ 6. generate_hashtags <── 5. generate_caption <── 4. generate_image │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ [인스타그램 해시태그] [사용자 텍스트 반영 [이미지 모델 다중화 │
│ 감성 본문 작성] 및 장애 대응] │
└─────────────────────────────────────────────────────────────────────────┘
본 시스템은 순차적 파이프라인의 한계를 극복하고, 각 단계의 데이터와 흐름을 유연하게 제어하기 위해 LangGraph 워크플로우 엔진을 핵심 아키텍처로 도입했습니다.
- 중앙 집중식 상태 관리: 이미지 분석, 스타일 프리셋 처리, 사용자 추가 텍스트 입력, 최종 캡션 생성까지의 모든 데이터가
State객체 내에 명확하게 정의되어 노드 간에 안전하게 전달됩니다. - 컴포넌트 독립성: 각 기능이 독립적인 노드로 격리되어 있어 특정 단계의 로직 수정이나 프롬프트 고도화가 전체 파이프라인에 영향을 주지 않도록 결합도를 낮췄습니다.
- 사용자 입력 조건부 반영: 사용자가 웹 UI를 통해 입력한 공지사항이나 이벤트 키워드가 존재하는지 여부를 분기 노드 없이 데이터 흐름 내에서 판단하여 캡션 생성 노드에 동적으로 결합합니다.
외부 API 호출 제한이나 네트워크 에러 상황에서도 안정적인 마케팅 결과물을 제공할 수 있도록 노드 내부와 라우팅 구조에 다중 예외 처리 체계를 구축했습니다.
- 텍스트 생성 노드 다중화: 호출 한도가 엄격한 모델 대신 일일 제한이 넉넉한 하위 모델을 주축으로 사용하도록 흐름을 제어합니다. 해당 모델의 한도가 초과되면 사전에 지정된 백업 모델 버킷으로 시스템이 중단 없이 자동 우회 전환합니다.
- 이미지 생성 노드 순차 전환: 이미지 생성 기능에 오류가 감지되면 정해진 대기 시간을 계산하여 자동으로 재시도하며, 차단 지속 시 차선책 모델로 순차적으로 요청을 이식합니다.
- 기능적 결함 수용: 모든 이미지 생성 수단이 완전히 차단되는 최악의 상황이 발생하더라도, 오류 로그만 기록하고 파이프라인을 그대로 유지합니다. 이를 통해 공방 운영에 가장 필수적인 인스타그램 본문 카피와 해시태그 텍스트 자산은 화면에 끝까지 정상 출력되도록 방어합니다.
- Backend: Python 3.11+, FastAPI, LangGraph, Pydantic,
google-genaiSDK - Frontend: Vanilla JS, Fetch API, Tailwind CSS (다크모드 기반 반응형 UI)
- DevOps / Infra: Git (Git Flow 브랜치 전략),
ngrokLocal Tunneling