페무리 (Femuri)
전국 페스티벌 통합 검색 플랫폼
웹에이전시 거인소프트가 제작한 한화로보틱스 홈페이지 프로젝트입니다.
"한화로보틱스"의 기업 브랜드 아이덴티티를 반영한 반응형 웹사이트로 제작되었으며
제품 정보 전달과 글로벌 기업 이미지를 강화하는 UI 구조로 설계되었습니다.
페무리 (Femuri)
전국 페스티벌 통합 검색 플랫폼
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS
- Prisma
- PostgreSQL
- React Query
-
Project페무리 (Femuri)
-
Period2026.05 (1주)
-
TypeFullstack / Festival Aggregation Platform
-
Role풀스택 개발 (Frontend + Backend + Data Pipeline)
- 프로젝트 유형
- Fullstack / 페스티벌 통합 검색 플랫폼
- Frontend
- Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS, TanStack React Query, Embla Carousel
- Backend
- Next.js API Routes, Prisma 7, PostgreSQL (Supabase)
- 데이터 수집
- KOPIS API + Web Scraping (Cheerio)
- 아티스트 프로필
- 나무위키 HTML 파싱 + Wikidata SPARQL + Wikipedia REST API
- 핵심 성과
- 멀티소스 통합, 500+ 페스티벌 수집, 중복 제거 파이프라인, PWA 지원
Project
Overview
전국의 페스티벌 정보를 한 곳에서 검색하고 발견할 수 있는 통합 플랫폼입니다.
KOPIS(공연예술통합전산망) API, 커뮤니티 사이트 스크래핑, 티켓 사이트 연동 등 다수의 외부 데이터 소스를 통합하여 페스티벌 정보를 자동 수집하고, 상태별/월별/지역별 필터링과 아티스트 검색을 제공합니다.
Key
Features
• Multi-Source Scraping Pipeline: KOPIS API + FestivalLife 스크래핑 + Interpark 티켓 연동
• Hybrid Search: 페스티벌명 + 아티스트명/별칭 통합 검색
• 3단계 필터링: 상태(진행중/예정/종료) × 월별 × 지역별 다중 필터
• 아티스트 프로필 자동 보강: 나무위키 → Wikidata → Wikipedia 순차 탐색
• HOT 페스티벌 캐러셀: 관리자 큐레이션 + Embla Carousel 자동 재생
• PWA 지원: Service Worker 캐시 전략 + Manifest로 모바일 앱 경험
Challenge 1 | 멀티소스 페스티벌 중복 제거
문제: KOPIS API, FestivalLife, Interpark 등 여러 소스에서 동일 페스티벌이 서로 다른 이름과 형식으로 수집되어 대량의 중복 데이터가 발생했습니다.
해결: 4단계 중복 제거 로직을 구현했습니다. kopisId 매칭 → 이름+시작일 조합 → 정규화된 이름 비교 → 장소 기반 매칭 순으로 우선순위를 적용하여 Upsert 처리합니다.
Challenge 2 | 아티스트 벌크 매칭 성능 최적화
문제: 라인업 등록 시 아티스트를 순차적으로 조회하면 60건 이상의 DB 호출이 발생하여 응답이 느렸습니다.
해결: 3단계 벌크 조회(정확한 이름 → 별칭 → 신규 생성)로 통합하고, 가비지 텍스트 필터링(URL, CSS, HTML 엔티티, 날짜 패턴)을 적용하여 불필요한 DB 호출을 제거했습니다.
Challenge 3 | 아티스트 프로필 다중 소스 활용
문제: 나무위키만으로는 모든 아티스트의 프로필 이미지와 장르 정보를 확보할 수 없었고, 아티스트 별칭(영문명, 활동명 등) 데이터도 부족했습니다.
해결: 각 소스의 강점에 맞게 역할을 분리했습니다. 나무위키에서 프로필 이미지·장르를 우선 수집하고, 실패 시 Wikipedia REST API로 순차 Fallback합니다. Wikidata SPARQL은 별칭(한글/영문 레이블) 수집에 활용하여 검색 정확도를 높였습니다. 24시간 캐시(CACHE_HOURS=24)로 불필요한 외부 호출을 방지합니다.
What I Learned | 배운 점
• 데이터 파이프라인: 멀티소스 수집 → 정규화 → 중복 제거 → Upsert 패턴
• Zod 스키마 검증: 외부 데이터의 런타임 타입 안전성 확보
• Next.js 16 App Router: Server Component + React Query 조합의 데이터 페칭 전략
• Prisma + Supabase: Edge Runtime 호환 PostgreSQL ORM 활용











