Mapin
개인 프로젝트

Mapin

2026.03 ~ 2026.04
백엔드 개발 (단독)
Spring BootJava 21PostgreSQLOpenAIYouTube APIVirtual ThreadsCompletableFuture

유튜브·뉴스 URL을 입력하면 GPT-4.1-mini가 콘텐츠 관점을 0.0(부정)~1.0(긍정)으로 점수화하고, YouTube·Naver를 병렬 검색해 반대 관점 콘텐츠를 추천하는 서비스입니다. 분석 파이프라인을 Java 21 Virtual Threads + CompletableFuture로 구성하고, 3단계 캐싱으로 동일 콘텐츠 재요청 시 GPT 호출을 0회로 줄였습니다.

역할별 수행 내용

AI 분석 파이프라인

  • GPT-4.1-mini로 제목·설명·썸네일(detail:LOW) 분석 → viewpoint_score(0.0~1.0)·키워드·반대관점 검색어 JSON 출력, 후보 전체를 배치로 1회 스코어링해 토큰 비용 절감
  • YouTube API + Naver 검색 API CompletableFuture 병렬 호출 — 반대관점 쿼리 2~3개를 동시 실행 후 MIN_OPPOSITION_DISTANCE(0.4) 기준으로 필터링, 부족 시 약한 반대관점으로 자동 채우는 fallback 로직 구현
  • AsyncConfig에서 Executors.newVirtualThreadPerTaskExecutor()로 pipelineExecutor 구성 — 스레드 풀 한도 없이 URL당 Virtual Thread 할당, 30초 글로벌 타임아웃으로 파이프라인 보호

3단계 캐싱

  • L1 opposition_json: 분석 결과를 JSON 직렬화해 DB 저장 — 재요청 시 GPT·검색 단계 전부 스킵
  • L2 is_analyzed 플래그: 소스 콘텐츠 분석 이력 재활용 — GPT 분석 호출만 스킵, 검색은 수행
  • L3 content_keywords 풀: 키워드 기반 후보 DB 조회 → 임베딩 활성화 시 평균 벡터로 50개 풀 조회 후 메모리에서 viewpointScore 필터링 (2-stage retrieval)

추천 시스템

  • 최근 분석 이력 20개에서 키워드 풀 구성 → 후보 최대 200개 수집, viewpointScore 차이 ≥0.4 조건으로 반대관점 콘텐츠 추천
  • 키워드 매칭 횟수 + 스코어 거리 복합 정렬, 메모리 스트림 처리로 N+1 쿼리 없이 추천 목록 생성

주요 성과

  • 3단계 캐싱으로 재분석 요청 시 GPT API 호출 0회 — L1 캐시 히트 시 파이프라인 전 단계 스킵
  • 배치 스코어링으로 후보 N개를 GPT 1회 호출로 처리 — 개별 호출 대비 토큰 비용 절감
  • App Store + 웹 대시보드 동시 배포 (iOS 앱 심사 통과)

관련 자료