# Classical Music Community (클래식 커뮤니티 서비스)
클래식 음악 애호가들을 위한 커뮤니티 서비스 프로젝트입니다.
## 프로젝트 구조 (Monorepo)
- `backend/`: FastAPI 기반의 RESTful API 서버
- `frontend/`: Next.js 기반의 웹 프론트엔드 (향후 모바일 확장 고려)
- `docs/`: BDD 시나리오, QMS 문서 및 프로젝트 관련 가이드
## 개발 프로세스
1. **BDD (Behavior Driven Development)**: `docs/features` 내에 거킨(Gherkin) 문법으로 사용자 시나리오 정의
2. **TDD (Test Driven Development)**: 정의된 시나리오를 바탕으로 유효하지 않은 테스트 작성 후 기능 구현
3. **QMS (Quality Management System)**: 품질 관리 기준에 따른 문서화 및 검증
## 기술 스택
- **Backend**: Python, FastAPI
- **Frontend**: TypeScript, Next.js, Vanilla CSS
- **Infrastructure**: FCM (Push Notification)
---
*본 가이드는 PM과 개발팀 간의 협업을 위해 한국어로 작성되었습니다.*
# 엔지니어링 가이드라인: BDD 및 QMS 프로세스
이 문서는 프로젝트의 품질 관리 및 개발 효율성을 위해 BDD(Behavior-Driven Development)와 QMS(Quality Management System) 프로세스를 정의합니다. 모든 개발 단계는 한글을 기본 언어로 사용합니다.
## 1. BDD (Behavior-Driven Development) 프로세스
BDD는 사용자의 관점에서 시스템의 동작을 정의하고 이를 바탕으로 테스트와 코드를 작성하는 방식입니다.
### 단계별 절차
1. **유저 플로우(User Flow) 작성**: 새로운 기능에 대한 사용자 시나리오를 **Mermaid 차트**로 작성하고 사용자(관리자)의 승인을 받습니다. (필요 시 Mermaid 코드를 피그잼에 복사하여 활용할 수 있습니다.)
2. **RTM(Requirement Traceability Matrix) 업데이트**: `docs/RTM.md`에 Markdown 테이블 형식으로 요구사항을 등록합니다. 식별 편의를 위해 테이블 상단/하단에 주석 형태의 JSON 데이터(`<!-- { "id": ... } -->`)를 포함할 수 있습니다.
3. **거킨(Gherkin) 시나리오 작성**: `# language: ko` 헤더를 사용하여 한글로 시나리오를 작성합니다. 초기에는 Cucumber 같은 무거운 도구 도입 없이, 테스트 코드와의 매핑 용도로 활용합니다.
4. **RTM 업데이트**: 작성된 거킨 시나리오와 요구사항을 매핑하여 RTM을 업데이트합니다.
5. **테스트 코드 작성**: **Playwright**를 사용하여 UI 테스트를 작성하고, 프로젝트 단위별 유닛 테스트를 병행합니다.
- **중요**: 테스트 코드의 각 라인에는 대응되는 거킨 시나리오 문구를 주석으로 포함합니다.
```javascript
// 조건: 사용자가 로그인 페이지에 있다
await page.goto('/login');
// ...
```
6. **코드 구현 및 테스트**: 테스트가 통과(Green)할 때까지 `코드 작성 -> 테스트 실행 -> 코드 작성` 과정을 반복합니다.
7. **최종 승인**: 모든 테스트가 Green 라이트가 되면 최종 푸쉬 승인을 요청합니다.
## 2. QMS (Quality Management System) 프로세스
QMS는 소프트웨어 릴리즈의 안정성과 투명성을 보장하기 위한 시스템입니다.
### 릴리즈 노트 관리
- **릴리즈 노트 작성**: 코드 머지(Merge) 시 해당 변경 사항에 대한 릴리즈 노트를 Markdown(`.md`) 형식으로 작성합니다.
- **내용 구성**:
- 변경 요약
- 구현된 기능 목록 (RTM 참조)
- 수정된 버그
- 영향 범위 및 주의 사항
## 3. 언어 및 표기 규칙
- 모든 기술 문서, 거킨 시나리오, 릴리즈 노트는 **한글 위주**로 작성합니다.
- 거킨 시나리오 작성 시 파일 최상단에 `# language: ko`를 반드시 명시합니다.
## 4. 문서 동기화 규칙
- 이 가이드라인과 `README.md`, 그리고 `.agent/workflows/bdd-process-kr.md`는 항상 **동일한 프로세스 정보를 유지**해야 합니다.
- 프로세스에 변경 사항이 생길 경우, Antigravity는 위 세 파트의 문서를 한꺼번에 업데이트하여 정보의 불일치를 방지합니다.
# 엔지니어링 가이드라인: BDD 및 QMS 프로세스
이 문서는 프로젝트의 품질 관리 및 개발 효율성을 위해 BDD(Behavior-Driven Development)와 QMS(Quality Management System) 프로세스를 정의합니다. 모든 개발 단계는 한글을 기본 언어로 사용합니다.
## 1. BDD (Behavior-Driven Development) 프로세스
BDD는 사용자의 관점에서 시스템의 동작을 정의하고 이를 바탕으로 테스트와 코드를 작성하는 방식입니다.
### 단계별 절차
1. **유저 플로우(User Flow) 작성**: 새로운 기능에 대한 사용자 시나리오를 **Mermaid 차트**로 작성하고 사용자(관리자)의 승인을 받습니다. (필요 시 Mermaid 코드를 피그잼에 복사하여 활용할 수 있습니다.)
2. **RTM(Requirement Traceability Matrix) 업데이트**: `docs/RTM.md`에 Markdown 테이블 형식으로 요구사항을 등록합니다. 식별 편의를 위해 테이블 상단/하단에 주석 형태의 JSON 데이터(`<!-- { "id": ... } -->`)를 포함할 수 있습니다.
3. **거킨(Gherkin) 시나리오 작성**: `# language: ko` 헤더를 사용하여 한글로 시나리오를 작성합니다. 초기에는 Cucumber 같은 무거운 도구 도입 없이, 테스트 코드와의 매핑 용도로 활용합니다.
4. **RTM 업데이트**: 작성된 거킨 시나리오와 요구사항을 매핑하여 RTM을 업데이트합니다.
5. **테스트 코드 작성**: **Playwright**를 사용하여 UI 테스트를 작성하고, 프로젝트 단위별 유닛 테스트를 병행합니다.
- **중요**: 테스트 코드의 각 라인에는 대응되는 거킨 시나리오 문구를 주석으로 포함합니다.
```javascript
// 조건: 사용자가 로그인 페이지에 있다
await page.goto('/login');
// ...
```
6. **코드 구현 및 테스트**: 테스트가 통과(Green)할 때까지 `코드 작성 -> 테스트 실행 -> 코드 작성` 과정을 반복합니다.
7. **최종 승인**: 모든 테스트가 Green 라이트가 되면 최종 푸쉬 승인을 요청합니다.
## 2. QMS (Quality Management System) 프로세스
QMS는 소프트웨어 릴리즈의 안정성과 투명성을 보장하기 위한 시스템입니다.
### 릴리즈 노트 관리
- **릴리즈 노트 작성**: 코드 머지(Merge) 시 해당 변경 사항에 대한 릴리즈 노트를 Markdown(`.md`) 형식으로 작성합니다.
- **내용 구성**:
- 변경 요약
- 구현된 기능 목록 (RTM 참조)
- 수정된 버그
- 영향 범위 및 주의 사항
## 3. 언어 및 표기 규칙
- 모든 기술 문서, 거킨 시나리오, 릴리즈 노트는 **한글 위주**로 작성합니다.
- 거킨 시나리오 작성 시 파일 최상단에 `# language: ko`를 반드시 명시합니다.
## 4. 문서 동기화 규칙
- 이 가이드라인과 `README.md`, 그리고 `.agent/workflows/bdd-process-kr.md`는 항상 **동일한 프로세스 정보를 유지**해야 합니다.
- 프로세스에 변경 사항이 생길 경우, Antigravity는 위 세 파트의 문서를 한꺼번에 업데이트하여 정보의 불일치를 방지합니다.# 상세 설계: 비회원 지역 맞춤 공연 알림 (MVP)
이 문서는 MVP 기능인 비회원 맞춤 알림 서비스의 상세 설계를 정의합니다.
## 1. 프론트엔드 유저 플로우 (User Flow)
```mermaid
graph TD
A[사용자 웹사이트 접속] --> B[기본 공연 목록 표시]
B --> C{개인 맞춤 알림 설정 유도}
C -- 클릭 (설정 요청) --> D{알림 권한 요청}
D -- 허용 --> E[지역 정보 선택/입력]
D -- 차단 --> F[공연 목록 탐색 지속]
E --> G[브라우저 FCM 토큰 추출]
G --> H[백엔드로 토큰 및 지역 정보 전송]
H --> I[맞춤형 상태 업데이트 및 목록 필터링]sequenceDiagram
participant S as Scheduler
participant C as Crawler/Parser
participant DB as Database
S->>C: 데이터 수집 트리거 (주기적)
C->>C: 외부 API/웹 파싱 및 정제
C->>DB: 중복 체크 및 신규 공연 저장
DB-->>C: 저장 완료sequenceDiagram
participant DB as Database
participant N as Notification Service
participant FCM as Firebase (FCM)
participant U as User Browser
DB->>N: 오늘/내일 오픈되는 지역별 공연 조회
N->>DB: 해당 지역 구독된 FCM 토큰 조회
N->>FCM: 알림 메시지 전송 요청 (토큰 기반)
FCM-->>U: 푸시 알림 도달(재)출항이다!