아티스트 홍보 웹사이트
코드 없이 템플릿을 골라 자기 페이지를 만드는 아티스트 홍보 서비스
Impact
- 코드 없이 포트폴리오템플릿을 고르고 칸만 채우면 페이지 완성영상, 음원, 이미지 카드를 원하는 순서로 배치
- 2종 템플릿세션 연주자는 이력과 음원 중심미디어아트 작가는 전시 이미지 격자
- 토큰 하나로 인증이메일 가입(OTP)과 Google 로그인이후 요청은 하나의 JWT로 처리
Background
음악 아티스트는 작업을 모아 보여줄 곳이 마땅치 않습니다. 인스타그램은 흘러가고, 사운드클라우드는 음원만 담기고, 웹사이트는 직접 만들기 어렵습니다.
코드 없이 자기 페이지를 만드는 서비스입니다. 2026.05까지 운영했습니다.


Architecture

Contributions
템플릿별 정규화 스키마
JSON 컬럼 하나가 가장 간단했지만, 직업별 검색도 템플릿 간 데이터 이전도 막힙니다.
템플릿마다 정규화한 스키마를 두고, 카드마다 순서 값을 둬 아티스트가 배치를 바꿉니다.
Troubleshooting
빈 데이터베이스에서 서버가 뜨지 않음
- 문제
- 빈 DB에서 서버가 뜨지 않음
서버가 뜰 때마다 운영 DB의 테이블과 외래키를 고치고 있었고, 이력도 롤백도 없음 - 원인
- 모델 정의와 운영 스키마가 어긋나, 운영 DB 하나만 우연히 동작. 빈 DB에서는 enum 컬럼을 문자열과 비교하는 UPDATE에서 실패
- 해결
- Alembic 도입. 자동 생성은 외래키를 지우므로, 운영 스키마를 뽑아 모델과 하나씩 대조
- 결과
- 빈 DB에서 기동 확인. 운영에만 있던
ON DELETE CASCADE27개를 모델에 명시. 빠졌다면 사용자 삭제가 외래키 위반으로 실패
템플릿 2만 쓰는 아티스트가 목록에 없음
- 문제
- 카테고리 목록에 템플릿 2 아티스트가 노출되지 않음
- 원인
- 공개 목록은 템플릿 1 테이블만, 검색 API는 둘 다 조회
- 해결
profile.py898줄 중 약 600줄이 템플릿 1과 2의 중복. 레지스트리로 묶어 서비스 계층으로 옮기며 조회 경로도 하나로- 결과
- 라우터 271줄. 목록 누락도 함께 해결. 리팩터 전후를 pytest 86건으로 고정