Plys는 지인들과 함께 완성해 나가는 소셜 기반 AI 앨범 커버 & 플레이리스트 플랫폼입니다. SNS를 통해 나의 플레이리스트를 공유하면 타인이 내게 어울리는 곡을 코멘트와 함께 채워주고, 모인 곡들의 분위기(Mood), 질감(Texture) 등을 AI가 종합적으로 분석하여 세상에 하나뿐인 나만의 맞춤형 앨범 커버를 만들어 줍니다. 완성된 예쁜 결과물은 다시 SNS에 공유하며 자랑할 수 있습니다!
- 실 서비스 운영: 2026년 3월 17일 정식 배포 후 실제 사용자 대상 서비스 운영
- 유저 지표: 배포 후 약 2주간(3월 17일 ~ 3월 31일) 총 111명의 유저 달성 🎉
- 나만의 플리 링크 공유: 내 플레이리스트를 생성하고 인스타그램 스토리, 카카오톡 등 SNS를 통해 지인들에게 링크를 공유합니다.
- 타인의 곡 추천 & 추가: 링크를 타고 들어온 친구들이 YouTube API와 연동된 검색을 통해 내게 어울리는 곡을 직접 추가해 주며 플레이리스트를 완성해 나갑니다.
- 지인들이 채워준 곡들이 모이면, AI가 해당 곡들의 정보(위키, 태그)를 로컬 LLM(Qwen 2.5)으로 분석하여 전체적인 감성과 테마를 파악합니다.
- 분석된 무드를 바탕으로 프롬프트를 구성해, 플레이리스트의 분위기에 완벽하게 어울리는 고품질 맞춤형 앨범 커버 이미지를 즉석에서 생성해 줍니다.
- 친구들이 채워준 귀중한 곡 목록과 AI가 만들어준 예쁜 앨범 커버를 이미지 형태로 다시 SNS에 공유하여 지인들과 즐거운 경험을 나눌 수 있습니다.
- 지인들이 채워준 곡뿐만 아니라, 담겨 있는 곡들을 기준점(Seed Track)으로 삼아 분위기가 유사한 새로운 곡들을 AI가 알아서 탐색하고 추가로 제안해 줍니다.
- 마음에 드는 타인의 훌륭한 플레이리스트를 발견하면, 버튼 한 번 클릭으로 내 보관함에 복제하여 언제든 감상할 수 있습니다. (로그인 제공)
- 최고 관리자 전용 대시보드를 통해 서비스의 실시간 지표를 모니터링하고 유저 피드백을 관리합니다.
- Framework & Libraries: React 19, TypeScript, Vite
- State Management: Redux Toolkit
- Styling: Tailwind CSS v4
- Editor & UI: TipTap (Rich Text Editor), Lucide-react
- Framework: Spring Boot 3.4.3 (Java 21)
- Database / Cache: MySQL, Redis
- Security: Spring Security, OAuth2, JWT
- Communication & Messaging: Spring WebFlux, Apache Kafka
- Observability: Prometheus, Micrometer, Sentry
- Cloud & Storage: AWS S3
- Language & Framework: Python, FastAPI
- Model: Qwen 2.5 (3B/7B), text-embedding-3-small (OpenAI), gemini-2.5-flash-image, gemini-2.5-flash-lite
- Database: PostgreSQL
- Containerization: Docker & Docker Compose
- Web Server & Gateway: Nginx
- CI/CD: Jenkins
- Monitoring: Grafana, Loki, Promethus, MySQL Exporter, Sentry Cloud
- 메타데이터 수집: Last.fm 등 외부 API를 통해 곡 데이터(Wiki, Tags, Listeners 등) 확보
- 데이터 전처리: wiki,tags 전처리 후 LLM 입력용 payload 생성
- LLM 정규화: Qwen 2.5 모델과 gemini-2.5-flash-lite 모델을 통해 비정형 텍스트를 구조화된 파라미터(Mood, Texture, Theme 등)로 변환
- 해당 정규화 결과는 추천 뿐 아니라 커버 이미지 프롬프트 생성에도 활용
- 가중치 계산 규칙 엔진: 정규화된 데이터를 기반으로 Energy 및 Valence 수치 도출
- 벡터 DB 임베딩 및 탐색: 곡의 의미론적 벡터를 생성하여 저장 및 Seed 곡 기준 코사인 유사도 계산으로 유사곡 탐색
- 다양성 리랭킹 및 제공: 단조로움을 피하기 위한 필터링 후 최종 곡 제공
- 외부 API 쿼터 보호 & 응답 속도 향상: YouTube API의 검색/조회 결과를 Redis에 캐싱하여, 중복 호출을 방지하고 API 일일 토큰을 절약합니다.
- 서버 부하 방지: 단기간 내의 과도한 서비스 호출을 Redis 기반으로 제어하여 트래픽 과부하를 막고 안정적인 서버를 유지합니다.
🔗 상세 ERD 페이지: Plys 노션 ERD 페이지
- Node.js 20+
- Java 21+
- Docker & Docker Compose
- MySQL 8.x, Redis
-
Backend 실행 (Spring Boot)
cd plys-backend # application.yml 또는 .env 설정 후 ./gradlew bootRun
-
Frontend 실행 (React/Vite)
cd plys-frontend npm install npm run dev -
AI/Data Server 실행 (Python)
cd plys-ai python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt # 서버 및 모델 준비 후 uvicorn main:app --reload
plys-backend/infra 디렉토리에서 다음 순서대로 실행합니다. prod.yml이 먼저 실행되어야 네트워크 및 DB가 구성됩니다.
모든 서비스는 반드시 --env-file 옵션으로 환경변수 주입
# 1. 메인 시스템 배포 (Backend, Frontend, DBs, Monitoring)
docker compose -f docker-compose.prod.yml --env-file ./.env up -d
# 2. AI 추천 서버 배포
docker compose -f docker-compose.ai-recommendation.yml --env-file ../plys-ai/ply_ai_server/.env up -d
# 3. AI 코드 리뷰 서버 배포 (GitLab 연동용)
docker compose -f docker-compose.review.yml --env-file ../plys-ai/.env up -d
# 4. AI 이미지 서버 배포
docker compose -f docker-compose.ai-image.yml --env-file ../plys-ai/.env up -d
# 5. Kafka, DB, 모니터링 등 개별 서비스 배포 (필요시)
docker compose -f docker-compose.kafka.yml --env-file ./.env up -d
docker compose -f docker-compose.monitoring.yml --env-file ./.env up -d- Jenkins 등 CI/CD 파이프라인은 env 파일을 자동으로 관리/주입
- 직접 배포 시에는 반드시 --env-file 옵션 사용
| 이름 | 담당 역할 |
|---|---|
| 박정훈 | Back-end |
| 이지원 | Back-end |
| 석주연 | Front-end |
| 유동훈 | Infra |
| 변아영 | AI |
| 권혁준 | Data |








