3줄 요약
- 핵심: 로컬 Frigate NVR 설치 가이드: 클라우드 CCTV 없이 홈서버로 구축하기의 설치/구성 흐름을 한 번에 따라갈 수 있도록 단계와 체크포인트를 정리했습니다.
- 실전: 실패가 잦은 구간(권한, 네트워크, 버전/의존성)을 먼저 점검해 재시도 비용을 줄입니다.
- 운영: 적용 후 검증 기준(로그·접속·동작 확인)을 남겨 유지보수 난이도를 낮춥니다.
트러블슈팅
- 설정 적용이 안 되면 브라우저 캐시/서비스 재시작 후 동일 증상을 로그 기준으로 재현하세요.
- 외부 접속 문제가 있으면 DNS/포트포워딩/리버스프록시 순서로 분리 진단하세요.
- 업데이트 이후 오류는 직전 버전·설정 백업 기준으로 롤백 경로를 먼저 확보하세요.
결론 + 다음 단계
이 글의 절차를 기준으로 기본 동작을 안정화한 뒤, 모니터링/백업/자동복구를 추가하면 장기 운영 품질이 크게 올라갑니다.
내부 링크
이 글은 클라우드 CCTV 없이 Frigate NVR를 로컬 홈서버로 구축하는 과정을 정리한다. 핵심은 설치 자체보다 카메라 스트림 안정성, 저장/백업, 그리고 오탐을 줄이기 위한 기본 설정을 먼저 잡는 것이다.
이 글의 목표(성공 기준)
- Frigate가 정상 기동하고 웹 UI에서 카메라 영상이 보인다.
- 녹화/이벤트 저장이 정상 동작하고, 저장 경로/보존 정책이 정리된다.
- 문제 발생 시(스트림 끊김/CPU 부하/오탐) 점검 순서가 정리되어 있다.
못믿는 클라우드 CCTV 대신 로컬 Frigate NVR 설치하기
못믿는 클라우드 CCTV 대신 로컬 Frigate NVR 설치하기를 직접 실전으로 진행했다. 내 금쪽같은 미니 PC와 Proxmox 조합으로 저전력 홈서버의 신세계를 맛본 이후(지난 글: Proxmox 설치 가이드), 이 홈서버는 한시도 쉴 틈이 없다. 워드프레스 돌리랴, n8n으로 자동화 짜랴 바쁜 이 녀석에게 이번에는 아주 막중한 임무를 하나 더 맡겼다. 바로 우리 집 마당의 길고양이부터 택배 기사님까지 실시간으로 감시… 아니, ‘케어’해주는 AI 보안관, Frigate NVR이다.

사실 시중에 파는 홈캠은 널리고 널렸다. 하지만 우리 ‘서버 집사’들은 그런 거 안 쓴다. 왜냐고? 내 사생활이 담긴 영상이 중국이나 미국 어딘가의 클라우드 서버로 날아가는 꼴은 죽어도 못 보니까. 그래서 결심했다. “내 집 데이터는 내 집(N100) 밖을 나가지 않는다!”는 신념으로 일궈낸 Frigate 설치 수난기, 지금부터 기록해 보려 한다.
1. 프롤로그: 지갑은 가볍게, 보안은 묵직하게
홈서버를 운영하다 보면 꼭 마주하게 되는 벽이 있다. 바로 “이거 아내(혹은 가족)한테 어떻게 허락받지?”라는 생존의 문제다. 이번에 나는 ‘우리 집 보안’이라는 아주 훌륭한 명분을 내세웠다. 월 구독료 나가는 클라우드 카메라 대신, 한 번 세팅하면 평생 무료인 AI 카메라를 만들겠다고 호기롭게 선언했다.
단순히 녹화만 되는 NVR이라면 시작도 안 했을 것이다. 심지어 나는 이미 NVR도 가지고 있다. 하지만 나의 NVR은 그리 똑똑하지 않다. 인식 오류도 종종 나고 인식할 수 있는 객체도 제한적이다. 기존 NVR이 “이건 사람이야”, “이건 자동차야” 정도를 판단할 수 있었다면 오늘 소개할 Frigate는 인공지능이 영상을 분석해서 “이건 누구야”, “저 차의 번호판은 123가4567이야” 라고 판단해주는 한 차원 더 똑똑한 녀석이다. 특히 내가 Frigate를 선택한 결정적인 이유는 바로 ‘얼굴 인식(Face Recognition)’ 기능이다. 단순히 ‘사람이 있다’를 넘어 ‘누가 왔는지’까지 알아내는 시스템, 벌써 활용 시나리오가 머릿속에 풍부하게 떠오른다.
2. 하드웨어의 선택: N100, 너의 근육(iGPU)을 보여줘
내가 애용하는 Beelink S12 Pro는 작지만 강하다. 특히 Intel N100 프로세서에 들어있는 내장 그래픽(iGPU)은 영상 처리에 특화된 ‘가성비 깡패’다. 하지만 Frigate는 자원을 무지막지하게 잡아먹는 괴물이다.
만약 하드웨어 가속 없이 CPU로만 영상을 분석하려 든다면, N100은 설치 5분 만에 비명을 지르며 서버실(보통 구석진 곳)을 뜨겁게 달굴 것이다. 그래서, 우리는 이 녀석의 iGPU를 십분 활용해야 한다. CPU는 명령만 내리고, 실제 영상 분석은 그래픽 유닛이 처리하게 만드는 ‘지능적인 노예 부리기’가 핵심이다.
3. 정보의 바다에서 보물찾기: 설치는 실전이다
막상 Frigate를 Proxmox LXC에 올리려니 막막함이 앞섰다. 국내 블로그나 커뮤니티에는 관련 자료가 전멸하다시피 했기 때문이다. 결국 영문 자료로 눈을 돌릴 수밖에 없었다.
다행히 MostlyChris의 가이드와 유튜브의 관련 튜토리얼이 큰 도움이 되었다. 처음 봤을 때는 “이걸 내가 할 수 있을까?” 싶을 정도로 복잡해 보였지만, 참고 자료들을 띄워놓고 한 단계씩 차근차근 따라 하니 의외로 술술 풀렸다. 혹시 나처럼 국내 자료 부족으로 고통받을 동료 집사들을 위해, 내가 직접 삽질하며 성공한 기록을 이곳에 정리해 본다.
4. Proxmox LXC: 자원을 아끼는 미니멀리즘
보통 도커(Docker)로 많이 설치하지만, 자원 아끼는 데 진심인 나는 LXC 컨테이너를 선택했다. VM보다 훨씬 가볍고, N100의 자원을 끝까지 쥐어짤 수 있으니까. 작업은 늘 그렇듯 root 계정으로 진행한다. 혹시 root 계정이 아니라면 명령어 앞에 sudo가 필요할 sudo 있다.
일단 Proxmox에서 LXC 컨테이너를 생성하는 부분까지는 위에서 언급한 가이드에 잘 설명되어 있기 때문에 그대로 따라가면 된다. 나는 가이드에 없는 추가 내용 위주로 다루어 보려고 한다.
핵심: iGPU 패스스루 (GPU 사탕 쥐여주기)
이 내용은 내가 참고한 가이드에 없는 내용인데 Google Gemini AI와 트러블 슈팅하며 알게된 팁이다. LXC 컨테이너는 기본적으로 호스트의 하드웨어를 직접 볼 수 없다. 그래서 Proxmox 호스트 터미널에서 설정 파일(/etc/pve/lxc/ID.conf)을 열어 아래 마법의 주문을 넣어줘야 한다. 이게 없어도 작동은 되긴 하지만 frigate LXC가 GPU 사용량 등을 모니터링 할 수 없게 되므로 윗 단에서 이걸 열어주는 작업을 해줘야 한다.
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
이걸 안 하면 Frigate는 ‘눈 뜬 장님’이 된다. 설정 후 컨테이너 안에서 ls /dev/dri를 쳤을 때 renderD128이 보인다면 일단 첫 번째 큰 고개는 넘은 셈이다.
5. 본격 설치: Frigate라는 생명체 깨우기
컨테이너 내부에서 Docker를 올리고 docker-compose.yml을 작성한다. N100 사용자라면 하드웨어 가속 프리셋을 반드시 설정해야 한다. 혹시 beelink의 mini pc가 아닌 다른 제품을 사용한다면 device 설정값이 다를 수 있으니 모델별로 정보를 따로 찾아봐야 한다.
version: "3.9"
services:
frigate:
container_name: frigate
privileged: true
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:stable
volumes:
- /root/frigate/config:/config
- /root/frigate/storage:/media/frigate
devices:
- /dev/dri/renderD128 # iGPU 패스스루 핵심
ports:
- "8971:8971"
- "8554:8554" # RTSP feeds
작성이 끝났으면 아래 커맨드를 입력해서 friage를 설치한다. 설치 과정에서 최초 웹 액세스 시 필요한 password가 나오는데 이걸 꼭 메모해둬야 한다. 나는 이거 처음에 놓쳐서 재설치했다 .
docker compose up -d
설치가 완료되고 나면 웹 인터페이스에 접속할 수 있게 된다. 주소는 LXC의 “https://IP주소:8971” 이거다. 그리고 초기 id는 admin, 비번은 아까 메모한걸 입력하고 로그인 하자마자 내가 기억할 수 있는걸로 바꿔준다.

웹에 들어가면 그 다음부터는 설정-Configuration Editor로 가서 본격적인 설정을 시작한다. 중요한 팁 한가지. 고해상도 녹화용 스트림과 저해상도 분석용 스트림을 구분해서 넣는 것이 N100의 수명을 늘리는 지름길이다.
6. 외부 연결: 시놀로지 NAS의 철통 방어
내 블로그 독자라면 알겠지만, 나는 Nginx Proxy Manager 대신 시놀로지 역방향 프록시를 사용한다.
- 시놀로지 제어판 > 역방향 프록시에서
https://cctv.도메인.com도메인을 생성한다. - 대상 주소는 N100 서버 IP와 8971 포트다.
- 사용자 지정 머리글 탭에서 WebSocket 설정을 추가한다. 이 설정을 빼먹으면 밖에서 영상을 볼 때 무한 로딩의 늪에 빠지게 된다.
혹시 클라우드플레어나 Nginx를 사용한다 해도 외부 접속은 꼭 설정해두기 바란다. 내부 망에 https를 설치하지 않은 상황이라면 내부접속이 매우 불안정하기 때문이다.
7. 설치를 마치며: AI 보안관의 탄생
이제 기본적인 설치와 하드웨어 가속 설정이 끝났다. 대시보드를 열어보니 카메라 화면 속 사람이 움직일 때마다 빨간 상자가 따라다닌다. N100의 CPU 점유율은 GPU 가속 덕분에 15% 내외에서 평온을 유지 중이다.
하지만 여기서 만족할 ‘서버 집사’가 아니다. 내가 Frigate를 설치한 진짜 이유, 바로 얼굴 인식이 남아있다. 단순히 “사람이 감지되었습니다”라는 알림을 넘어, “와이프가 집에 도착했습니다” 라는 메세지를 받거나 짐을 들고 문앞에 서있으면 자동으로 도어락을 잠금 해제 해주는 수준 높은 자동화를 구현하고싶기 때문이다.
8. 예고: 다음은 ‘얼굴 인식’이다
이번 글에서는 험난한 설치 과정을 다뤘다면, 다음 글에서는 본격적으로 Frigate의 꽃이라 할 수 있는 얼굴 인식 설정을 포함해 못믿는 클라우드 CCTV 대신 로컬 Frigate NVR 설치하기의 완성 단계를 이어서 얼굴 인식 설정 방법을 심도 있게 파헤쳐볼 예정이다. 집을 지키는 가장 스마트한 방법, 우리 집 N100은 이제 당신의 얼굴을 기억할 준비를 마쳤다.
함께 보면 좋은 글
연관 글을 같이 보면 설정과 운영 흐름을 더 빠르게 익힐 수 있습니다.