정지용
프로젝트 목록
백엔드Java

화재 감지 시스템 온프레미스 백엔드

실내 화재/연기를 카메라 + AI(YOLO, VLM)로 감지하여 이벤트·알림·웹훅을 관리하는 Spring Boot 3.2 기반 온프레미스 백엔드

firescout-3.0-onpremise-backend최근 업데이트 2026년 7월 27일

개요

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)

백엔드

데이터베이스

  • 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일 에 자동 분석으로 생성되었습니다.