← Back to list

MuniVerse

원하는 곡을 찾아 우주를 떠도는 여정

SeoDDuu · 2026-01-27 14:13 · 2 claps · 8.3 min read
Open on Medium ↗
Wiki topics: 🔭 · Astronomy & Space

MuniVerse

원하는 곡을 찾아 우주를 떠도는 여정

MuniVerse란?

‘MuniVerse’는 ‘Music’ + ‘Universe’의 합성어로, 음악으로 가득한 우주를 직접 탐색하고 기여할 수 있는 웹 기반의 서비스입니다. 사용자는 자신이 원하는 음악을 다양한 방식으로 탐색하며, 만약 찾는 음악이 없다면 직접 제작하여 우주에 기여할 수 있습니다. ‘MuniVerse’는 다양한 시각화 기술과 사용자 입력 최적화 시스템이 결합된 AI 음악 생성 기술을 통해 누구나 자신이 원하는 음악을 탐색하고 창작하는 경험을 제공합니다.

서비스흐름

서비스를 사용자가 사용할 흐름을 예측하여 구상해봤습니다. 기본적으로 사용자가 원하는 곡이나 그와 비슷한 곡을 찾는 흐름이며 만약 없다면 제작하는 과정을 포함했습니다.

  1. 사용자가 원하는 음악이나 아티스트를 검색합니다.

  1. 사용자가 원하는 음악을 재생 후 분석 데이터를 확인합니다.

  1. 음악 분석을 통해 다른 비슷한 곡을 재생합니다.

  1. 원하는 분위기의 태그를 통해 다양한 음악을 탐색합니다.

  1. 위와 같은 과정을 거쳐도 원하는 음악이 없다면 직접 생성합니다

기술적 과제

이와 같은 서비스 흐름을 구현하는 과정에서 몇가지 기술적 과제들을 마주하게 되었습니다. 첫번째로 DB에 음악을 저장하고 활용하는 과정이었습니다. 일반적인 음악 관련 API들은 곡명이나 아티스트와 같은 기초적인 정보만 제공하기에 분석과 검색으로 활용하기에 적합하지 않았습니다. 제공하는 아티스트 및 앨범 이미지 크기가 지나치게 커서 서비스 최적화에 어려움이 있었습니다. 또한, 검색 기능 구현 시 반복되는 DB 호출로 인해 응답 속도가 지연되어 사용자 경험을 해치는 문제가 있었습니다. 두번째는 음악 생성 과정에서의 사용자 경험입니다. 사용자는 보통 음악 생성을 위해 ‘행복’, ‘사랑’과 같은 추상적인 키워드를 입력할 뿐, 음악적인 디테일을 직접 입력하지 않습니다. 이로 인해 생성 AI에 전달되는 정보가 부족하여 결과물의 퀄리티가 아쉬웠습니다.

해결 방법

다음과 같은 기술을 사용해 문제를 해결했습니다.

1. 음악 태그화

  • Music2Emotion 라이브러리를 통한 오디오 분석

2. 검색 엔진 구축

  • AWS OpenSearch를 활용한 검색 정확도 향상

3. 이미지 리사이징

  • AWS Lambda를 활용한 이미지 최적화

4. 프롬프트 최적화

  • LLaMA와 LangChain을 이용한 프롬트 구조화 및 정제

음악 태그화: Music2Emotion

Music2Emotion

Music2Emotion

Music2Emotion는 음악의 오디오 신호를 분석하여 해당 곡의 전달하는 감정을 추론하는 오픈 소스 라이브러리입니다. 우리 서비스는 이 모델을 사용하여 사전에 수집한 3만여개의 음악 오디오를 분석하고 59개의 태그로 분류했습니다. 단순 분류를 넘어 감정 태그별 정량적 점수를 분석 데이터에 포함함으로써 사용자에게 설득력있는 데이터를 제공하자고 했습니다.

Music2Emotion이 제공하는 데이터는 다음과 같습니다. Valence(감정가): 감정의 긍부정 상태를 나타냅니다. 이 값이 높으면 긍정적이 상태, 낮은면 부정적인 상태입니다. Arousal(각성도): 감정의 강도를 나타냅니다. 이 값이 높으면 에너지가 높은 상태, 낮으면 에니저기 낮은 상태입니다. 예를 들어, 어떤 곡이 Valence = 0.8, Arousal = 0.7이라 가정하면 그 곡에서는 ‘Excited’ 태그 점수는 높게, ‘Relaxed’ 태그 점수는 낮게 측정됩니다. 이러한 방식은 각 음악을 분류하고, 사용자에게 맞춤형 데이터를 제공하는데 큰 도움이 되었습니다.

검색 엔진 구현: AWS OpenSearch

초기 검색은 iTunes API를 통해 검색 결과를 불러오는 형식이었습니다. 하지만 이는 기술적으로 난이도가 낮고, 검색결과가 의도와 다르게 나왔습니다. 이를 개선하기 위해 AWS OpenSearch를 활용한 검색 시스템을 구현했습니다. 사용한 OpenSearch의 기능은 다음과 같습니다.

1. 지능형 알고리즘

사용자의 검색 의도를 파악해 가장 관련성 높은 결과를 상단에 노출하기 위해 두 가지 전략을 사용했습니다.

  • 다층 매칭: 정확한 일치를 최우선으로 하되, 오타가 있어도 찾아내는 ‘Fuzzy 매칭’을 후순위로 적용해 검색 실패율을 최소화 했습니다.
  • 가중치 부스팅: 아티스트 검색 빈도가 높다는 점에 착안하여 가중치를 차등 부여 하였습니다.

2. 한국어 형태소 분석(Nori)

영문과 한글이 혼용되는 K-Pop 데이터의 특성에 맞춰, 공식 한국어 분석기인 ‘Nori’를 기반으로 분석기를 구축했습니다. ‘nori_tokenizer’를 통해 조사나 어미를 정교하게 제거하고 핵심 키워드(체언)만 추출함으로써, 문장형 검색에서도 정확한 결과를 반환하도록 구현했습니다.

3. 동의어 검색 시스템

사용자의 다양한 입력 패턴을 커버하기 위해 AWS패키지 기능을 활용한 동의어 사전을 구축했습니다.

  • 예를 들어, ‘방탄’검색 -> ‘BTS’ 노출/ ‘TXT’ 검색 -> ‘투마로우바이투게더’ 노출 별명이나 약칭으로 검색해도 원하는 결과를 즉시 찾을 수 있어서 사용자 경험을 향상시켰습니다.

4. 가사 전문 검색 기능

곡 제목이나 아티스트가 기억나지 않을 경우를 대비해 검색 범위를 확장했습니다.

  • 전체 가사 인덱싱: 메타데이터뿐만 아니라 가사 전체를 인덱싱하여, 가사 한 구절만으로도 원하는 음악을 찾을 수 있는 환경을 조성했습니다.

이미지 리사이징: AWS Lambda

AWS Lambda 사용 방식

AWS Lambda 사용 방식

AWS Lambda는 서버를 직접 관리할 필요 없이 코드 실행 트리거를 통해 동작하는 서버리스 컴퓨팅 서비스입니다. 우리 서비스는 동일한 이미지라도 사용처(썸네일, 상세페이지 등)에 따라 각기 다른 크기를 요구했기에, 이미지를 효율적으로 사용하고자 이 기술을 사용했습니다. API를 통해 이미지 데이터가 수집되면 Lambda를 호출하여 미리 정의된 구격으로 리사이징을 수행합니다. 리사이징된 데이터는 S3 버킷에 업로드하여 저장 공간을 절약하고 페이지 로딩 성능을 높였습니다. 이를 통해 LCP3.2s → 2.6s 약 19% 개선시켜 사용자에게 쾌적한 웹 환경을 제공할 수 있었습니다.

리사이징 전

리사이징 전

리사이징 후

리사이징 후

프롬트 최적화: Llama, LangChain

Llama, LangChain 사용 방식

Llama, LangChain 사용 방식

초기 음악 생성 기능 설계 시에 사용자 키워드 중심의 입력으로도 퀄리티 높은 음악이 생성될거라고 기대했습니다. 그러나 실제 결과물은 기대에 미치지 못했습니다. 이 문제를 해결하기 위해 사용자의 입력을 그대로 넘기는 것이 아닌 LLM으로 음악적으로 확장하고 정제하는 중간 단계를 도입했습니다. 오픈 소스 모델인 Llama를 도입하여 사용자가 입력한 짧은 단어에서 음악적 설계를 하도록 했습니다. Llama 모델과 웹 서버인 Django와의 연결을 위해 LangChain 프레임 워크를 도입했습니다. LangChain의 PromptTemplate 기능을 활용하여 사용자의 입력을 미리 정의된 음악 제작 가이드라인과 결합했습니다. 이를 통해 음악 생성 API에게 가장 잘 이해할 수 있는 최적의 프롬트를 전달해줄 수 있었습니다. 예를 들어, 사용자가 “바닷가”라고만 입력해도, 이를 “beach, mellow Folk, 100 BPM, acoustic guitar ukulele, soothing Korean lyrics and Korean male vocals” 와 같이 구체적인 음악적 요소들로 설계하여 전달합니다. 결과적으로 사용자의 의도를 반영한 기대에 미치는 음악 생성이 가능해졌습니다.

시스템 아키텍처

  • 프론트엔드는 Vercel을, 백엔드 메인 서버는 AWS EC2를 기반으로 배포하여 시스템 아키텍처를 설계하였습니다. 특히 비용 효율성을 위해 고성능 연산이 필요한 LLaMA 모델은 로컬 PC에 구축하고, Tailscale(Mesh VPN)을 통해 EC2와 보안 연결하여 단일 EC2 인스턴스만으로도 서비스가 가능하도록 최적화하였습니다.
  • 사용자의 요청은 Traefik 리버스 프록시를 거쳐 Django 기반의 API 서버로 라우팅됩니다. 일반적인 데이터 조회 및 검색 요청은 PostgreSQL OpenSearch를 활용하여 즉각적으로 처리되도록 구현하였습니다.
  • 생성형 AI 작업 시 로딩 지연을 방지하기 위해 RabbitMQ와 Celery를 이용한 비동기 큐 시스템을 도입하였습니다. Celery 워커는 LangChain을 통해 로컬의 LLaMA 및 Suno AI와 연동하여 작업을 수행하며, 결과물은 Amazon S3에 저장되고 Prometheus와 Grafana로 상태를 모니터링합니다.

Link

| GitHub: https://github.com/2025-TecheerBootcamp-team-i|

| WebSite: https://www.brokencarrot.my/


메타데이터
post_id
9b8a4786b3d5
slug
muniverse-9b8a4786b3d5
url
https://medium.com/@SeoDDuu/muniverse-9b8a4786b3d5
canonical_url
https://medium.com/@SeoDDuu/muniverse-9b8a4786b3d5
author_url
https://medium.com/@SeoDDuu
status
ok
fetched_at
2026-06-24 16:30:55