Artune 시스템 아키텍처

Artune 시스템 아키텍처 A architecture diagram generated by Archify. 백엔드 (NestJS · apps/backend) 프론트엔드 · React 19 + Vite (SPA) · Architecture component 프론트엔드 React 19 + Vite (SPA) EmotionService · 오케스트레이터 · 백엔드 (NestJS · apps/backend) EmotionService 오케스트레이터 OpenAIService · 감정·시드곡 분석 · 백엔드 (NestJS · apps/backend) OpenAIService 감정·시드곡 분석 MusicService · 추천 파이프라인 · 백엔드 (NestJS · apps/backend) MusicService 추천 파이프라인 DalleService · 디저트 이미지 생성 · 백엔드 (NestJS · apps/backend) DalleService 디저트 이미지 생성 LastfmService · 협업 필터링 확장 · 백엔드 (NestJS · apps/backend) LastfmService 협업 필터링 확장 In-Memory Cache · NestJS CacheModule · 백엔드 (NestJS · apps/backend) In-Memory Cache NestJS CacheModule ITunesService · 곡 검색·해석 · 백엔드 (NestJS · apps/backend) ITunesService 곡 검색·해석 OpenAI API · gpt-4.1-mini · Architecture component OpenAI API gpt-4.1-mini Last.fm API · track.getSimilar · Architecture component Last.fm API track.getSimilar iTunes Search API · kr → us → jp · Architecture component iTunes Search API kr → us → jp POST /analyze · SSE /analyze-stream analyzeEmotion(text) getRecommendations(seeds) × 2 병렬 generateDessertImage() POST /chat/completions getSimilarTracks(seed) 지역별 resolveTrack(candidate) GET track.getSimilar GET /search get/set · 6h 버킷 get/set · 6h 버킷 POST /images/generations Legend Frontend Backend Database External

요청 흐름

  • • POST /api/emotion/analyze (동기) 또는 SSE /analyze-stream (진행률 포함)
  • • EmotionService가 OpenAI 분석 → 음악 추천(immerse/soothe 병렬) → 디저트 이미지를 조합

추천 파이프라인

  • • OpenAI가 지역별(한국/팝/일본) 시드곡 반환
  • • Last.fm 협업 필터링으로 유사곡 확장 → iTunes로 재생 가능 트랙 해석
  • • 지역 쿼터(6:3:1)로 모드당 10곡 선정

캐시·안정성 / 이미지 생성

  • • NestJS CacheModule(in-memory)을 Last.fm·iTunes 응답 모두에 사용, 6시간 버킷
  • • iTunes rate limit 대응: 동시성 3 + 배치 딜레이 300ms
  • • DalleService가 OpenAI DALL-E-2로 감정·장르 기반 디저트 이미지를 생성 (같은 OpenAI 계정의 이미지 생성 엔드포인트 사용)