Skip to content

easygap/music_similarity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

166 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

SoundMatch ๋กœ๊ณ 

SoundMatch

์Œ์•…์„ ์˜ฌ๋ฆฌ๋ฉด ๊ฐ€์žฅ ๋‹ฎ์€ ๊ณก์„ ์ฐพ์•„์ฃผ๊ณ , "์™œ ๋‹ฎ์•˜๋Š”์ง€"๊นŒ์ง€ ์„ค๋ช…ํ•ด์ฃผ๋Š” ์˜ค๋””์˜ค ์œ ์‚ฌ๋„ ๋ถ„์„ ์„œ๋น„์Šค

Python FastAPI License

BI ๊ฐ€์ด๋“œ

๋ฉ”์ธ ํ™”๋ฉด


์‹œ์ž‘์€ ์กธ์—…์ž‘ํ’ˆ์ด์—ˆ๋‹ค

ํŒ€์œผ๋กœ ๋งŒ๋“ค์—ˆ๋˜ easygap/capstone_music ๋ฅผ ํ˜ผ์ž ๋‹ค์‹œ ๋ถ™์žก์•˜๋‹ค. ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ ํ•œ ์žฅ์—์„œ๋งŒ ๋Œ๋˜ ๋ถ„์„๊ธฐ๋ฅผ, ๋ˆ„๊ตฌ๋‚˜ ๋ธŒ๋ผ์šฐ์ €๋กœ ์—ด์–ด์„œ ์จ๋ณผ ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋กœ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค.

์ง€๊ธˆ์€ ์Œ์› ํŒŒ์ผ ํ•˜๋‚˜๋งŒ ์˜ฌ๋ฆฌ๋ฉด ๋๋‚œ๋‹ค. librosa ๋กœ ์Œ์ƒ‰ยทํ…œํฌยท๋ฆฌ๋“ฌยทMFCC ๋“ฑ 58๊ฐ€์ง€ ํŠน์„ฑ์„ ๋ฝ‘๊ณ , ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด๋‘” 781๊ณก ์นดํƒˆ๋กœ๊ทธ์™€ ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„๋กœ ๋น„๊ตํ•ด์„œ โ€” ๊ฐ€์žฅ ๋‹ฎ์€ ๊ณก๊ณผ ๊ทธ ์ด์œ ๋ฅผ ๋Œ๋ ค์ค€๋‹ค. ์›์ž‘์˜ ๋ถ„์„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ๊ทธ ์œ„์— FastAPI ์„œ๋ฒ„ ยท SPA ํ”„๋ก ํŠธ ยท Docker ยท CI ๋ฅผ ์ƒˆ๋กœ ์–น์—ˆ๋‹ค.

๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ: ์—…๋กœ๋“œํ•œ ์Œ์›์€ ๋ถ„์„์ด ๋๋‚˜๋Š” ์ฆ‰์‹œ ์ง€์šด๋‹ค. ์–ด๋””์—๋„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ํ•™์Šต์— ์“ฐ์ง€ ์•Š๋Š”๋‹ค.


๊ทธ๋ƒฅ "๋‹ฎ์•˜์–ด์š”"๋กœ ๋๋‚ด์ง€ ์•Š๋Š”๋‹ค

๋ถ„์„ ๊ฒฐ๊ณผ ํ™”๋ฉด

๊ฐ€์žฅ ๊ณต๋“ค์ธ ๋ถ€๋ถ„์ด๋‹ค. ์ˆœ์œ„๋งŒ ํˆญ ๋˜์ง€๋Š” ๋Œ€์‹ , ์—…๋กœ๋“œํ•œ ๊ณก๊ณผ 1์œ„ ๋งค์นญ์˜ ์˜ค๋””์˜ค ์ง€๋ฌธ์„ ๋ ˆ์ด๋” ์ฐจํŠธ๋กœ ๊ฒน์ณ ๋ณด์—ฌ์ฃผ๊ณ  โ€” "ํ…œํฌยท๋ฆฌ๋“ฌ์ด 96% ๋‹ฎ์•˜๋‹ค"๋Š” ์‹์œผ๋กœ ์–ด๋””๊ฐ€ ์™œ ๋‹ฎ์•˜๋Š”์ง€๋ฅผ ํ•œ๊ตญ์–ด ๋ฌธ์žฅ์œผ๋กœ ํ’€์–ด์ค€๋‹ค.

์ค€๋น„๋œ ์Œ์›์ด ์—†์–ด๋„ ๊ดœ์ฐฎ๋‹ค. ๋ฉ”์ธ ํ™”๋ฉด์˜ ์ƒ˜ํ”Œ๋กœ ๋ถ„์„ํ•ด๋ณด๊ธฐ ํ•œ ๋ฒˆ์ด๋ฉด ๊ฒฐ๊ณผ ํ™”๋ฉด์„ ๊ทธ๋Œ€๋กœ ๋‘˜๋Ÿฌ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


๋‘˜๋Ÿฌ๋ณด๊ณ , ๋น„๊ตํ•˜๊ณ 

์นดํƒˆ๋กœ๊ทธ โ€” ๊ฒ€์ƒ‰ํ•˜๊ณ  ํ•„ํ„ฐ ๊ฑธ์–ด ๊ณก์„ ํ›‘์–ด๋ณด๋‹ค๊ฐ€, ๋งˆ์Œ์— ๋“œ๋Š” ๊ณก์„ ๋ˆ„๋ฅด๋ฉด ๊ทธ ๊ณก๊ณผ ๋‹ฎ์€ 5๊ณก์„ ๋ฐ”๋กœ ๋„์›Œ์ค€๋‹ค.

์นดํƒˆ๋กœ๊ทธ ํŽ˜์ด์ง€

๋น„๊ต โ€” ์ตœ๊ทผ ๋ถ„์„ํ•œ ๋‘ ๊ณก์„ ๋‚˜๋ž€ํžˆ ๋†“๊ณ  ๋ฉ”ํŠธ๋ฆญ์„ ๋งž๋Œ€๋ณธ๋‹ค. ์ข‹์•„์ง„ ๊ฐ’์€ ์ดˆ๋ก, ๋‚˜๋น ์ง„ ๊ฐ’์€ ๋นจ๊ฐ•.

๋น„๊ต ํŽ˜์ด์ง€

๋‹คํฌยท๋ผ์ดํŠธ ํ…Œ๋งˆ, ๋ชจ๋ฐ”์ผ, ํ•œ๊ตญ์–ด/์˜์–ด, PWA(ํ™ˆ ํ™”๋ฉด ์ถ”๊ฐ€ยท์˜คํ”„๋ผ์ธ)๊นŒ์ง€ โ€” ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ ์—ด์–ด๋„ ํํŠธ๋Ÿฌ์ง€์ง€ ์•Š๊ฒŒ ๋‹ค๋“ฌ์—ˆ๋‹ค.

๋ผ์ดํŠธ ๋ชจ๋“œ ๋ชจ๋ฐ”์ผ ํ™”๋ฉด

์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋‚˜

1. ํŠน์„ฑ ์ถ”์ถœ

2. ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ

3. ์ด์œ  ์„ค๋ช…

librosa ๋กœ RMSยทBPMยท์ŠคํŽ™ํŠธ๋Ÿด ์„ผํŠธ๋กœ์ด๋“œยทํฌ๋กœ๋งˆยท20-MFCC ๋“ฑ 58๊ฐ€์ง€ ํŠน์„ฑ์„ ๋ฝ‘๋Š”๋‹ค.

StandardScaler ๋กœ ์ •๊ทœํ™”ํ•œ ๋’ค cosine_similarity ๋กœ ์ „๊ณก๊ณผ ๋น„๊ต, ๊ฐ€์žฅ ๋‹ฎ์€ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

ํŠน์„ฑ๋ณ„ ๊ฑฐ๋ฆฌ๋ฅผ ์Œ์•…์  ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด "์™œ ๋‹ฎ์•˜๋Š”์ง€" ๋ฅผ ์‚ฌ๋žŒ์ด ์ฝ๋Š” ๋ฌธ์žฅ์œผ๋กœ ํ’€์–ด์ค€๋‹ค.


๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•˜๊ธฐ

python -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install -r requirements-dev.txt

uvicorn backend.main:app --reload   # โ†’ http://localhost:8000

Docker ๊ฐ€ ํŽธํ•˜๋ฉด docker compose up --build ํ•œ ์ค„์ด๋ฉด ๋œ๋‹ค. ๋ฌด๊ฑฐ์šด ์˜ค๋””์˜ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด ํ™”๋ฉด๋งŒ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด python preview_server.py 8765 โ€” ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋กœ ์ „ ํŽ˜์ด์ง€๊ฐ€ ๊ทธ๋Œ€๋กœ ๋œฌ๋‹ค.


์กฐ๊ธˆ ๋” ๋“ค์–ด๊ฐ€๋ฉด

  • CLI โ€” ์„œ๋ฒ„ ์—†์ด ํŒŒ์ผยทํด๋” ๋‹จ์œ„ ๋ถ„์„, ๋‘ ๊ณก ๋น„๊ต, ๋ฐฐํฌ ํ—ฌ์Šค์ฒดํฌ๊นŒ์ง€ (python -m backend.cli --help)
  • API โ€” ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ๋Š” /docs ์˜ Swagger ๋ฌธ์„œ์—์„œ ๋ฐ”๋กœ ๋ˆŒ๋Ÿฌ๋ณผ ์ˆ˜ ์žˆ๋‹ค
  • ์„ค์ • โ€” rate limit ยท CORS ยท ์บ์‹œ ยท ํ”„๋ก์‹œ ์‹ ๋ขฐ ๋ฒ”์œ„ ๋“ฑ์€ MUSIC_* ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์กฐ์ •
  • ์นดํƒˆ๋กœ๊ทธ ๊ต์ฒด โ€” scripts/rebuild_dataset.py ๋กœ ๋‚ด ์Œ์› ํด๋”๋ฅผ ํ†ต์งธ๋กœ ๋‹ค์‹œ ์นดํƒˆ๋กœ๊ทธํ™”

๊ธฐ์ˆ  ์Šคํƒ ย ยทย  Python ยท FastAPI ยท librosa ยท scikit-learn ยท numpy ์œ„์—, ํ”„๋ ˆ์ž„์›Œํฌ ์—†์ด ์ง  Vanilla JS SPA + PWA. ๋ฐฐํฌ๋Š” Docker, ๊ฒ€์ฆ์€ GitHub Actions(3๊ฐœ ํŒŒ์ด์ฌ ๋ฒ„์ „ ๋งคํŠธ๋ฆญ์Šค).


์šด์˜ ๋ฉ”๋ชจ

๋ฐฐํฌ๋œ ์„œ๋ฒ„๊ฐ€ ๊ธฐ๋Œ€ํ•œ ๋ฒ„์ „์ธ์ง€ ํ™•์ธํ•  ๋•Œ๋Š” CLI ๋ฅผ ๋ฐ”๋กœ ์“ด๋‹ค.

python -m backend.cli version
# v1.8.22 ยท 2026-07-16 ยท <git-sha>

python -m backend.cli status --url https://your-soundmatch.example --ready

ํ•ต์‹ฌ ์„ค์ •๋งŒ ์ถ”๋ฆฌ๋ฉด ์•„๋ž˜ ์ •๋„๋‹ค. ์ „์ฒด ๊ฐ’์€ backend/main.py ์˜ MUSIC_* ๊ธฐ๋ณธ๊ฐ’์„ ๋”ฐ๋ฅธ๋‹ค.

์ด๋ฆ„ ๊ธฐ๋ณธ ์„ค๋ช…
MUSIC_ENV development production ์ด๋ฉด HSTS ์™€ ์—„๊ฒฉํ•œ CORS ์„ค์ •์„ ์‚ฌ์šฉํ•œ๋‹ค.
MUSIC_DATASET_PATH data/dataset.csv ๋น„๊ต์— ์‚ฌ์šฉํ•  ์นดํƒˆ๋กœ๊ทธ CSV ๊ฒฝ๋กœ.
MUSIC_MAX_UPLOAD_BYTES 26214400 ์—…๋กœ๋“œ ํŒŒ์ผ ํฌ๊ธฐ ์ œํ•œ. ๊ธฐ๋ณธ์€ 25MB.
MUSIC_RATE_LIMIT_PER_MIN 12 IP ๊ธฐ์ค€ ๋ถ„๋‹น ๋ถ„์„ ์š”์ฒญ ํ•œ๋„.
MUSIC_GIT_COMMIT "" /api/version ๊ณผ /api/health ์— ๋…ธ์ถœํ•  ์งง์€ ๋ฐฐํฌ SHA.
WEB_CONCURRENCY 1 Docker / Render / Fly ๊ธฐ๋ณธ๊ฐ’์€ ๋‹จ์ผ worker. rate limit, ์บ์‹œ, metrics ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์ด๋ผ ์—ฌ๋Ÿฌ worker ๋ฅผ ์“ฐ๋ ค๋ฉด Redis ๊ฐ™์€ ์™ธ๋ถ€ ์ƒํƒœ ์ €์žฅ์†Œ๋ฅผ ๋จผ์ € ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค.

๋ฆด๋ฆฌ์ฆˆ

  1. CHANGELOG.md ์˜ [Unreleased] ๋‚ด์šฉ์„ ## [x.y.z] โ€” YYYY-MM-DD ์„น์…˜์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
  2. backend/__init__.py ์˜ __version__ ์„ ๊ฐ™์€ x.y.z ๋กœ ์˜ฌ๋ฆฐ๋‹ค.
  3. README ์˜ python -m backend.cli version ์ถœ๋ ฅ ์˜ˆ์‹œ์™€ OpenAPI ์Šคํ‚ค๋งˆ ์˜ˆ์‹œ๋„ ๊ฐ™์€ ๋ฒ„์ „์œผ๋กœ ๋งž์ถ˜๋‹ค.
  4. main CI ๊ฐ€ ์ดˆ๋ก์ธ์ง€ ํ™•์ธํ•œ ๋’ค git tag vx.y.z && git push origin vx.y.z.

ํƒœ๊ทธ๊ฐ€ ํ‘ธ์‹œ๋˜๋ฉด GitHub Release ์›Œํฌํ”Œ๋กœ๊ฐ€ CHANGELOG ์„น์…˜์„ ๊ทธ๋Œ€๋กœ ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ํƒœ๊ทธ ๋ฒ„์ „, backend.__version__, CHANGELOG.md ์˜ ๋ฆด๋ฆฌ์ฆˆ ์„น์…˜์ด ํ•˜๋‚˜๋ผ๋„ ๋‹ค๋ฅด๋ฉด ๋ฆด๋ฆฌ์ฆˆ ์ƒ์„ฑ์„ ์ค‘๋‹จํ•œ๋‹ค.


์•Œ์•„๋‘˜ ๊ฒƒ

  • ๋ถ„์„์€ ๊ณก์˜ ์•ž 30์ดˆ๋งŒ ๋ณธ๋‹ค. ๊ฐ€์žฅ ํŠน์ง•์ ์ธ ํ›„๋ ด๊ตฌ๊ฐ€ ์•ˆ ์žกํž ์ˆ˜ ์žˆ๋‹ค.
  • ์นดํƒˆ๋กœ๊ทธ๋Š” 781๊ณก ๊ทœ๋ชจ. ๋” ์ปค์ง€๋ฉด ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„ ๋Œ€์‹  AnnoyยทFAISS ๊ฐ™์€ ANN ๊ตฌ์กฐ๊ฐ€ ๋งž๋‹ค.
  • rate limitยทmetrics ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์ด๋ผ, ์—ฌ๋Ÿฌ ์›Œ์ปค๋กœ ๋„์šฐ๋ฉด ๊ฐ’์ด ์›Œ์ปค๋ณ„๋กœ ๋‚˜๋‰œ๋‹ค.
  • ๊ฒฐ๊ณผ๋Š” ์ทจ๋ฏธยทํ•™์Šต์šฉ์ด๋‹ค. ์ €์ž‘๊ถŒ์ด๋‚˜ ๋ผ์ด์„ ์Šค ํŒ๋‹จ์˜ ๊ทผ๊ฑฐ๋Š” ๋  ์ˆ˜ ์—†๋‹ค.

๋ผ์ด์„ ์Šค

MIT. ์›์ž‘ ์บก์Šคํ†ค ๋ฐ์ดํ„ฐ์…‹๊ณผ ์ฝ”๋“œ๋Š” easygap/capstone_music ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

About

๐ŸŽง ์Œ์•…์„ ์—…๋กœ๋“œํ•˜๋ฉด sklearn ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„๋กœ ๊ฐ€์žฅ ๋‹ฎ์€ ๊ณก์„ ์ฐพ๊ณ , ๋‹ฎ์€ ์ด์œ ๊นŒ์ง€ ์„ค๋ช…ํ•˜๋Š” FastAPI ์›น ์„œ๋น„์Šค

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors