[P2] 알림 시스템 (Push/Email/Kakao)
ID: 73410efc-ec2b-4d9a-a4af-be0e0adcc9e7
## 개요
Web Push, 이메일, 카카오톡 알림 시스템
## 범위
- PushSubscription 모델: user_id, subscription(JSON), is_active, browser_info
- Web Push 구독/해제 (web-push gem, VAPID)
- 푸시 알림 발송
- Solid Queue로 CRON 알림 (시간별 대상자 조회 + 발송)
- Action Mailer 이메일 알림
- Solapi 카카오톡 알림 (선택적)
- 알림 설정 (방식, 시간)
## 완료 기준
- [ ] Web Push 구독/발송 동작
- [ ] Solid Queue CRON 예약 알림 동작
- [ ] 알림 설정 변경 동작
- [ ] 이메일 알림 발송 동작
- [ ] 통합 테스트 통과
## 참고
- 레거시: api/push/*.ts, api/notifications/cron/route.ts
- 기능 ID: N1-N4
첨부 이미지
이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)
JPEG, PNG, GIF, WebP / 최대 10MB
활동 로그
-
팀팀리드 팀 작업 완료 - [P2] 알림 시스템 (Push/Email/Kakao)
2026년 03월 02일 05:13:29
상세 보기
## 수정된 기능
### 1. 알림 기반 (notification-foundation)
- `web-push` gem (v3.1.0) 설치
- `PushSubscription` 모델 생성 (UUID PK, endpoint/p256dh/auth 개별 칼럼, unique index)
- `user_settings.notification_methods` 칼럼 추가 (콤마 구분 문자열, default: "push")
- `User` has_many :push_subscriptions 관계 설정
- `UserSetting` 헬퍼 메서드 (push_enabled?, email_enabled?, kakao_enabled?)### 2. 알림 백엔드 (notification-backend)
- `PushSubscriptionsController` - POST /push/subscribe, GET /push/vapid_public_key, DELETE /push/unsubscribe
- `NotificationService` - 웹 푸시 + 이메일 통합 발송 서비스
- `NotificationCronJob` - 매 시간 알림 발송 체크 (Solid Queue recurring)
- `NotificationMailer` + qt_reminder.html.erb 이메일 템플릿
- `config/recurring.yml` - Solid Queue 스케줄 설정
- routes.rb에 /push/* 라우트 추가### 3. 알림 프론트엔드 (notification-frontend)
- Service Worker (app/views/pwa/service-worker.js에 push/notificationclick 핸들러)
- Stimulus `push_notification_controller` - 구독 등록/해제
- Stimulus `service_worker_controller` - SW 자동 등록
- Stimulus `notification_methods_controller` - 체크박스 → hidden input 연동
- Settings UI에 알림 방식 선택 섹션 추가 (push/email/kakao 체크박스)## 해결된 문제
- web-push gem 빌드 시 openssl 의존성 → Docker에 libssl-dev 추가
- public/service-worker.js와 app/views/pwa/service-worker.js 충돌 → public 버전 삭제
- 레거시 subscription JSONB → SQLite3 개별 칼럼 분리 (endpoint, p256dh, auth)## 발견된 패턴/주의사항
- Docker 컨테이너에서 native gem 빌드 시 build-essential, libssl-dev 필요
- compose.yaml 포트가 3001:3000으로 변경됨 (nineway 프로젝트 3000 사용)## 테스트 결과
- 406 runs, 948 assertions, 0 failures
- 기존 테스트 1개 실패 (PagesControllerTest - 본 작업 무관)## 남은 이슈
- 배포 시 VAPID 키 생성 및 환경변수 설정 필요 (VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, VAPID_EMAIL)
- Action Mailer SMTP 설정 필요 (production.rb)
- 카카오톡 알림 (Solapi) 미구현 (준비 중 표시) -
팀팀리드 상태 변경: 진행 중 → 완료
2026년 03월 02일 05:13:06
-
팀팀리드 위임: notification-frontend에게 '알림 프론트엔드: Service Worker + Settings UI + Stimulus' 작업 배정
2026년 03월 02일 04:41:14
-
팀팀리드 위임: notification-backend에게 '알림 백엔드: 컨트롤러 + Job + Mailer + 라우팅' 작업 배정
2026년 03월 02일 04:40:53
-
팀팀리드 위임: notification-foundation에게 '알림 기반: Gem 추가 + PushSubscription 모델 + 마이그레이션' 작업 배정
2026년 03월 02일 04:40:03
-
팀팀리드 작업 시작 - [P2] 알림 시스템 (Push/Email/Kakao)
2026년 03월 02일 04:39:36
상세 보기
## 작업 계획
- 목표: 웹 푸시(VAPID), 이메일(Action Mailer), 카카오톡(Solapi) 알림 시스템 구현
- 접근 방식: DB 모델 → 백엔드 서비스 → 프론트엔드 순으로 3개 에이전트 병렬 작업## 코드베이스 분석 결과
- Solid Queue 설정 완료 (production.rb에서 queue adapter 설정됨)
- ApplicationMailer 기본 클래스만 존재
- push_subscriptions 테이블 미생성
- user_settings에 notification_methods 칼럼 없음
- web-push gem 미설치
- 레거시 코드 참고: /mnt/c/dev/logbible/src/app/api/push/, /api/notifications/## 서브 티켓 계획
1. 알림 기반 모델/마이그레이션 (gems, DB, models)
2. 웹 푸시 + 알림 Job 백엔드 (controllers, jobs, routes)
3. 알림 프론트엔드 (service worker, settings UI, stimulus)## 현재 상태
- 보드 현황: backlog 0 / todo 8 / in_progress 1 / review 0 / done 37 -
팀팀리드 티켓 클레임 완료
2026년 03월 02일 04:35:33