학교 밴드 동아리의 효율적인 운영과 부원들의 참여 독려를 위해 제작된 PWA(Progressive Web App) 기반 밴드 관리 애플리케이션입니다.
React와 Firebase를 활용하여 개발되었으며, 특히 FCM(Firebase Cloud Messaging) 을 이용한 강력한 푸시 알림 기능을 통해 공지사항 전달의 효율성을 극대화했습니다.
매니저는 전체 부원에게 즉각적인 공지사항을 전송할 수 있습니다.
앱 스토어 배포 없이도 네이티브 앱과 유사한 사용자 경험을 제공합니다.
사용자의 역할(Manager/Member)에 따라 접근 가능한 기능이 구분됩니다.
users 컬렉션)에 저장합니다.notifications 컬렉션)에 문서가 생성됩니다.sendPushNotification)가 문서 생성을 감지합니다.bandmate/
├── functions/ # Firebase Cloud Functions (백엔드 로직)
│ └── src/index.ts # 알림 발송 트리거 코드
├── src/
│ ├── context/ # 전역 상태 관리 (인증 등)
│ ├── firebase/ # Firebase 설정 및 FCM 핸들러
│ │ ├── config.ts # 초기화 설정
│ │ └── fcm.ts # 토큰 관리 및 알림 권한 로직
│ ├── pages/ # 주요 페이지 컴포넌트
│ │ ├── HomePage.tsx # 메인 대시보드
│ │ ├── SendNotificationPage.tsx # (매니저용) 알림 발송
│ │ └── ...
│ ├── types/ # TypeScript 타입 정의
│ ├── App.tsx # 라우팅 설정
│ └── sw.ts # Service Worker 설정
├── public/
│ └── firebase-messaging-sw.js # 백그라운드 메시지 처리를 위한 SW
└── vite.config.ts # Vite 및 PWA 플러그인 설정
프로젝트 루트에 .env 파일을 생성하고 Firebase 설정을 입력합니다.
(보안을 위해 .env는 git에 포함되지 않습니다)
VITE_FIREBASE_API_KEY=your_api_key
VITE_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your_project_id
VITE_FIREBASE_STORAGE_BUCKET=your_bucket
VITE_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
VITE_FIREBASE_APP_ID=your_app_id
VITE_FIREBASE_VAPID_KEY=your_vapid_key
npm install
npm run dev
백엔드 로직을 수정했다면 함수를 배포해야 합니다.
cd functions
npm install
npm run deploy
.env 파일을 통해 관리되며, 저장소에 업로드되지 않도록 .gitignore 처리되었습니다.PrivateRoute)를 통해 비인가 사용자의 접근을 차단합니다.수정된 파일:
iOS 사용자에게 "홈 화면에 추가" 안내 표시
에러 메시지 표시 기능 추가
플랫폼별 도움말 텍스트
모바일에서 테스트하려면:
Android:
Chrome에서 사이트 접속
"알림 활성화" 버튼 클릭
권한 허용
iOS (iPhone/iPad):
Safari에서 사이트 접속 (Chrome 안됨!)
공유 버튼 → "홈 화면에 추가"
홈 화면에서 앱 열기
"알림 활성화" 버튼 클릭
iOS 16.4 이상 필요