# Backend FCM — 전략 시그널 → Android 푸시 ## 흐름 ``` BarBuilder / LiveStrategyScheduler → TradeSignalService.save(userId, deviceId, …) → FcmPushService.sendTradeSignalIfEnabled(…) → Firebase Cloud Messaging → Android 앱 ``` ## 발송 조건 (모두 필요) 1. `firebase.enabled=true` + `firebase-service-account.json` 유효 2. 해당 사용자/기기 `gc_app_settings.fcm_push_enabled = true` 3. `gc_fcm_token` 에 활성 토큰 등록 (앱 로그인 후 자동 등록) 4. 로그인 사용자: `userId` 기준 토큰 조회 (모바일·웹 deviceId 달라도 OK) ## exdev 서버 설정 ```bash # .env 또는 docker-compose 환경 FIREBASE_ENABLED=true FIREBASE_SERVICE_ACCOUNT=/app/firebase-service-account.json ``` `docker-compose.yml` 볼륨 (주석 해제): ```yaml - ${FIREBASE_SERVICE_ACCOUNT_PATH}:/app/firebase-service-account.json:ro ``` goldenApp과 동일 프로젝트 **goldenanalysisapp** 서비스 계정 JSON 사용. ## 확인 ```bash curl https://stock.exdev.co.kr/api/fcm/status # {"available":true} # 앱에서 FCM 푸시 ON 후 curl -X POST https://stock.exdev.co.kr/api/fcm/test \ -H "x-user-id: 1" \ -H "x-device-id: <앱 device id>" ``` 로그: `[FCM] trade_signal sent N/M tokens market=KRW-BTC BUY`