Files
comrelay/backend/.env.development.example
T
ttipo 8d00d71072 feat: PC 데스크톱 알림(웹 푸시) 추가 — 인앱/SSE에 OS 토스트 연동
카카오톡처럼 PC에 OS 토스트가 뜨도록 Web Notifications(Level1) +
Web Push/서비스워커(Level2)를 기존 인앱·SSE 알림 위에 얹는다.
중복 방지: 페이지가 열려 있으면 SSE 로컬 알림(포커스면 인앱만),
닫혀 있으면 서비스워커 푸시가 담당한다.

- 백엔드: push_subscriptions 엔티티 + WebPushService(VAPID 설정·
  type→{title,body,url} 포매터·만료 구독 정리), notify()가 SSE와
  함께 푸시 발송, push/subscribe·unsubscribe 엔드포인트, 마이그레이션,
  web-push 의존성
- 프론트: public/sw.js(push/클릭), usePush 컴포저블(권한·구독, 결과
  안내), notification.store 로컬 토스트, AppShell 'PC 알림 켜기' 버튼
- env/compose: VAPID 키 주입(공개키→프론트, 비밀키→백엔드)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 00:49:33 +09:00

60 lines
2.8 KiB
Bash

# ==========================================
# 백엔드 고유 설정 (development)
# 루트 .env 에서 주입하지 않는 값만 여기에 둔다.
# DB/Redis/CORS/포트/AI_TIMEOUT_MS 는 docker-compose 가 루트 .env.development 에서 주입.
# .example 을 복사해 만들고 실제 값으로 채운다. (커밋 금지)
# ==========================================
# ==========================================
# JWT / 인증 토큰
# ==========================================
# 시크릿은 강력한 랜덤 문자열로 교체:
# node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"
JWT_ACCESS_SECRET=change-me-access-secret
JWT_REFRESH_SECRET=change-me-refresh-secret
JWT_ACCESS_TTL=15m
JWT_REFRESH_TTL=14d
# ==========================================
# 앱 URL (리다이렉트)
# ==========================================
# APP_API_URL : 백엔드 공개 주소(/api 포함). 인증 메일 링크 생성용. 미설정 시 localhost:3100/api 폴백.
# FRONTEND_URL: 프론트 공개 주소. 인증 완료·소셜 로그인 후 리다이렉트. 미설정 시 CORS_ORIGIN→localhost:5273 폴백.
APP_API_URL=http://localhost:3100/api
FRONTEND_URL=http://localhost:5273
# ==========================================
# 소셜 로그인 (OAuth)
# ==========================================
# 각 제공자 콘솔 발급 키. CLIENT_ID 가 비면 해당 소셜 로그인 비활성.
# CALLBACK_URL 은 콘솔 등록값과 정확히 일치해야 함(/api 포함).
KAKAO_CLIENT_ID=change-me-kakao-rest-api-key
KAKAO_CLIENT_SECRET=change-me-kakao-client-secret
KAKAO_CALLBACK_URL=http://localhost:3100/api/auth/kakao/callback
GOOGLE_CLIENT_ID=change-me-google-client-id
GOOGLE_CLIENT_SECRET=change-me-google-client-secret
GOOGLE_CALLBACK_URL=http://localhost:3100/api/auth/google/callback
# ==========================================
# AI 에이전트 (Claude)
# ==========================================
# CLAUDE_API_KEY: Anthropic API 키. 미설정 시 AI 기능 비활성.
# CLAUDE_MODEL : 모델 ID. 미설정 시 claude-sonnet-4-6.
CLAUDE_API_KEY=change-me-claude-api-key
CLAUDE_MODEL=claude-sonnet-4-6
# ==========================================
# 드라이브 (NCP Object Storage) — 시크릿
# ==========================================
# NCP 콘솔 → 마이페이지 → 인증키 관리(또는 서브계정)에서 발급한 키.
# endpoint/region/bucket 은 루트 .env 에서 docker-compose 가 주입한다.
# 미설정 시 드라이브 기능만 비활성화되고 앱은 정상 부팅된다.
OBJECT_STORAGE_ACCESS_KEY=change-me-ncp-access-key
OBJECT_STORAGE_SECRET_KEY=change-me-ncp-secret-key
# ==========================================
# 웹 푸시 알림 (Web Push / VAPID) — 시크릿(개인키)
# PUBLIC_KEY/SUBJECT 는 루트 .env 에서 주입. 미설정 시 푸시만 비활성.
# ==========================================
VAPID_PRIVATE_KEY=