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

실내 화재 감지 시스템 백엔드 서버 (FireScout 3.0)

AI Box와 연동하여 RTSP 카메라 영상에서 실시간 화재·연기를 탐지하고, VLM 추론·알림·관제 기능을 제공하는 Spring Boot 백엔드 시스템

indoor-fire-backend-server최근 업데이트 2026년 7월 27일

개요

현장에 설치된 AI Box가 RTSP 카메라 영상을 분석하여 화재·연기를 1차 탐지하면, 백엔드 서버가 이를 수집·검증하고 VLM(Vision-Language Model) 추론 서버를 호출해 최종 확정합니다. 확정된 이벤트는 PostgreSQL(+pgvector)에 저장되고, Firebase·이메일·Slack을 통해 실시간 알림이 전송됩니다. 관리자는 내부 API를 통해 카메라·디바이스·사용자를 관리하며, CSV 대량 업로드로 수백 대 규모의 카메라를 일괄 등록할 수 있습니다. 검출 영역 필터링(1% 미만 자동 제외)과 HITL(Human-In-The-Loop) 검수 파이프라인으로 오탐을 최소화합니다.

담당 역할

Spring Boot 기반 백엔드 서버 전체 아키텍처 설계 및 구현. 디바이스 동기화·이벤트 파이프라인·VLM 추론 연동·알림 시스템·배치 스케줄러·E2E 테스트 구축을 담당했습니다.

아키텍처 다이어그램

레포지토리 분석 결과를 바탕으로 자동 생성된 구조도입니다.

아키텍처

전체 시스템 아키텍처

RTSP 카메라부터 AI Box, 백엔드 서버, 외부 서비스(VLM·S3·Firebase·Slack), 사용자 앱까지의 데이터 흐름을 보여줍니다.

다이어그램을 그리는 중…
데이터 흐름

이벤트 생성 파이프라인

AI Box가 화재를 탐지한 후 백엔드가 검증·추론·저장·알림을 순차 처리하는 흐름입니다.

다이어그램을 그리는 중…
시퀀스

디바이스 동기화 및 상태 관리

AI Box가 주기적으로 설정을 동기화하고, 백엔드가 연결 상태와 카메라 처리 시각을 추적하는 시퀀스입니다.

다이어그램을 그리는 중…

기술스택

각 기술을 이 프로젝트에서 어떤 용도로 썼는지 정리했습니다.

언어

  • Java백엔드 서버 주요 언어 (JDK 17)

프레임워크

  • Spring BootREST API·보안·데이터 접근·비동기 처리 프레임워크 (3.2.12)

백엔드

데이터베이스

  • PostgreSQL메인 데이터베이스 (pgvector 확장으로 벡터 임베딩 저장)
  • FlywayDB 스키마 마이그레이션 자동화

인프라

  • Docker서버·DB 컨테이너화 및 docker-compose 배포
  • AWS S3화재 이벤트 이미지·카메라 스냅샷 저장

테스트

  • TestcontainersPostgreSQL 컨테이너 기반 E2E 테스트 격리 환경
  • JUnit 5단위·통합 테스트 프레임워크 (JaCoCo 커버리지)

DevOps

  • PrometheusJVM·Tomcat 메트릭 수집 및 Grafana 연동

핵심 포인트

  • AI Box가 보낸 화재 검출 영역을 이미지 면적 대비 1% 임계값으로 사전 필터링해 불필요한 VLM 추론 호출과 오탐을 원천 차단
  • 디바이스 동기화(heartbeat) API로 AI Box의 연결 상태·설정·카메라 처리 시각을 실시간 추적하고, 24시간 이상 stale 카메라를 자동 비활성화
  • HITL(Human-In-The-Loop) 검수 파이프라인으로 1차 탐지 결과를 사람이 재확인한 뒤 최종 이벤트로 승격, 오탐률 최소화
  • CSV 파일 대량 업로드로 클라이언트·디바이스·카메라 수백 건을 일괄 등록, 현장 구축 시간 단축
  • Testcontainers 기반 E2E 테스트로 인증~DB까지 전 구간을 PostgreSQL 독립 컨테이너에서 격리 검증, 로컬 DB 오염 방지

문제와 해결

문제운영 중 시연용 실시간 업로드 옵션이 켜진 채 방치되어 불필요한 이미지 업로드가 누적되고 서버 부하가 발생

해결매일 09:00(KST) 자동 감사 스케줄러가 실시간 업로드 ON 디바이스 목록을 Slack으로 알림하고, 시연 종료 체크리스트 문서를 제공해 재발 방지

문제다중 프록시 환경(ALB·내부 LB)에서 Tomcat access log의 %a가 내부 프록시 IP로 기록되어 장애 시 진원지 확정 지연

해결RemoteIpValve로 X-Forwarded-For 헤더를 처리하고, access log에 XFF 컬럼을 명시 추가해 진원지 IP를 최초(left-most) 값으로 확정하는 가이드 문서 작성

문제카메라 감지 토글(is_inference) off 시 AI Box sync gap 동안 불필요한 이벤트·알림이 생성될 수 있음

해결서버측 최종 게이트(shouldCreateEvent)로 off 카메라의 이벤트·푸시·Slack 알람을 차단하고, stale 자동 비활성화 배치·캐시 갱신에서도 is_inference=true 조건으로 게이트

레포지토리 정보

생성
2026년 7월 27일
최근 커밋
2026년 7월 27일
크기
2,087 KB
라이선스
없음

언어 구성

  • Java81.4%
  • HTML17.4%
  • PLpgSQL0.7%
  • Shell0.4%

이 문서는 2026년 7월 28일 에 자동 분석으로 생성되었습니다.