본문 바로가기
IT/HomeLabs

[HomeLabs] 기존 CCTV 시스템, Frigate AI NVR로 마이그레이션: 성공적인 전환 가이드

by 수누다 2026. 8. 6.
반응형

[홈랩] Frigate 마이그레이션으로 기존 CCTV 시스템 전환하기

기존 CCTV 시스템을 쓰다가 답답함을 느끼는 순간이 한 번쯤 오더라고요. 녹화는 되는데 검색이 불편하고, 알림은 많은데 정작 필요한 장면은 놓치고, 모바일 앱이나 웹 화면도 제약이 많고요. 저도 홈랩에서 자가 호스팅 CCTV를 오래 굴리다 보니 결국 Frigate 마이그레이션을 진지하게 검토하게 됐습니다. 특히 AI NVR(인공지능 네트워크 비디오 레코더) 방식으로 사람, 차량 같은 객체를 기준으로 이벤트를 다루고 싶었거든요. 이번 글에서는 기존 보안 카메라 환경을 Frigate로 옮길 때 어떤 순서로 접근하면 덜 헤매는지, 제가 직접 해보며 삽질했던 포인트까지 묶어서 정리해보겠습니다.

핵심부터 말씀드리면, Frigate 설정은 단순히 컨테이너 하나 띄우는 작업이 아닙니다. 카메라 스트림, RTSP(실시간 스트리밍 프로토콜), 저장소, 하드웨어 가속, 객체 감지기(detector), 그리고 기존 CCTV 운영 습관까지 같이 바꿔야 하거든요. 그래서 처음부터 전체 구조를 보고 들어가는 게 훨씬 낫습니다.

Frigate 마이그레이션을 위한 기존 CCTV와 AI NVR 아키텍처 이미지

기존 NVR, PoE 스위치, IP 카메라, Frigate 서버, 저장소가 어떻게 연결되는지 한눈에 보여주는 개요 이미지입니다.

1. 왜 기존 CCTV 시스템을 Frigate AI NVR로 바꾸게 되는가

쉽게 말해 Frigate는 영상 파일 중심으로 보던 CCTV를, 이벤트 중심으로 다시 정리해주는 도구에 가깝습니다. 기존 장비형 NVR(Network Video Recorder, 네트워크 비디오 녹화기)은 안정적이긴 한데, 검색과 확장성에서 아쉬운 경우가 많습니다. 반면 Frigate는 자가 호스팅 CCTV 환경에서 유연성이 크고, Home Assistant 같은 도구와도 궁합이 좋기로 많이 알려져 있죠.

제가 실제로 옮기려 했던 이유는 아래 네 가지였습니다.

  • 이벤트 검색성: 단순 시간대 탐색보다 객체 기준 탐색이 훨씬 편했습니다.
  • 운영 통합: 홈랩에 이미 있는 Docker, NAS, 리버스 프록시(reverse proxy, 역방향 프록시)와 붙이기 좋았습니다.
  • 알림 품질 개선: 움직임만 잡는 방식보다 실제 필요한 이벤트만 고르기 쉬웠습니다.
  • 벤더 종속 감소: 특정 카메라 제조사 앱에 덜 묶이게 되더라고요.

물론 무조건 교체가 답은 아닙니다. 기존 NVR이 매우 안정적이고, 가족이 사용하는 환경이라 변경 리스크가 크다면 병행 운영 기간을 반드시 두셔야 합니다. 여기서 중요한 포인트! Frigate 마이그레이션은 기능 업그레이드이면서 동시에 운영 모델 변경입니다.

2. Frigate 마이그레이션 전에 알아둘 핵심 개념

저도 처음엔 이게 뭔가 싶었는데, 개념만 정리되면 훨씬 수월합니다.

2-1. Frigate는 무엇을 담당하나

Frigate는 오픈소스 기반의 NVR 소프트웨어로 많이 사용됩니다. 영상 스트림을 받아 녹화하고, 감지 결과를 이벤트 단위로 관리합니다. 여기서 중요한 건 Frigate가 카메라 자체를 제어한다기보다, 카메라가 보내는 스트림을 잘 받아서 분석하고 저장하는 쪽에 가깝다는 점입니다.

2-2. RTSP, detect stream, record stream

보안 카메라를 붙일 때 많이 헷갈리는 부분이 이겁니다. 하나의 카메라에서도 메인 스트림과 서브 스트림이 따로 나오는 경우가 많거든요.

  • record stream: 녹화 품질 위주 스트림입니다. 해상도가 높고 저장용에 적합합니다.
  • detect stream: 객체 감지용 스트림입니다. 보통 더 가볍고, 시스템 부담을 줄이는 데 유리합니다.
  • go2rtc: 카메라 스트림 중계나 재가공에 자주 쓰이는 구성 요소입니다. 환경에 따라 활용도가 높습니다.

제가 직접 해보니 detect와 record를 같은 고해상도 스트림으로 밀어붙이면 CPU가 금방 올라가더라고요. 처음부터 역할을 분리하는 게 좋습니다.

2-3. 객체 감지와 하드웨어 가속

AI NVR의 핵심은 객체 감지입니다. 다만 모든 처리를 CPU로만 해결하려고 하면 금방 한계가 옵니다. 그래서 운영 환경에 따라 GPU 가속이나 전용 감지기(detector)를 붙이는 구성을 많이 검토합니다. 이 부분은 서버 사양과 운영 목적에 따라 차이가 커서, 무리해서 한 번에 완성형으로 가기보다 카메라 수와 해상도 기준으로 단계적으로 확장하는 게 안전했습니다.

3. 마이그레이션 설계: 기존 CCTV를 바로 끄지 말아야 하는 이유

여기서 많이들 실수합니다. 기존 CCTV 장비를 먼저 내리고 Frigate 설정부터 맞추려 하면, 문제 생겼을 때 되돌아갈 길이 없어집니다. 저도 예전에 비슷하게 접근했다가 야간 녹화 확인이 꼬여서 식은땀 흘린 적이 있거든요.

제가 권장하는 순서는 이렇습니다.

  1. 기존 NVR은 그대로 유지합니다.
  2. 카메라 한두 대만 Frigate에 병행 연결합니다.
  3. 녹화, 감지, 저장 정책을 먼저 검증합니다.
  4. 문제가 없으면 카메라를 순차적으로 옮깁니다.
  5. 최종적으로 운영 화면과 알림 경로를 정리합니다.

병행 운영 기간에는 특히 아래 항목을 꼭 체크하세요.

점검 항목 기존 CCTV Frigate 전환 시 체크 포인트
카메라 연결 방식 벤더 앱 또는 NVR 종속 RTSP 주소 확인, 인증 방식 점검
녹화 보관 장비 내부 디스크 중심 저장 경로, 보존 기간, 디스크 사용량 확인
이벤트 탐색 타임라인 중심 객체 기반 이벤트 흐름 검증
성능 전용 장비 최적화 CPU, 메모리, 디코딩 부하 확인
장애 대응 단일 장비 재부팅 위주 컨테이너 로그, 스트림 재연결, 저장소 상태 확인

4. 실전 구현: Docker 기준 Frigate 설정 흐름

이제 실전입니다. 아래 예시는 개념을 설명하기 위한 기본 형태입니다. 실제 환경에서는 장치 매핑, 저장소 경로, 하드웨어 가속 설정이 달라질 수 있습니다. 저는 처음엔 최소 구성으로 올리고, 그 다음 카메라를 하나씩 붙이는 방식으로 갔습니다. 이게 진짜 편하더라고요.

4-1. 디렉터리 구조 준비

mkdir -p ./frigate/config
mkdir -p ./frigate/media
mkdir -p ./frigate/db

구성을 분리해두면 나중에 백업이나 롤백이 훨씬 편합니다. 특히 설정 파일과 미디어 저장 경로는 처음부터 분리해두세요.

4-2. 기본 Compose 예시

services:
  frigate:
    container_name: frigate
    image: ghcr.io/blakeblackshear/frigate:stable
    restart: unless-stopped
    privileged: true
    shm_size: "512mb"
    ports:
      - "5000:5000"
      - "8554:8554"
    volumes:
      - ./frigate/config:/config
      - ./frigate/media:/media/frigate
      - ./frigate/db:/db
      - /etc/localtime:/etc/localtime:ro
    environment:
      FRIGATE_RTSP_PASSWORD: "strong-password"

여기서 shm_size는 영상 처리 시 꽤 중요할 수 있습니다. 너무 작으면 예상 못 한 문제가 생기기도 합니다. 그리고 운영 환경에 따라 privileged 사용 여부는 보안 정책에 맞춰 검토하셔야 합니다.

4-3. 기본 설정 파일 예시

mqtt:
  enabled: false

ffmpeg:
  inputs: []

cameras:
  front_door:
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://user:{FRIGATE_RTSP_PASSWORD}@192.168.10.20:554/stream1
          roles:
            - record
        - path: rtsp://user:{FRIGATE_RTSP_PASSWORD}@192.168.10.20:554/stream2
          roles:
            - detect
    detect:
      enabled: true
    record:
      enabled: true
    snapshots:
      enabled: true

처음엔 카메라 이름을 물리적 위치 기준으로 짓는 걸 추천합니다. 예를 들면 front_door, parking, hallway 같은 식이죠. 나중에 알림 규칙 짤 때 훨씬 안 헷갈립니다.

Frigate 설정에서 detect와 record 스트림 분리를 설명하는 보안 카메라 구성 이미지

record 스트림과 detect 스트림을 분리해 설정하는 예시를 시각적으로 이해할 수 있는 이미지입니다.

4-4. 단계별 적용 절차

  1. 카메라 한 대의 RTSP 주소를 먼저 확인합니다.
  2. 서브 스트림이 있다면 detect용으로 우선 연결합니다.
  3. Frigate 웹 UI에서 스트림이 정상 수신되는지 확인합니다.
  4. 그 다음 record 스트림을 붙여 녹화가 잘 되는지 봅니다.
  5. 이벤트가 과하게 잡히면 감지 영역(zone)이나 마스크(mask)를 조정합니다.
  6. 카메라별로 설정이 안정되면 다음 카메라로 넘어갑니다.

이 순서를 지키면 문제 발생 지점을 좁히기 쉽습니다. 반대로 카메라 여러 대를 한 번에 붙이면 어느 부분이 병목인지 파악하기가 어렵습니다.

5. Frigate 설정에서 자주 막히는 부분과 트러블슈팅

이 섹션은 진짜 경험담입니다. 보기엔 단순한데 실제로는 여기서 시간을 많이 씁니다. 삽질 좀 했습니다 ㅎㅎ

5-1. ⚠️ RTSP는 열리는데 화면이 불안정한 경우

증상은 다양합니다. 영상이 잠깐 나오다가 멈추거나, 특정 카메라만 끊기거나, 감지 이벤트는 있는데 녹화가 비는 경우도 있죠.

  • 원인 후보 1: 카메라가 내보내는 코덱(codec, 영상 압축 방식)과 디코딩 경로가 맞지 않는 경우
  • 원인 후보 2: 메인 스트림만 사용해서 서버 부하가 과한 경우
  • 원인 후보 3: 네트워크 품질이나 PoE 스위치 상태 문제

제가 직접 해보니 이럴 땐 무조건 Frigate 문제라고 보면 안 되더라고요. 카메라 웹 관리 화면에서 스트림 프로파일을 먼저 점검하고, 해상도와 프레임레이트(frame rate, 초당 프레임 수)를 보수적으로 잡는 게 효과적이었습니다.

5-2. ⚠️ 감지가 너무 많이 뜨는 경우

바람에 흔들리는 나뭇잎, 차량 라이트, 비 오는 날 반사 때문에 이벤트가 쏟아질 수 있습니다. 이건 AI NVR이라고 해서 자동으로 완벽해지진 않더라고요.

  • 카메라 각도 조정: 생각보다 중요합니다.
  • 감지 영역 분리: 현관, 주차 구역처럼 의미 있는 구역을 나눕니다.
  • 불필요 영역 마스킹: 도로, 나무, 하늘을 제외하면 훨씬 깔끔해집니다.

혹시 이런 경험 있으신가요? 분명 사람 알림만 받고 싶은데 새벽마다 그림자 알림이 울리는 상황이요. 이건 설정만이 아니라 설치 위치와 화각 문제인 경우도 많습니다.

5-3. ⚠️ 저장소가 빨리 차는 경우

Frigate 마이그레이션 후 가장 체감되는 운영 이슈 중 하나가 저장소입니다. 기존 CCTV 장비는 내부 정책이 숨겨져 있어서 덜 의식하게 되는데, 자가 호스팅 CCTV는 내가 직접 책임져야 하거든요.

record:
  enabled: true
  retain:
    days: 7
  events:
    retain:
      default: 14

예시처럼 보존 기간을 분리해두면 운영이 편합니다. 연속 녹화는 짧게, 이벤트는 조금 더 길게 가져가는 식이 현실적이더라고요. 단, 정확한 값은 카메라 수와 해상도에 따라 달라서 무조건 정답은 없습니다.

5-4. ⚠️ 기존 CCTV와 사용자 경험이 달라서 혼란스러운 경우

이건 기술 이슈 같지 않지만 실제론 굉장히 큽니다. 가족이나 동료가 기존 앱 사용에 익숙하면, Frigate 웹 UI나 새 알림 흐름이 오히려 불편하게 느껴질 수 있거든요. 그래서 저는 완전 전환 전에 누가 어떤 화면으로 어떤 작업을 하는지부터 다시 정리했습니다. 이걸 안 하면 기술적으로는 성공인데 운영은 실패합니다.

6. 검증 방법: 성공적인 Frigate 마이그레이션인지 어떻게 판단할까

전환이 끝났다고 바로 기존 시스템을 철거하면 안 됩니다. 최소 며칠은 병행하면서 아래 기준으로 검증해보세요.

  1. 실시간 보기: 주요 카메라가 지연 없이 보이는가
  2. 이벤트 품질: 필요한 사람/차량 이벤트를 놓치지 않는가
  3. 녹화 신뢰성: 특정 시간대 영상 누락이 없는가
  4. 저장소 안정성: 디스크 사용량이 예상 범위 내인가
  5. 운영 편의성: 검색, 다운로드, 확인 흐름이 이전보다 나아졌는가

저는 특히 야간, 우천 시, 역광 시간대를 따로 봤습니다. 낮에는 잘 되는데 밤에만 오탐이 늘거나 영상이 지저분해지는 경우가 있거든요. 실제로 써보니까 낮 테스트만으로는 절대 안심하면 안 되겠더라고요.

Frigate 마이그레이션 결과를 확인하는 AI NVR 대시보드 이미지

객체 이벤트 목록, 타임라인, 카메라 미리보기를 통해 전환 결과를 검증하는 모습을 보여주는 이미지입니다.

검증 항목 확인 질문 통과 기준 예시
이벤트 정확도 중요 이벤트가 빠지지 않았는가 현관/주차 구역 이벤트 확인 가능
오탐 비율 의미 없는 알림이 과도하지 않은가 조정 후 체감상 감소
리소스 사용량 서버가 과부하 없이 유지되는가 재생/감지 중에도 시스템 안정
복구 용이성 스트림 장애 시 원인 파악이 쉬운가 로그와 설정 기준으로 추적 가능

드디어 됐다! 싶은 시점은 단순히 화면이 뜰 때가 아니라, 필요한 순간에 원하는 장면을 안정적으로 찾을 수 있을 때입니다.

7. 기존 CCTV 대비 Frigate 전환의 장단점 정리

아무리 좋아 보여도 단점은 분명히 있습니다. 멘토처럼 솔직하게 말씀드리면, Frigate는 편한 만큼 책임도 따라옵니다.

  • 장점: 유연한 구성, 이벤트 중심 탐색, 자가 호스팅 CCTV와의 높은 궁합
  • 장점: 홈랩 자동화와 연계하기 좋음
  • 단점: 초기 설정 난이도 존재
  • 단점: 저장소와 성능 튜닝을 직접 관리해야 함
  • 단점: 카메라별 RTSP 품질 차이로 삽질 가능성 높음

결국 선택 기준은 명확합니다. 내가 운영을 직접 챙길 의지가 있는가입니다. 벤더 일체형이 주는 편의성 대신, Frigate는 더 세밀한 제어권을 줍니다.

8. 마무리: Frigate 설정은 설치보다 운영이 더 중요합니다

이번 글에서는 기존 CCTV 시스템을 Frigate 마이그레이션하는 흐름을 큰 그림부터 실전 구성, 검증 포인트까지 정리해봤습니다. 제가 직접 해보니 제일 중요한 건 화려한 기능보다도 안정적인 스트림 확보, 보존 정책, 그리고 단계적 전환이었습니다. 사실 처음엔 컨테이너만 띄우면 끝날 줄 알았는데, 막상 해보면 카메라별 특성이 다르고 네트워크 상태도 달라서 생각보다 손이 많이 갑니다. 근데 그 과정을 한번 넘기면 운영 만족도가 꽤 올라가더라고요.

특히 AI NVR, 보안 카메라, 자가 호스팅 CCTV 조합에 관심 있으신 분이라면, 무작정 전체 교체부터 하지 마시고 작은 파일럿부터 돌려보세요. 그게 시간을 가장 아끼는 길입니다.

기존 CCTV와 Frigate 마이그레이션 전후 비교를 보여주는 자가 호스팅 CCTV 이미지

전환 전후의 검색 방식, 운영 편의성, 확장성 차이를 직관적으로 비교해 보여주는 요약 이미지입니다.

9. 정리 FAQ

Frigate 마이그레이션은 어떤 환경에 특히 잘 맞나요?

직접 서버를 운영하고, Docker나 NAS 기반 환경에 익숙한 분들께 잘 맞습니다. 홈랩 사용자라면 만족도가 높을 가능성이 큽니다.

기존 NVR을 완전히 버려도 되나요?

처음부터는 권하지 않습니다. 일정 기간 병행 운영하면서 녹화 누락, 이벤트 품질, 사용자 경험을 꼭 비교해보세요.

Frigate 설정에서 가장 먼저 볼 것은 뭔가요?

카메라 RTSP 스트림 품질, detect/record 역할 분리, 저장소 보존 정책 이 세 가지입니다.

다음 글에서는 Frigate 설정을 조금 더 깊게 들어가서, 감지 영역(zone) 설계와 홈 자동화 연동 포인트를 따로 다뤄볼 예정입니다. 이전 글에서 다뤘던 홈랩 네트워크 분리나 리버스 프록시 구성과도 연결해서 보시면 훨씬 이해가 잘 되실 겁니다.

반응형