팀 소개 — SoundBridge

💡 쉽게 말하면: 세 명이 모두 백엔드(FastAPI)와 프론트엔드(Next.js)를 함께 짠 풀스택 팀입니다. 아래는 각자 특히 힘을 쏟은 파트입니다.

신채연 — 팀장 · PM

프로젝트 전체 방향과 일정을 잡고, “국악을 처음 듣는 사람이 어디서 막히는가”를 기준으로 사용자 흐름을 설계했습니다. DISCOVER에서 만난 감성이 CREATE 필터로 그대로 이어지도록 프리셋 URL 브릿지를 기획했고, WaveSurfer.js 기반 파형 플레이어와 CUE 마커(A·B·C) UI, 한국어/영어 이중 언어 응답 정책을 담당했습니다.

주요 산출물

  • DISCOVER → CREATE 사용자 여정 설계 및 프리셋 파라미터 규격 확정
  • 파형 플레이어(Waveform · MiniWaveform · PlayerBar)와 CUE 마커 컴포넌트
  • 검색 제안 칩(SuggestionChips), 매칭 근거 박스(WhyBox), 프리셋 배너(PresetBanner)
  • 랜딩·DISCOVER·CREATE 3개 화면의 정보 구조와 톤앤매너

김충식 — 풀스택 개발 · 아키텍처

백엔드 헥사고날 구조를 설계하고 개발 명세서를 v4.0까지 끌어올렸습니다. Domain이 외부 프레임워크를 전혀 모르도록 경계를 세우고, Gemini → 임베딩 → pgvector로 이어지는 매칭 파이프라인을 포트/어댑터로 분리했습니다.

주요 산출물

  • 헥사고날 + 클린 아키텍처 + DDD 기반 프랙탈 디렉터리 구조 ({domain}_{character}_{layer})
  • v4.0 정규화 설계 — emotion_tags ARRAY 제거(1NF), loop_unit_beats 장단 FK 분리(3NF)
  • GeminiAdapter · TrackDiscoverPgRepository(joinedload 전략 내재화) 구현
  • Alembic 마이그레이션과 db_init 장단 시드, Composition Root(dependencies/) Provider 패턴

이은상 — 풀스택 개발 · 데이터/QA

국립국악원 공공 API에서 음원 메타데이터를 긁어와 스키마에 맞게 적재하는 수집 파이프라인을 맡았습니다. API가 XML로 내려주는 불완전한 필드를 어떻게 장단·감성·BPM·라이선스로 환원할지 규칙을 세우고, 그 규칙이 실제 데이터에서 무너지는 지점을 찾아 보정했습니다.

주요 산출물

  • 수집 스크립트 collect_gugak_500.py / Collect_tracks.py — 500건 CSV·DB 적재
  • rhythm·beat 필드에서 장단을 추정하는 규칙과 폴백(중모리) 설계
  • 장단 → 감성 태그 매핑 테이블, flctn_tempo BPM 파싱, KOGL 1/2 라이선스 판정
  • 재실행 안전성(중복 키 스킵) 확보 및 적재 결과 검증 스크립트(check_schema.py)

협업 방식

항목 방식
아키텍처 SSOT docs/soundbridge_backend_dev_spec_v4_0.md — Task 단위로 쪼갠 개발 명세서
코드 규칙 명세서 0장 “AI 작업 원칙” — 레이어 import 금지 목록을 문서에 고정
마일스톤 표기 모든 파일·Task에 [MVP] / [v1.1] / [v1.2] 주석 표시
프론트/백 계약 장단→루프 단위 매핑을 양쪽에 상수로 복제하고 값 일치를 규약으로 명시
진행 상황 공유 문서 사이트 상단 개발 세션 배너(_data/dev_session.yml)로 누가 작업 중인지 표시

SoundBridge — 당신의 음악 언어로 국악을 만나세요. 본 사이트는 개발 문서 자료입니다.

This site uses Just the Docs, a documentation theme for Jekyll.