fromis_9/docs/architecture.md
caadiq f762302689 docs: 프로젝트 개발환경 문서 추가
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 19:01:27 +09:00

5.3 KiB

프로젝트 구조

디렉토리 구조

fromis_9/
├── backend/                    # Fastify 백엔드 (현재 사용)
│   ├── src/
│   │   ├── config/
│   │   │   ├── index.js        # 환경변수 통합 관리
│   │   │   └── bots.js         # 봇 설정 (YouTube, X)
│   │   ├── plugins/            # Fastify 플러그인
│   │   │   ├── db.js           # MariaDB 연결
│   │   │   ├── redis.js        # Redis 연결
│   │   │   ├── auth.js         # JWT 인증
│   │   │   ├── meilisearch.js  # 검색 엔진
│   │   │   └── scheduler.js    # 봇 스케줄러
│   │   ├── routes/             # API 라우트
│   │   │   ├── auth/
│   │   │   ├── members/
│   │   │   ├── albums/
│   │   │   ├── schedules/
│   │   │   │   ├── index.js    # 일정 조회/검색
│   │   │   │   └── suggestions.js
│   │   │   └── index.js        # 라우트 등록
│   │   ├── services/           # 비즈니스 로직
│   │   │   ├── youtube/        # YouTube 봇
│   │   │   ├── x/              # X(Twitter) 봇
│   │   │   ├── meilisearch/    # 검색 서비스
│   │   │   └── suggestions/    # 추천 검색어
│   │   ├── app.js              # Fastify 앱 설정
│   │   └── server.js           # 진입점
│   └── package.json
│
├── backend-backup/             # Express 백엔드 (참조용, 마이그레이션 원본)
│
├── frontend/                   # React 프론트엔드
│   ├── src/
│   │   ├── api/                # API 클라이언트
│   │   │   ├── index.js        # fetchApi 유틸
│   │   │   ├── public/         # 공개 API
│   │   │   └── admin/          # 어드민 API
│   │   ├── components/         # 공통 컴포넌트
│   │   ├── pages/
│   │   │   ├── pc/             # PC 페이지
│   │   │   └── mobile/         # 모바일 페이지
│   │   ├── stores/             # Zustand 스토어
│   │   └── App.jsx
│   ├── vite.config.js
│   └── package.json
│
├── Dockerfile                  # 개발/배포 통합 (주석 전환)
├── docker-compose.yml
└── .env

서비스 구성

┌─────────────────────────────────────────────────────────┐
│                        Caddy                            │
│                   (리버스 프록시)                         │
└─────────────────────┬───────────────────────────────────┘
                      │
                      ▼
┌─────────────────────────────────────────────────────────┐
│              fromis9-frontend (Docker)                  │
│  ┌─────────────────┐    ┌─────────────────────────────┐ │
│  │   Vite (:80)    │───▶│     Fastify (:3000)         │ │
│  │   프론트엔드     │    │     백엔드 API              │ │
│  └─────────────────┘    └──────────┬──────────────────┘ │
└─────────────────────────────────────┼───────────────────┘
                                      │
         ┌────────────────────────────┼────────────────────────────┐
         │                            │                            │
         ▼                            ▼                            ▼
┌─────────────────┐      ┌─────────────────┐      ┌─────────────────┐
│    MariaDB      │      │   Meilisearch   │      │     Redis       │
│   (외부 DB망)    │      │   (검색 엔진)    │      │    (캐시)       │
└─────────────────┘      └─────────────────┘      └─────────────────┘

데이터베이스

주요 테이블

  • members - 멤버 정보
  • member_nicknames - 멤버 별명 (검색용)
  • albums - 앨범 정보
  • schedules - 일정
  • schedule_categories - 일정 카테고리
  • schedule_youtube - YouTube 영상 정보
  • schedule_x - X(Twitter) 게시물 정보
  • schedule_members - 일정-멤버 연결
  • images - 이미지 메타데이터

검색 인덱스 (Meilisearch)

  • schedules - 일정 검색용 인덱스
    • 검색 필드: title, member_names, description, source_name, category_name
    • 필터: category_id, date
    • 정렬: date, time