화재 감지 시스템 온프레미스 백엔드
실내 화재/연기를 카메라 + AI(YOLO, VLM)로 감지하여 이벤트·알림·웹훅을 관리하는 Spring Boot 3.2 기반 온프레미스 백엔드
개요
RTSP 카메라 스트림을 AI Box에서 수신해 YOLO 검출 후 VLM 추론으로 화재/연기를 검증하고, 일정 신뢰도 이상이면 이벤트를 생성해 Firebase Push·이메일·Slack·웹훅으로 알립니다. 카메라·디바이스·사용자·클라이언트를 관리하며, 검출 영역 1% 미만 필터링으로 오탐을 줄이고 추론 비용을 절감합니다. 감사 로그·형상 이력·HITL 검토·모니터링 일일 리포트 등 운영 기능을 제공하며, PostgreSQL·MinIO·Prometheus·Grafana 스택으로 구성된 온프레미스 환경에서 동작합니다.
담당 역할
Spring Boot 백엔드 아키텍처 설계 및 화재 이벤트 생성·검증 로직 구현, 웹훅·알림·감사 로그 시스템 개발, 배치 스케줄러 및 모니터링 연동 담당
아키텍처 다이어그램
레포지토리 분석 결과를 바탕으로 자동 생성된 구조도입니다.
화재 감지 시스템 아키텍처
AI Box가 RTSP 스트림에서 YOLO 검출 후 백엔드로 이벤트 요청을 보내고, 백엔드가 VLM 추론·검증 후 알림(Firebase·이메일·Slack·웹훅)을 전송하는 전체 흐름
카메라 상태 관리 흐름
카메라 status(연결 상태)와 isInference(감지 토글)가 AI Box 동기화·스케줄러·이벤트 생성에 미치는 영향
감사 로그 기록 시점
로그인·설정 변경·삭제·이미지 조회 시 AuditLog 테이블에 append-only로 기록되는 지점
기술스택
각 기술을 이 프로젝트에서 어떤 용도로 썼는지 정리했습니다.
언어
- Java주 개발 언어 (JDK 17)
프레임워크
- Spring Boot백엔드 애플리케이션 프레임워크 (3.2.12)
백엔드
- Spring SecurityJWT 기반 인증·권한 관리
- Spring Data JPA엔티티 관리 및 PostgreSQL ORM
- Firebase Admin SDK모바일 앱 Push 알림 전송
데이터베이스
- PostgreSQL메인 데이터베이스 (이벤트·카메라·사용자·감사 로그 저장)
- FlywayDB 스키마 마이그레이션 관리
인프라
- MinIO온프레미스 S3 호환 객체 스토리지 (이벤트 이미지 저장)
- Prometheus메트릭 수집 및 시계열 DB
- Grafana모니터링 대시보드 시각화
DevOps
- Docker컨테이너 빌드 및 배포 (docker-compose 스택)
도구
- Lombok보일러플레이트 코드 자동 생성
핵심 포인트
- 검출 영역 1% 미만 자동 필터링으로 VLM 추론 호출·이미지 업로드를 건너뛰어 오탐·비용 감소
- 카메라별 is_inference 토글로 감지 on/off 제어, AI Box 동기화 제외 + 서버 게이트 2단 차단
- 감사 로그(audit_log)로 로그인·설정 변경·삭제·이미지 조회 전 기록 추적, 관리자 전용 조회 API
- Slack 일일 리포트(모니터링·버전 체크·연결 끊김 카메라) 및 실시간 화재 알림 스케줄러 구현
- 웹훅 시스템(Basic·Bearer·API Key·HMAC 인증 지원, 재시도·전송 이력 관리) 설계 및 구현
문제와 해결
문제작은 불꽃·노이즈로 인한 빈번한 VLM 추론 호출로 비용 증가 및 오탐
해결이벤트 생성 전 검출 영역 합산 → 전체 이미지 대비 1% 미만이면 추론 API 건너뛰고 InferenceLog만 기록
문제감지 off 카메라가 AI Box 동기화 제외로 last_processed_at 갱신 멈춰 장애로 오판
해결스케줄러·배치 UPDATE·모니터링 경로에서 is_inference=false 카메라 제외, 온라인 상태 유지
문제JPQL projection 필드 추가 시 순서 불일치로 값이 뒤바뀌는데 컴파일 타임 검출 불가
해결CameraRepositoryInferenceQueryTest로 쿼리 select 순서와 생성자 파라미터 시그니처 대조 테스트
레포지토리 정보
- 생성
- 2026년 7월 27일
- 최근 커밋
- 2026년 7월 27일
- 크기
- 1,897 KB
- 라이선스
- 없음
언어 구성
- Java97.4%
- Shell1.3%
- PLpgSQL1.0%
- HTML0.4%
이 문서는 2026년 7월 28일 에 자동 분석으로 생성되었습니다.