몇 초 만에 게시물을 올리는 AI 기반 분류 광고 스택
요약
AI를 활용하여 사진 업로드만으로 광고 게시물을 자동 생성하는 기술 스택을 소개합니다. Gemini 2.5 Flash와 OpenRouter를 이용한 비전 처리, 카테고리 자동 할당, 다국어 지원 및 최신 웹 기술을 결합한 효율적인 파이프라인을 다룹니다.
핵심 포인트
- Gemini 2.5 Flash를 활용한 빠른 이미지 분석 및 데이터 추출
- 중복 방지를 위한 휴면 카테고리 재활성화 및 사용자 정의 필드 생성
- React 19, tRPC, Drizzle ORM 기반의 타입 안전한 풀스택 구성
- 병렬 처리와 캐싱을 통한 AI 지연 시간(Latency) 최적화
몇 초 만에 게시물을 올리는 AI 기반 분류 광고 스택
사용자는 24ad.info에 사진을 업로드할 수 있습니다. AI가 매물 상세 정보 작성을 보조합니다.
수동 작업이 완료되기도 전에 광고가 라이브 상태가 됩니다. 이 스택이 작동하는 방식은 다음과 같습니다.
파이프라인 (The Pipeline)
1. 비전 처리 (Vision Processing) (OpenRouter + Gemini 2.5 Flash)
사진을 업로드하면 다음과 같이 작동합니다:
// 단순화된 이미지 분석 흐름
const analysis = await openRouter.chat.completions.create({
model: "google/gemini-2.5-flash",
...
주요 관찰 사항:
- 이미지를 빠르게 처리합니다.
- 혼합된 콘텐츠를 처리합니다.
- 가격 제안은 가용한 데이터를 기반으로 합니다.
2. 카테고리 할당 (Category Assignment)
시스템은 먼저 키워드 매칭을 시도합니다. 불확실한 경우, 분류 옵션에 쿼리를 보냅니다.
두 가지 영리한 기능:
- 휴면 카테고리 재활성화 (Dormant category reactivation) - 중복 카테고리를 생성하는 대신, 비활성 상태인 카테고리를 찾아 다시 활성화합니다.
- 사용자 정의 필드 생성 (Custom field generation) - 자동차(Cars)와 같은 카테고리의 경우, AI가 관련 필드를 제안합니다.
3. 다국어 출력 (Multilingual Output)
동일한 호출 흐름을 사용하여 번역이 생성됩니다.
응답은 i18n 키와 함께 locales/ 디렉토리에 저장됩니다.
이를 가능하게 하는 스택 (The Stack That Makes It Possible)
프론트엔드 (Frontend)
- React 19 + Vite 7 - 즉각적인 양식 업데이트를 위해 사용
- shadcn/ui - Tailwind가 적용된 사전 구축된 컴포넌트
- wouter v3 - 가벼운 라우팅 (React Router의 비대함을 방지)
핵심 UX 상세 사항:
- 파일 업로드 시 선택 과정 중에 분석이 시작됩니다.
- 가격/카테고리 제안이 편집 가능한 미리보기 형태로 나타납니다.
- 브라우저의 지리적 위치(Geolocation) 또는 IP를 통해 위치가 자동 입력됩니다.
백엔드 (Backend)
- tRPC v11 - 프론트엔드와 백엔드의 타입을 동기화합니다.
- Drizzle ORM - 타입 안전(Type-safe)한 MySQL 쿼리를 위해 사용
- Express 4 - 다음과 같은 트래픽 유형을 처리합니다:
- 사용자 요청 (API/SSR)
- Googlebot HTML 인젝션
- 상태 확인 (Health checks) (
/api/system-health)
인프라스트럭처 (Infrastructure)
- Caddy v2 - HSTS를 포함한 와일드카드 서브도메인 지원
- 4개의 인스턴스를 사용하는 PM2 클러스터 모드 (PM2 cluster mode) - 로드 밸런싱 적용
- MariaDB - 검색(제목, 위치, 가격)을 위해 강력하게 인덱싱됨
CREATE TABLE `posts` (
`id` bigint AUTO_INCREMENT PRIMARY KEY,
`title` varchar(191),
...
우리가 해결한 페인 포인트 (Pain Points)
1. AI 지연 시간 (AI Latency)
초기 버전은 모든 AI 단계를 순차적으로 기다렸습니다. 현재는 다음과 같습니다:
- 병렬 처리 (Parallel processing) - 모든 AI 요청을 동시에 실행
- 폴백 캐싱 (Fallback caching) - 필요한 경우 일반적인 항목에 템플릿 설명을 사용
2. 위치 처리 (Location Handling)
초기 사용자들은 예상치 못한 위치가 표시되는 현상을 겪었습니다. 다음과 같이 수정되었습니다:
- 서브도메인 잠금 (Subdomain locking) - 서브도메인을 기반으로 위치를 강제함
- 명확한 라벨 (Clear labels) - 대상 국가를 표시
3. 스팸 방지 (Spam Protection)
현재 방어 체계는 다음을 포함합니다:
- AI 콘텐츠 검사 (AI content check) - 의심스러운 패턴을 플래그(Flag) 처리
- IP/이메일 블랙리스트 (IP/email blacklist) - 국가별 서브도메인 간 공유됨
- Stripe 검증 (Stripe verification) - 프리미엄 광고는 검증된 결제를 요구함
관리자 툴킷 (The Admin Toolkit)
모더레이터(Moderators)는 일괄 처리 도구와 더불어 다음을 제공받습니다:
- AI 배너 로테이터 (AI banner rotator) - 이벤트별 그래픽 생성
- 상태 모니터 (Health monitor) - 폰트 렌더링 및 업로드 권한을 포함한 하위 시스템 점검
성능 (Performance)
광고 생성 시간의 중앙값(Median)이 낮습니다. 카테고리 처리가 정확합니다.
학습된 교훈 (Lessons Learned)
-
AI는 마법이 아니다 - 가격 제안은 추가적인 규칙이 있을 때 더 효과적입니다.
-
상태 감지 (Condition detection) - AI는 사진 속의 눈에 보이는 세부 사항을 포착합니다.
-
속도가 중요하다 - 전체 프로세스는 사용자의 주의 집중 시간 내에 완료되어야 합니다.
직접 체험해 보세요: 24ad.info.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기