Spring Boot 기반의 스마트 안전 모니터링 백엔드입니다. 사용자·시설·카메라를 관리하고, AI가 MQTT로 전달한 위험 이벤트를 저장한 뒤 웹과 모바일에 실시간 알림으로 전달합니다.
이미지는 백엔드 단독 기능이 아니라 strangeRookies 프로젝트 통합 자료의 전체 운영 구조를 보여주는 참고 자료입니다.
- 개인·기업 회원가입과 로그인
- BCrypt 비밀번호 처리, JWT Access/Refresh Token
- HttpOnly Refresh Token 쿠키와 Redis 세션·로그인 제한
- SMS 인증, 비밀번호 재설정, 약관 동의 관리
- 개인 시설·기업 카메라·보호 대상자·긴급 연락처 관리
- 카메라별 시나리오와 위험구역 ROI 설정 관리
- MQTT 위험 이벤트·카메라 상태·오버레이 수신
- 이벤트 ID 기반 중복 처리와 영상 후첨부
- PostgreSQL 기반 이벤트·이력·상태 저장
- 최근 이벤트 Redis 캐시와 PostgreSQL fallback
- STOMP over WebSocket 기반 시설·기업별 실시간 알림
- FCM 모바일 푸시와 기기 토큰·전송 이력 관리
- S3 스냅샷·클립 저장 및 Presigned URL 발급
- VLM 설명 작업과 선택적 임베딩·검색 연동
- 오래된 알림 데이터 정리 스케줄러
AI Worker
-> MQTT Broker
-> MQTT Subscriber
-> 비동기 이벤트 처리
-> PostgreSQL 저장
-> STOMP WebSocket / FCM
-> 웹 대시보드·Android 앱
- PostgreSQL: 사용자, 시설, 카메라, 시나리오, ROI, AlertEvent, 스냅샷 메타데이터와 알림 이력
- Redis: 인증번호, Refresh Token, 로그인 제한, 최근 10분 이벤트 캐시
- S3: 스냅샷과 클립 파일
- 최근 이벤트 캐시는 시설·기업별 Sorted Set으로 관리하며 최대 100건을 조회
- 동일 이벤트는
eventId와 DB Unique 제약조건으로 중복 저장을 방지 - 기본 알림 보관 기간은 30일이며 환경변수로 조정 가능
사용자, 기업, 시설, 카메라, 위험 이벤트, 알림 및 긴급 연락처 간의 관계를 기준으로 데이터베이스를 설계했습니다.
필수 환경변수를 설정한 후 실행합니다.
./gradlew bootRun기본 개발 설정은 다음 인프라를 사용합니다.
PostgreSQL: localhost:5432
Redis: localhost:6379
MQTT Broker: localhost:1883
API: localhost:8080
WebSocket: /ws
주요 환경변수 예시:
DB_URL=jdbc:postgresql://localhost:5432/strange_safety
DB_USERNAME=postgres
DB_PASSWORD=your-password
REDIS_HOST=localhost
MQTT_HOST=localhost
JWT_SECRET=change-me
FCM_ENABLED=false
AWS_S3_BUCKET=your-bucket- 개인·기업 회원가입, 로그인, SMS 인증과 약관 동의 흐름
- JWT 인증과 Refresh Token 재발급·로그아웃 처리
- MQTT 이벤트 수신, 시설·기업별 이벤트 매핑과 중복 처리
- PostgreSQL 이벤트 모델과 Redis 최근 이벤트 캐시
- STOMP 토픽 기반 웹 실시간 알림
- FCM 기기 등록, 푸시 발송과 전송 결과 관리
- 카메라·ROI·시설·보호 대상자 관리 API
- S3 미디어 메타데이터와 Presigned URL 처리
- 포트폴리오
- Mercenary Backend — 1인 개발·Redis 캐시·Redisson 분산 락
- OpenCloset Backend — 팀 백엔드·JPQL 다중 조건 검색
- Runner's High Backend — 서비스 기획·백엔드 리드·수상 프로젝트


