13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] 홈 서버

  • [HomeLabs] Frigate NVR 도입 사례: 홈랩 보안 카메라 설계 체크포인트

    [HomeLabs] Frigate NVR 도입 사례: 홈랩 보안 카메라 설계 체크포인트

    Frigate NVR 도입 사례: 홈랩 보안 카메라 설계 체크포인트

    Frigate NVR를 검토하게 된 이유는 단순했습니다. 카메라를 몇 대만 붙여도 녹화는 되는데, 막상 필요한 장면을 찾는 시간이 너무 오래 걸리더라고요. 저도 처음엔 RTSP만 받아 저장하면 끝일 줄 알았는데, 실제 운영에선 이벤트 기준으로 좁혀보는 기능이 없으면 사람이 영상을 관리하는 시간이 훨씬 더 많이 들었습니다.

    그래서 본격적으로 본 게 Frigate NVR였습니다. 오픈소스라는 점도 매력적이지만, 더 중요한 건 객체 감지 이벤트를 기준으로 녹화, 검색, 자동화를 한 흐름으로 묶기 쉽다는 점이었습니다. 다만 이건 설치형 앱보다는 운영형 시스템에 가깝습니다. 잘 맞는 환경에 넣으면 진짜 편한데, 안 맞는 환경에 억지로 올리면 전용 NVR보다 더 손이 갑니다.

    이번 글은 기능 소개보다 도입 판단 기준에 초점을 맞췄습니다. 홈랩에서 제가 실제로 먼저 보는 항목, 어디서 병목이 생기는지, 어떤 구성은 오래 가고 어떤 구성은 금방 흔들리는지를 경험 중심으로 정리했습니다. Home Assistant 자동화나 홈랩 네트워크 설계를 함께 보고 계신다면, 이 글을 기준 글로 삼아 연결해서 읽어보셔도 좋습니다.

    Frigate NVR 기반 홈랩 보안 카메라 전체 아키텍처 이미지

    카메라, Frigate, MQTT, Home Assistant, 저장소가 어떻게 연결되는지 한눈에 보여주는 구성도입니다.

    1. 왜 Frigate NVR를 보게 되었나

    전용 NVR은 장점이 분명합니다. 설치가 빠르고 제조사 앱이 있고, 웬만하면 바로 녹화가 되니까요. 그런데 홈랩을 굴리다 보면 아쉬움이 생깁니다. 특정 브랜드에 종속되거나, 이벤트를 외부 시스템으로 자연스럽게 내보내기 어렵거나, 저장 정책이 내 운영 방식과 딱 안 맞는 경우가 생각보다 많습니다.

    Frigate NVR를 보게 되는 분들은 보통 비슷한 지점에서 고민합니다. 영상 자체보다 영상에서 발생한 사건을 다루고 싶을 때죠. 사람이 지나갔는지, 차량이 들어왔는지, 특정 시간대에만 알림을 줄 건지, Home Assistant에서 조명이나 사이렌과 연결할 건지 같은 요구가 붙는 순간 전용 장비의 편의성보다 데이터 흐름의 유연성이 더 중요해집니다. 저도 딱 그 지점에서 Frigate가 훨씬 현실적으로 느껴졌습니다.

    반대로 영상 보관만 안정적으로 되면 충분한 환경이라면 얘기가 달라집니다. 카메라 2~4대 정도에서 문제가 생기면 타임라인만 훑어보는 수준이라면 전용 NVR이 더 잘 맞을 수 있습니다. Frigate의 진짜 가치는 AI라는 단어 자체보다 운영 자동화와 검색 비용 절감에 있습니다. 이 축이 중요하지 않으면, 도입 난이도 대비 이익이 크지 않을 수 있습니다.

    2. Frigate NVR 핵심 개념 쉽게 정리

    처음 보면 기능이 많아 보여도, 실제로는 세 가지 흐름만 이해하면 됩니다. 입력 영상, 감지 파이프라인, 저장과 이벤트 소비 경로입니다. 이걸 한 번에 보면 복잡한데, 나눠 보면 의외로 단순합니다.

    • 입력 영상: 카메라가 내보내는 메인 스트림과 서브 스트림입니다. 코덱, 해상도, 프레임레이트가 전체 시스템 성격을 거의 정합니다.
    • 감지 파이프라인: Frigate가 FFmpeg로 스트림을 읽고, 감지용 프레임을 detector에 넘기고, 추적 결과를 이벤트로 묶는 흐름입니다.
    • 이벤트 소비 경로: 녹화 저장, 스냅샷 생성, MQTT 발행, Home Assistant 자동화가 여기에 걸립니다.

    실무적으로 중요한 건 Frigate가 얼마나 똑똑한가보다 어떤 입력을 어떤 비용으로 처리하게 만들었는가입니다. 저는 보통 카메라 설정 50, 저장소 30, Frigate 설정 20 정도 감각으로 봅니다. 숫자는 비유지만, 체감상 병목은 Frigate 바깥에서 먼저 시작되는 경우가 많았습니다. 특히 서브 스트림 없이 메인 스트림 하나로 detect와 record를 같이 처리하는 구성은 처음엔 쉬워 보여도 운영 피로도가 빨리 올라가더라고요.

    어떤 환경에 특히 잘 맞나

    시나리오 Frigate 적합도 실무 판단
    Home Assistant 자동화 중심 홈랩 높음 이벤트를 MQTT, 대시보드, 알림, 조명 자동화로 자연스럽게 연결하기 좋습니다.
    그냥 녹화만 필요한 단순 환경 중간 이하 검색성과 자동화가 핵심 요구가 아니라면 전용 NVR이 구축과 운영 모두 단순합니다.
    여러 제조사 카메라 혼합 운영 높음 RTSP 기준으로 묶기 쉬워 벤더 종속을 줄이기 좋습니다.
    저전력 장비 한 대에 감지, 녹화, 자동화 몰아넣기 주의 CPU보다 디코딩, 디스크 I/O, 네트워크 품질, 하드웨어 가속 지원에서 먼저 무너질 가능성이 큽니다.
    보안 장비처럼 손 덜 대고 오래 굴리고 싶은 환경 낮음 업데이트, 로그 확인, 저장 정책 조정이 계속 필요할 수 있어 운영형 시스템에 가깝습니다.

    3. Frigate NVR 설계에서 먼저 볼 것

    처음 붙일 때 CPU와 메모리부터 보는 경우가 많은데, 제 경험상 우선순위는 조금 다릅니다. 먼저 봐야 할 건 스트림 분리 가능 여부, 카메라 코덱 설정, 저장소 분리, 네트워크 안정성입니다. 여기서 한 번 잘못 잡히면 Frigate 설정을 아무리 손봐도 운영이 쉽게 안정되지 않습니다.

    1. 카메라가 메인 스트림과 서브 스트림을 따로 제공하는지 확인합니다.
    2. 감지는 서브 스트림, 녹화는 메인 스트림으로 분리할 수 있는지 먼저 봅니다.
    3. 카메라가 H.264처럼 브라우저와 환경에서 다루기 쉬운 코덱을 안정적으로 내보내는지 확인합니다.
    4. 저장소를 OS 디스크와 분리할지, 최소한 미디어 경로를 분리할지 결정합니다.
    5. Home Assistant 연동이 필요하면 MQTT 브로커 위치를 먼저 정합니다.
    6. 원격 접근은 공개 포트 직결보다 VPN 또는 신뢰된 역방향 프록시 뒤에 둘지 결정합니다.

    여기서 자주 나오는 실수가 두 가지 있습니다. 첫째, 감지에 고해상도 메인 스트림을 그대로 넣는 경우입니다. 이렇게 하면 detect 정확도가 무조건 좋아지는 게 아니라, 디코딩 비용과 지연만 커지는 경우가 더 많습니다. 둘째, 녹화까지 서브 스트림으로 처리하는 경우입니다. 이벤트는 잘 잡혀도 나중에 확인할 때 디테일이 부족해 아쉬움이 크게 남습니다.

    결국 detect는 처리비용, record는 증거품질이라는 기준으로 따로 생각해야 합니다. 저도 예전에 현관 카메라 하나에 메인 스트림만 걸고 detect와 record를 동시에 맡겼다가 밤에 크게 돌아간 적이 있습니다. 낮에는 얼핏 괜찮았는데 밤이 되니까 UI 반응이 느려지고 감지 시점도 뒤로 밀리더라고요. 한참 Frigate 설정만 만졌는데, 실제 원인은 카메라 메인 스트림이 과했고 저장 디스크까지 같이 바빴던 거였습니다.

    4. 실전 구현: Docker Compose로 Frigate 띄우기

    홈랩에서는 컨테이너 기반 운영이 가장 다루기 편한 편입니다. 다만 compose 파일은 실행만 되는 예시보다, 왜 이렇게 두는지 설명되는 예시가 훨씬 중요합니다. 아래 예시는 현재 Frigate 공식 문서 흐름에 맞춘 최소 구성 기준으로 정리했습니다.

    1) 디렉터리 준비

    sudo mkdir -p /opt/frigate/config
    sudo mkdir -p /srv/frigate/media
    sudo mkdir -p /srv/frigate/db
    
    # 권한 점검: 컨테이너가 읽고 쓸 수 있는지 먼저 확인
    sudo chown -R $USER:$USER /opt/frigate /srv/frigate
    ls -ld /opt/frigate/config /srv/frigate/media /srv/frigate/db
    

    저는 설정 경로와 미디어 경로를 분리합니다. 백업 정책이 다르기 때문입니다. 설정과 DB는 보존 가치가 높고 용량은 작습니다. 반면 이벤트 클립과 녹화 파일은 금방 커집니다. 이 둘을 같은 디스크, 같은 백업 정책으로 묶어두면 나중에 운영이 꽤 지저분해집니다.

    2) docker-compose.yml 예시

    services:
      frigate:
        container_name: frigate
        image: ghcr.io/blakeblackshear/frigate:stable
        restart: unless-stopped
        stop_grace_period: 30s
        privileged: true
        shm_size: "512mb"
        ports:
          - "8971:8971"
          - "8554:8554"
          - "8555:8555/tcp"
          - "8555:8555/udp"
        environment:
          FRIGATE_RTSP_PASSWORD: "change-me"
        volumes:
          - /etc/localtime:/etc/localtime:ro
          - /opt/frigate/config:/config
          - /srv/frigate/media:/media/frigate
          - type: tmpfs
            target: /tmp/cache
            tmpfs:
              size: 1000000000
    

    shm_size를 대충 두면 디코딩과 버퍼 처리에서 애매한 문제가 납니다. UI만 보면 감지 문제처럼 보일 수 있는데, 실제로는 프레임 버퍼가 부족한 경우도 많습니다. tmpfs를 쓰는 이유도 비슷합니다. 공식 문서 기준으로도 녹화 세그먼트 캐시는 메모리 기반 /tmp/cache를 권장합니다. 물론 메모리 여유가 없는 장비라면 여기 숫자를 무리해서 크게 잡을 필요는 없습니다.

    하나 더 짚고 갈 부분이 있습니다. 최근 Frigate는 인증 UI와 API 접근에 8971 포트를 쓰는 구성을 기본으로 안내합니다. 5000 포트는 내부 네트워크용 비인증 접근으로 쓰는 흐름이라, 외부 노출 기준으로는 8971 쪽을 보는 게 더 안전합니다.

    Frigate NVR에서 메인 스트림과 서브 스트림을 분리한 설정 이미지

    메인 스트림은 녹화, 서브 스트림은 객체 감지에 쓰는 구성을 시각화한 이미지입니다.

    3) frigate 설정 파일 예시

    mqtt:
      enabled: true
      host: 192.168.0.10
      port: 1883
      topic_prefix: frigate
      client_id: frigate
    
    record:
      enabled: true
      motion:
        days: 3
      alerts:
        retain:
          days: 14
          mode: motion
      detections:
        retain:
          days: 14
          mode: active_objects
    
    snapshots:
      enabled: true
      retain:
        default: 7
    
    cameras:
      front_door:
        ffmpeg:
          inputs:
            - path: rtsp://user:{FRIGATE_RTSP_PASSWORD}@192.168.0.20:554/stream1
              roles:
                - record
            - path: rtsp://user:{FRIGATE_RTSP_PASSWORD}@192.168.0.20:554/stream2
              roles:
                - detect
        detect:
          enabled: true
          width: 1280
          height: 720
          fps: 5
        objects:
          track:
            - person
            - car
        snapshots:
          enabled: true
          bounding_box: true
          retain:
            default: 7
    

    여기서 봐야 할 건 문법보다 의미입니다. roles가 잘못 연결되면 기록은 남는데 감지가 안 되거나, 감지는 되는데 녹화 품질이 이상해질 수 있습니다. 그리고 예전 글에서 자주 보이던 record.events 형태보다, 현재 문서 기준으로는 record.alerts와 record.detections 구조를 기준으로 보는 편이 맞습니다.

    보존 기간도 처음부터 길게 잡지 않는 쪽을 권합니다. 파일 증가 속도를 먼저 확인하고 늘리는 게 훨씬 덜 피곤합니다. 특히 H.265는 저장 효율은 좋지만, 브라우저 호환성과 재생 환경을 같이 따져야 해서 홈랩이라면 초반엔 H.264 쪽이 더 다루기 편할 때가 많습니다.

    4) 컨테이너 실행과 상태 확인

    docker compose up -d
    docker compose ps
    docker logs --tail=200 frigate
    docker logs -f frigate
    

    설치 직후에는 에러 유무만 보지 말고, 어느 계층에서 끊기는지를 구분해서 봐야 합니다.

    • 연결 실패: 인증 오류, RTSP 경로 오타, 카메라 동시 접속 제한을 먼저 봅니다.
    • 디코딩 오류: 코덱 설정, 스트림 안정성, 공유 메모리 부족을 의심합니다.
    • 반복 재시작: 설정 문법, 볼륨 권한, 경로 쓰기 실패를 우선 확인합니다.
    • UI만 느림: 감지 엔진보다 디스크 I/O 또는 썸네일, 클립 생성 부하일 가능성이 큽니다.

    RTSP 스트림 자체가 안정적인지는 Frigate 바깥에서 꼭 따로 확인하는 게 좋습니다. 이걸 생략하면 원인이 뭉개져 보일 때가 많더라고요.

    ffprobe -hide_banner rtsp://user:[email protected]:554/stream1
    ffprobe -hide_banner rtsp://user:[email protected]:554/stream2
    

    이 단계에서 해상도, 코덱, 프레임 정보가 일관되지 않거나 접속이 들쑥날쑥하면, Frigate 이전 계층에서 이미 문제가 시작된 겁니다.

    5. Frigate NVR와 Home Assistant 연동 포인트

    Home Assistant 연동은 Frigate를 단순 NVR에서 운영 시스템으로 바꿔줍니다. 다만 실제로 중요한 건 연동 자체보다 어떤 이벤트를 어떤 문맥에서 쓸 것인가입니다. 기준 없이 다 알림으로 보내면 며칠 안 가서 사람이 알림을 무시하게 됩니다. 이거 진짜 금방 소음이 되더라고요.

    제가 권하는 방식은 이벤트를 세 단계로 나누는 겁니다. 기록용, 대시보드용, 즉시 알림용입니다. 예를 들어 사람 감지는 전부 기록하되, 심야 시간대 person 이벤트만 알림으로 보내고, 차량은 대시보드 위주로 소비하는 식입니다. Frigate가 잘 잡는다고 해서 모든 이벤트 가치가 같은 건 아니니까요.

    현재 기준으로는 Home Assistant의 공식 Frigate 통합을 우선 쓰는 편이 가장 깔끔합니다. 다만 MQTT 메시지 구조를 직접 확인하고 싶다면 아래처럼 먼저 브로커에서 실제 토픽을 보는 게 안전합니다.

    mqtt:
      sensor:
        - name: "Front Door Person Active Count"
          state_topic: "frigate/front_door/person/active"
          icon: mdi:account-alert
    

    수동 MQTT 센서를 쓸 수도 있지만, 먼저 실제 메시지가 올라오는지 눈으로 확인하는 게 더 중요합니다. 특히 frigate/front_door/person과 frigate/front_door/person/active는 의미가 다르기 때문에, 무턱대고 binary sensor로 고정하면 해석이 꼬일 수 있습니다.

    mosquitto_sub -h 192.168.0.10 -t 'frigate/#' -v
    
    # 특정 카메라 관련 이벤트만 좁혀보기
    mosquitto_sub -h 192.168.0.10 -t 'frigate/front_door/#' -v
    

    이 과정을 생략하면 Home Assistant 설정이 틀린 건지, MQTT가 안 오는 건지, Frigate가 이벤트를 못 만드는 건지 구분이 잘 안 됩니다. 저도 초반엔 HA 자동화가 문제인 줄 알고 붙잡고 있었는데, 실제론 Frigate 쪽 객체 추적 대상이 기대와 다르게 잡혀서 메시지가 아예 안 올라오던 적이 있었습니다.

    Home Assistant 연동으로 Frigate NVR 이벤트를 확인하는 대시보드 이미지

    객체 감지 이벤트가 센서와 알림으로 연결된 결과 예시를 보여주는 대시보드 이미지입니다.

    6. 운영 중 자주 만나는 문제와 해결법

    설치보다 운영이 더 어렵습니다. Frigate는 시작은 빠를 수 있어도, 오래 굴릴수록 문제의 성격이 달라집니다. 초반엔 설정 문법과 접속 오류가 많고, 조금 지나면 저장소, 네트워크, 카메라 품질 문제가 본격적으로 드러납니다. 아래는 제가 자주 본 실패 모드와 근본 원인입니다.

    사례 1: 녹화는 되는데 감지가 들쑥날쑥한 경우

    이 상황은 대개 Frigate 설정보다 입력 영상 품질 문제에서 시작합니다. 메인 스트림 하나에 detect와 record를 같이 물려두면 낮에는 버티다가 밤에 흔들리는 경우가 많습니다. 헤드라이트, IR 전환, 노이즈 억제, WDR 같은 카메라 내부 처리 영향이 생각보다 큽니다.

    1. detect용 스트림을 서브 스트림으로 분리합니다.
    2. 카메라의 WDR, 노이즈 억제, 야간 모드 전환 시점을 다시 봅니다.
    3. 객체 종류를 너무 넓게 잡지 말고 필요한 클래스만 추적합니다.
    4. 로그와 이벤트 시간을 비교해 지연이 감지 문제인지 디코딩 지연인지 구분합니다.

    핵심은 Frigate를 더 만지기 전에 카메라를 먼저 의심하는 것입니다. 영상이 흔들리는데 감지만 더 똑똑해지길 기대하면 답이 잘 안 나옵니다.

    사례 2: 디스크가 버벅이면서 UI까지 느려지는 경우

    연속 녹화, 스냅샷, 이벤트 클립이 쌓이면 저장소 쓰기 패턴이 꽤 거칠어집니다. 특히 OS, 컨테이너 데이터, 미디어 파일을 같은 디스크에 몰아두면 녹화는 되는데 보는 순간 느린 상태가 나옵니다. 이건 CPU 부족처럼 보여도 실제론 I/O 대기인 경우가 많습니다.

    iostat -x 1
    df -h
    du -sh /srv/frigate/media
    find /srv/frigate/media -type f | wc -l
    

    저는 여기서 %util, await, 파일 개수 증가 속도를 같이 봅니다. 이벤트가 몰릴 때만 순간적으로 튀는 건 자연스러울 수 있지만, 평시에도 디스크가 숨이 차 있으면 저장 정책을 먼저 줄여야 합니다. retain을 공격적으로 길게 잡는 것보다 실제 이벤트 밀도에 맞춰 보수적으로 시작하는 편이 훨씬 낫습니다.

    사례 3: ffmpeg 관련 오류가 반복되는 경우

    로그에 스트림 재연결이나 디코딩 오류가 반복될 때는 순서를 지켜서 봐야 합니다. Frigate 컨테이너만 재시작하는 건 보통 해결책이라기보다 증상 가리기에 가깝습니다.

    1. 카메라 RTSP URL이 정확한지 다시 확인합니다.
    2. 같은 스트림을 ffprobe로 직접 열어봅니다.
    3. 카메라 코덱과 해상도 설정이 과하지 않은지 봅니다.
    4. PoE 스위치, 케이블, 링크 상태를 포함한 네트워크 층을 확인합니다.
    ffprobe rtsp://user:[email protected]:554/stream1
    ping -c 20 192.168.0.20
    docker logs --tail=200 frigate | grep -iE 'error|fail|ffmpeg|restart'
    

    Frigate 문제처럼 보여도 원인이 카메라 펌웨어, 링크 품질, 전원 불안정인 경우가 꽤 많습니다. 저도 예전에 PoE 스위치 포트 상태가 애매해서 RTSP가 간헐적으로 끊기는 걸 한참 뒤에 찾았습니다. 이런 문제는 설정 파일만 만진다고 해결되지 않습니다.

    사례 4: 알림은 오는데 정작 볼 만한 이벤트가 너무 많은 경우

    이건 성능 이슈가 아니라 설계 이슈입니다. 시스템은 정상인데 사람이 못 쓰는 상태죠. 이벤트를 많이 잡는 것과 유용하게 잡는 건 다릅니다. 낮 시간 현관, 도로 변 카메라, 반사면이 많은 창가 카메라에서 특히 자주 생깁니다.

    1. 알림용 이벤트와 기록용 이벤트를 분리합니다.
    2. 밤 시간대, 특정 구역, 특정 객체만 알림 대상으로 좁힙니다.
    3. Home Assistant에서 조건부 자동화를 먼저 걸고 Frigate는 과도하게 만지지 않습니다.

    여기서 중요한 건 Frigate를 오탐 0% 도구로 기대하지 않는 겁니다. 운영자는 탐지 정확도보다 알림 가치 밀도를 높이는 쪽으로 설계하는 게 훨씬 현실적입니다.

    7. 검증: 무엇을 보고 정상 동작으로 판단할까

    정상 동작을 웹 UI가 뜬다로만 판단하면 결국 다시 손보게 됩니다. 최소한 이벤트 생성, MQTT 전달, 저장 정책, 재시작 복구, 조회 응답성까지 봐야 합니다. 저는 배포 직후와 카메라 추가 직후에 같은 체크리스트를 반복합니다.

    • 이벤트 생성 흐름: 사람이 지나갈 때 이벤트, 스냅샷, 클립이 일관되게 남는지 봅니다.
    • MQTT 전파: 이벤트가 브로커까지 실제로 전달되는지 확인합니다.
    • 스토리지 적재: /media/frigate 아래 파일이 예상한 보존 정책대로 누적, 정리되는지 확인합니다.
    • 재부팅 복구: 호스트 또는 컨테이너 재시작 후 자동으로 회복되는지 봅니다.
    • UI 응답성: 이벤트 목록 조회와 최근 영상 접근이 과도하게 느리지 않은지 확인합니다.

    검증할 때는 단순 모니터링보다 문제 분리용 명령이 필요합니다. 저는 아래 정도는 바로 돌려봅니다.

    docker stats
    ls -lah /srv/frigate/media
    du -sh /srv/frigate/media
    docker inspect frigate --format '{{.State.Status}}'
    docker restart frigate
    docker logs --since=2m frigate
    

    여기서 중요한 건 숫자 자체보다 변화 시점입니다. 사람이 지나갈 때만 CPU가 오르는 건 자연스러울 수 있습니다. 하지만 평소에도 높게 유지되면 감지 대상이 과하거나 스트림 구성이 비효율적일 가능성이 큽니다. 디스크도 마찬가지입니다. 총 용량보다 하루에 얼마나 늘어나는지, 이벤트 밀도가 높은 날에 정리 정책이 제대로 작동하는지가 더 중요합니다.

    이벤트 리스트, 클립 저장, 리소스 사용 상태를 함께 확인하는 운영 점검 이미지입니다.

    8. Frigate NVR 도입 전에 꼭 따져볼 선택 기준

    Frigate를 쓸지, 전용 NVR을 쓸지, 혼합 구성을 쓸지는 좋다 나쁘다로 고를 문제가 아닙니다. 운영 목표가 무엇인지에 따라 답이 달라집니다. 아래 표는 실제로 많이 받는 질문을 기준으로 정리한 것입니다.

    고민 포인트 이럴 땐 Frigate 이럴 땐 전용 NVR 또는 혼합 구성
    자동화가 중요한가 Home Assistant, MQTT, 조건부 알림까지 엮고 싶을 때 앱에서 보기만 하면 충분할 때
    설정보다 간편함이 중요한가 설정 파일과 로그 확인을 감수할 수 있을 때 초기 구축 시간을 짧게 가져가야 할 때
    카메라 제조사가 섞여 있는가 표준 스트림 기준 통합 운영이 필요할 때 한 브랜드로 통일돼 제조사 앱 완성도가 충분할 때
    저장소와 네트워크를 직접 관리할 자신이 있는가 스토리지, 백업, 접근제어까지 직접 설계할 때 운영 책임을 줄이고 싶을 때
    문제 해결 방식 로그와 계층별 점검으로 원인을 추적하는 데 익숙할 때 장비 교체 또는 벤더 지원 중심으로 해결하고 싶을 때

    제가 실무적으로 추천하는 기준은 단순합니다. 이벤트를 다른 시스템과 연결해 써야 하면 Frigate NVR, 영상 보관 자체가 목적이면 전용 NVR입니다. 그리고 이 둘을 혼합하는 것도 충분히 현실적인 선택입니다. 예를 들어 안정적인 연속 녹화는 전용 장비에 맡기고, 특정 카메라의 이벤트 자동화만 Frigate로 가져가는 구성도 꽤 괜찮습니다.

    즉, Frigate는 제품 하나 설치해서 끝나는 장비라기보다 카메라 품질, 네트워크 안정성, 스토리지, 자동화 요구사항을 묶어 운영하는 플랫폼에 가깝습니다. 홈랩을 즐기는 분께는 이 유연성이 큰 장점이지만, 손이 덜 가는 보안 장비를 원한다면 장점이 곧 관리 포인트가 되기도 합니다.

    9. 마무리: 이런 분께는 Frigate, 이런 분께는 다른 선택

    제가 직접 굴려보며 얻은 판단은 꽤 선명합니다. 카메라 2~4대 규모에서 Home Assistant 연동, 객체 감지 기반 알림, 이벤트 검색이 핵심이라면 Frigate NVR 쪽이 잘 맞습니다. 이 경우에는 처음부터 detect와 record를 분리하고, 미디어 저장 경로를 OS와 분리하고, MQTT 이벤트를 먼저 검증하는 순서로 들어가면 시행착오를 많이 줄일 수 있습니다.

    반대로 목표가 무조건 안정적으로 녹화하고 필요할 때 영상만 찾겠다는 쪽에 가깝다면 전용 NVR이나 제조사 클라우드 조합이 더 현실적입니다. 설정 파일 만지는 시간이 부담스럽고, 장애가 났을 때 로그를 따라가며 원인을 찾고 싶지 않다면 더더욱 그렇습니다. Frigate는 강력하지만, 공짜로 단순해지지는 않더라고요.

    한 줄로 정리하면 이렇습니다. 이벤트를 시스템으로 쓰고 싶으면 Frigate, 영상을 장비로 보관하고 싶으면 전용 NVR이 더 낫습니다. 저는 홈랩이라면 전자를 권하지만, 전제는 분명합니다. 스트림 분리, 저장소 분리, 이벤트 설계까지 같이 볼 생각이 있을 때 이야기입니다.

    바로 다음 단계로 넘어가실 분이라면, Frigate를 띄운 뒤 가장 먼저 할 일은 설정을 더 늘리는 게 아닙니다. 현관 카메라 하나만 붙여서 이벤트 생성, MQTT 전달, 디스크 증가 패턴, 재시작 복구까지 확인해보는 겁니다. 이 작은 파일럿을 통과하면 확장하면 되고, 여기서부터 흔들리면 카메라나 저장소 설계를 먼저 고치는 편이 훨씬 덜 돌아갑니다.

    Frigate NVR 도입 판단 기준을 정리한 홈 보안 카메라 비교 이미지

    어떤 환경에서 Frigate가 맞고, 어떤 경우 전용 NVR이 더 나은지 한 장으로 정리한 요약 이미지입니다.

  • [HomeLabs] CheapSecurity vs Frigate: 홈랩 CCTV AI NVR 솔루션 실측 비교

    [HomeLabs] CheapSecurity vs Frigate: 홈랩 CCTV AI NVR 솔루션 실측 비교

    [홈랩] 홈랩 CCTV AI NVR 비교: CheapSecurity vs Frigate 실측 관점 정리

    홈랩 CCTV AI NVR 구성을 고민하시는 분들이 요즘 정말 많습니다. 저도 집에서 카메라 몇 대 붙여놓고 단순 녹화만 하다가, 사람이나 차량 같은 객체를 자동으로 잡아주는 AI NVR이 필요해졌거든요. 처음엔 ‘그냥 싼 장비 하나 사면 끝 아닌가?’ 싶었는데, 실제로 써보니까 저장 방식, RTSP(실시간 스트리밍 프로토콜), 하드웨어 가속(Hardware Acceleration), 객체 탐지(Object Detection) 안정성이 생각보다 크게 갈리더라고요. 그래서 이번 글은 CheapSecurity vs Frigate라는 비교 키워드로 많이 찾는 분들을 위해, 제가 홈랩에서 판단했던 기준과 실제 구축 흐름을 정리해보겠습니다.

    먼저 중요한 점 하나 짚고 갈게요. Frigate는 실존하는 대표적인 오픈소스 AI NVR로 널리 알려져 있지만, CheapSecurity는 제가 확인 가능한 범위에서 구체적인 실존 제품 정보가 명확하지 않았습니다. 그래서 이 글에서는 CheapSecurity를 특정 브랜드나 모델로 단정하지 않고, 저비용 홈랩 CCTV AI NVR 구성 전반을 뜻하는 비교축으로 풀어가겠습니다. 이게 할루시네이션을 피하는 가장 안전한 방식이더라고요.

    홈랩 CCTV AI NVR 전체 아키텍처를 보여주는 이미지

    홈랩 CCTV AI NVR 아키텍처 예시입니다. 카메라, RTSP 스트림, NVR, 저장소, 알림 흐름을 한눈에 보여주는 용도예요.

    왜 홈랩 CCTV AI NVR 비교가 중요한가

    쉽게 말해 CCTV는 이제 녹화만 되는 박스로 끝나지 않습니다. 홈랩에서 직접 운영하면 다음 세 가지가 바로 체감됩니다.

    • 탐지 정확도: 움직임 감지(Motion Detection)만으로는 나뭇잎, 그림자, 비 오는 날 오탐이 너무 많습니다.
    • 저장 효율: 24시간 연속 녹화는 편하지만 디스크를 꾸준히 잡아먹습니다.
    • 운영 편의성: 컨테이너(Docker Container) 기반인지, 설정 파일 중심인지에 따라 유지보수 난도가 확 달라집니다.

    제가 직접 해보니 홈랩 CCTV AI NVR에서 핵심은 단순히 ‘싼가 비싼가’가 아니었습니다. 오탐을 얼마나 줄이느냐, 스트림이 얼마나 안정적이냐, 그리고 장애가 났을 때 내가 직접 고칠 수 있느냐가 훨씬 중요했습니다. 특히 홈랩은 기업 환경처럼 전용 장비를 계속 바꿀 수 있는 구조가 아니잖아요. 이미 갖고 있는 미니 PC, NAS(Network Attached Storage), 중고 카메라를 최대한 활용해야 하니까요.

    CheapSecurity vs Frigate, 개념부터 쉽게 정리해보겠습니다

    저도 처음엔 헷갈렸는데, 여기서는 두 방향으로 이해하면 편합니다.

    1. CheapSecurity 쪽 접근: 저비용 우선입니다. 기존 카메라와 남는 서버를 최대한 재활용하고, 기능은 꼭 필요한 것부터 붙이는 방식이죠.
    2. Frigate 쪽 접근: 객체 탐지(Object Detection) 중심입니다. 단순 모션보다 사람, 차량 같은 이벤트를 기준으로 운영하기 좋습니다.
    3. 결정 포인트: 예산보다 운영 목표가 먼저입니다. ‘녹화 보관’이 목적이면 단순 구성도 충분하고, ‘이벤트 기반 알림’이 목적이면 Frigate류가 훨씬 잘 맞습니다.

    사실 보안 카메라 비교를 할 때 많은 분이 카메라 화질만 먼저 보시는데요, 실제 운영에서는 NVR이 더 중요할 때가 많습니다. 카메라가 RTSP를 안정적으로 뿌려줘도 NVR이 그걸 잘 받아먹지 못하면 녹화 구멍이 생깁니다. 반대로 카메라가 아주 고급형이 아니어도, NVR 구성이 안정적이면 실사용 만족도가 꽤 올라갑니다.

    한눈에 보는 비교 표

    항목 저비용 홈랩 구성(CheapSecurity 관점) Frigate
    주요 목적 최소 비용으로 녹화와 기본 감시 객체 탐지 중심 AI NVR 운영
    구성 난이도 케이스마다 편차 큼 초기 학습은 필요하지만 구조가 비교적 명확함
    탐지 방식 모션 감지 위주로 흐르기 쉬움 사람, 차량 등 객체 기준 운영에 유리
    확장성 개별 조합에 따라 다름 홈 어시스턴트(Home Assistant) 연동 사례가 많음
    트러블슈팅 조합형이라 원인 분리가 어려울 수 있음 설정 파일 중심이라 재현과 수정이 편한 편
    추천 대상 예산이 가장 중요한 입문자 안정적인 이벤트 감시를 원하는 사용자

    실전 구현: 제가 홈랩에서 Frigate 기준으로 잡은 기본 구조

    실제로 써보니까 가장 덜 삽질하는 시작점은 이렇습니다.

    1. 카메라는 RTSP 스트림을 안정적으로 제공하는 모델을 사용합니다.
    2. NVR은 Docker Compose로 올립니다.
    3. 녹화 저장소는 로컬 SSD나 NAS 마운트 경로로 분리합니다.
    4. 탐지용 스트림과 녹화용 스트림을 분리하면 운영이 조금 더 편해집니다.

    여기서 중요한 포인트! 홈랩 CCTV AI NVR은 CPU를 계속 갈아 넣는 구조로 가면 오래 못 버팁니다. 처음엔 ‘이 정도면 버티겠지’ 했는데, 여러 대 붙이니 팬 소음과 발열이 바로 올라오더라고요. 그래서 구성 자체를 단순하게 잡는 게 좋습니다.

    1. 디렉터리 준비

    mkdir -p ~/homelab/frigate/config
    mkdir -p ~/homelab/frigate/media
    cd ~/homelab/frigate

    설정 파일과 녹화 저장소를 분리해두면 백업이나 마이그레이션 할 때 편합니다. 저는 이걸 안 나눠놨다가 나중에 경로 정리하느라 삽질 좀 했습니다 ㅎㅎ

    2. Docker Compose 작성

    services:
      frigate:
        container_name: frigate
        restart: unless-stopped
        image: ghcr.io/blakeblackshear/frigate:stable
        privileged: true
        shm_size: "512mb"
        ports:
          - "5000:5000"
          - "8554:8554"
          - "8555:8555/tcp"
          - "8555:8555/udp"
        volumes:
          - ./config:/config
          - ./media:/media/frigate
          - /etc/localtime:/etc/localtime:ro

    버전 태그를 세세하게 고정하지 않은 이유도 있습니다. 이 글은 특정 시점의 미확인 버전을 단정하기보다, 구조와 운영 포인트에 집중하려고 했거든요.

    3. 기본 설정 파일 예시

    mqtt:
      enabled: false
    
    cameras:
      front_door:
        ffmpeg:
          inputs:
            - path: rtsp://USER:PASS@CAMERA_IP:554/stream1
              roles:
                - detect
                - record
        detect:
          enabled: true
        record:
          enabled: true
        snapshots:
          enabled: true
          timestamp: true
          bounding_box: true

    여기서는 가장 단순한 형태로만 시작하시면 됩니다. 처음부터 카메라 여러 대, 역할 분리, 알림 자동화까지 한 번에 넣으면 어디서 꼬였는지 파악이 안 됩니다. 저도 처음엔 욕심냈다가 결국 한 대만 붙여서 다시 검증했었거든요.

    홈랩 CCTV AI NVR에서 Frigate 설정과 컨테이너 구성을 설명하는 이미지

    Frigate 설정 파일, Docker Compose, 카메라 입력 흐름을 설명하는 구성 이미지가 들어갈 자리입니다.

    4. 컨테이너 실행

    docker compose up -d
    docker compose logs -f frigate

    로그를 바로 보는 습관이 중요합니다. 웹 화면만 보고 있으면 ‘왜 안 되지?’ 상태가 길어집니다. 반면 로그를 보면 RTSP 인증 실패인지, 스트림 경로 문제인지, 디렉터리 권한 문제인지 금방 감이 옵니다.

    CheapSecurity 관점에서 봤을 때의 장점과 한계

    그렇다면 저비용 중심의 구성은 무조건 별로냐? 그건 아닙니다. 오히려 홈랩 입문에서는 아주 현실적인 선택일 수 있습니다.

    • 장점: 이미 가진 장비를 재활용하기 좋습니다.
    • 장점: 작은 규모에서는 투자 부담이 적습니다.
    • 장점: 학습용으로는 충분히 재미있습니다.
    • 한계: 기능이 여기저기 흩어지면 운영 일관성이 떨어집니다.
    • 한계: 객체 탐지 품질을 안정적으로 맞추려면 결국 별도 설계가 필요합니다.

    제가 실제로 느낀 차이는 이거였습니다. 저비용 조합은 처음 시작은 빠른데, 시간이 갈수록 관리 복잡도가 올라갑니다. 반면 Frigate는 초반 설정이 조금 귀찮아도, 구조가 잡히고 나면 비교적 덜 흔들립니다. 특히 보안 카메라 비교를 많이 해보신 분일수록 공감하실 텐데요. 장비가 늘수록 ‘설정이 코드처럼 관리되느냐’가 진짜 중요해집니다.

    ⚠️ 트러블슈팅: 제가 실제로 부딪힌 문제들

    여기서부터가 진짜 실전입니다. 드디어 됐다 싶다가 다시 무너지는 구간이 꼭 오더라고요.

    1. RTSP 연결은 되는데 화면이 불안정한 경우

    대부분 카메라 스트림 프로파일이 원인인 경우가 많았습니다. 메인 스트림은 녹화용, 서브 스트림은 탐지용으로 나누는 방식이 보통 더 안정적이더라고요.

    ffprobe rtsp://USER:PASS@CAMERA_IP:554/stream1

    해결 포인트: 스트림 자체가 흔들리면 NVR을 아무리 만져도 답이 없습니다. 카메라 쪽 인코딩 설정부터 확인하세요.

    2. 저장은 되는데 이벤트 검색이 불편한 경우

    이건 모션 감지 중심 구성에서 자주 느낀 문제였습니다. 비슷한 시간대의 잡이벤트가 너무 많아져서, 막상 필요한 장면을 찾는 시간이 길어지더라고요. 그래서 객체 기반 태깅이 왜 중요한지 뒤늦게 체감했습니다.

    3. CPU 사용률이 계속 높은 경우

    처음엔 이게 뭔가 싶었는데, 탐지와 녹화를 같은 고해상도 스트림 하나로 다 처리하면 부담이 커질 수 있습니다. 특히 홈랩 미니 PC는 여유가 넉넉하지 않거든요.

    • 탐지 스트림 해상도를 낮춰봅니다.
    • 동시 카메라 수를 줄여서 먼저 검증합니다.
    • 디스크 I/O 병목도 함께 봐야 합니다.

    중요: 성능 문제를 무조건 CPU 탓으로만 보면 안 됩니다. 네트워크, 저장소, 스트림 품질이 같이 얽혀 있는 경우가 많습니다.

    4. 권한 문제로 녹화 파일이 안 쌓이는 경우

    이건 진짜 자주 겪습니다. 컨테이너는 떠 있는데 파일이 안 생기면, 경로 권한부터 보셔야 합니다.

    ls -al ~/homelab/frigate
    ls -al ~/homelab/frigate/media

    저는 예전에 NFS(Network File System) 마운트 경로로 연결했다가 권한이 꼬여서 반나절을 날린 적도 있습니다. 이런 날은 정말 허무하죠.

    홈랩 CCTV AI NVR 트러블슈팅과 로그 분석을 표현한 이미지

    로그 분석, RTSP 오류, 저장소 권한 문제 같은 트러블슈팅 장면을 보여주는 이미지 자리입니다.

    검증과 결과: 어떤 기준으로 비교해야 덜 후회하나

    실제로 써보니까 결과를 볼 때는 화려한 기능보다 아래 기준이 훨씬 중요했습니다.

    1. 이벤트 재생이 빠른가
    2. 오탐이 줄었는가
    3. 카메라 추가 시 설정이 반복 가능(repeatable)한가
    4. 문제 발생 시 로그와 설정 파일만으로 복구 가능한가

    여기서 Frigate의 강점은 꽤 분명했습니다. 객체 중심 이벤트 관리를 하려는 순간, 단순 저비용 조합보다 운영 일관성이 좋아지더라고요. 반대로 CheapSecurity식 접근, 즉 기존 자원 재활용 중심 접근은 예산을 많이 아껴야 하는 상황에서 꽤 유효했습니다. 다만 규모가 조금만 커져도 관리 체계가 필요해집니다.

    제가 정리한 결론은 이렇습니다.

    질문 추천 방향
    일단 가장 적은 비용으로 시작하고 싶은가 저비용 홈랩 조합부터 시작
    사람/차량 감지와 이벤트 탐색이 중요한가 Frigate 우선 검토
    나중에 홈 어시스턴트 연동까지 볼 생각인가 Frigate가 더 자연스러움
    운영보다 실험 자체가 목적인가 저비용 조합도 재미있음
    홈랩 CCTV AI NVR 결과 검증과 이벤트 대시보드를 보여주는 이미지

    탐지 이벤트, 썸네일, 타임라인 기반 검증 결과를 보여주는 대시보드 이미지 자리입니다.

    정리: 홈랩 CCTV AI NVR은 목적이 먼저입니다

    이번 비교를 한 문장으로 줄이면 이겁니다. CheapSecurity vs Frigate의 승부는 가격이 아니라 운영 목표에서 갈립니다. 단순 녹화와 저비용이 우선이면 가볍게 시작해도 됩니다. 하지만 나중에 사람 감지, 알림 자동화, 이벤트 검색 효율까지 보게 되면 Frigate 쪽 장점이 점점 더 크게 느껴질 가능성이 높습니다.

    혹시 이런 경험 있으신가요? 처음엔 싸게 시작했는데, 나중에 설정이 쌓이면서 오히려 시간이 더 들어가는 경우요. 저도 딱 그랬습니다. 그래서 지금은 장비 스펙보다도 운영 구조가 단순하고 재현 가능한가를 먼저 봅니다. 홈랩은 재미있어야 오래 가거든요.

    홈랩 CCTV AI NVR에서 CheapSecurity식 구성과 Frigate를 비교 요약한 이미지

    두 접근 방식의 장단점과 추천 상황을 한 장으로 요약한 인포그래픽이 들어갈 자리입니다.

    다음 단계 제안

    • 1단계: 카메라 1대로 RTSP 안정성부터 검증해보세요.
    • 2단계: 그 다음 Frigate 같은 AI NVR로 이벤트 기반 운영을 붙여보세요.
    • 3단계: 마지막에 저장 정책과 알림 정책을 다듬는 게 효율적입니다.

    다음 글에서는 홈 어시스턴트(Home Assistant)와 Frigate 연동이나, 카메라 스트림 분리 전략을 더 자세히 다뤄볼 예정입니다. 이전 글에서 다룬 Docker Compose 운영 팁도 같이 보시면 훨씬 이해가 빨라지실 겁니다.

    자주 묻는 질문 FAQ

    Q1. 홈랩 CCTV AI NVR 입문은 어떤 방향이 좋을까요?

    예산이 빡빡하면 저비용 조합으로 시작하셔도 됩니다. 다만 이벤트 기반 운영을 원하면 초반부터 Frigate를 검토하는 편이 장기적으로 편할 수 있습니다.

    Q2. 보안 카메라 비교에서 가장 먼저 봐야 할 건 뭔가요?

    해상도보다 RTSP 안정성, 스트림 설정 유연성, 그리고 NVR과의 궁합을 먼저 보시는 걸 추천드립니다.

    Q3. Frigate는 누구에게 잘 맞나요?

    단순 녹화보다 사람/차량 감지, 이벤트 검색, 자동화 연동이 중요한 분들께 잘 맞습니다.

    Q4. CheapSecurity라는 이름의 특정 제품을 찾고 있었는데요?

    제가 확인 가능한 범위에서는 특정 실존 제품으로 단정하기 어려웠습니다. 그래서 이 글에서는 저비용 홈랩 CCTV AI NVR 접근 전반을 뜻하는 비교 개념으로 다뤘습니다.

  • [Linux] Fedora Ubuntu 비교: 1년 써본 홈 서버 분석

    [Linux] Fedora Ubuntu 비교: 1년 써본 홈 서버 분석

    Fedora Ubuntu 비교: 1년 써본 홈 서버 분석

    홈 서버를 처음 올릴 때 제일 오래 붙잡고 고민했던 게 바로 배포판 선택이었습니다. 특히 Fedora Ubuntu 비교는 검색하면 자료가 정말 많거든요. 그런데 막상 24시간 켜 두는 장비에 올려서 1년 정도 굴려보면, 문서에서 보던 장점과 실제 체감이 조금 다르더라고요. 저도 처음엔 “둘 다 리눅스면 비슷한 거 아닌가?” 싶었는데, 업데이트 주기, 보안 정책, 패키지 관리, 컨테이너 운영 방식에서 성격 차이가 꽤 분명했습니다.

    이번 글은 제가 홈랩에서 직접 겪은 시행착오를 바탕으로, 홈 서버용으로 Fedora와 Ubuntu를 어떻게 봐야 하는지 정리한 내용입니다. 결론부터 짧게 말하면, 최신 흐름과 보안 정책을 더 적극적으로 다루고 싶다면 Fedora가 잘 맞았고, 자료량과 익숙한 운영 흐름이 필요하면 Ubuntu가 더 편했습니다. 다만 이건 누가 더 우월하다는 얘기가 아니라 운영 스타일이 다르다는 이야기예요. 결국 중요한 건 “내 홈 서버에서 어떤 서비스를 몇 년 동안 어떤 방식으로 굴릴 건가”였습니다.

    Fedora와 Ubuntu 홈 서버 운영 흐름을 한눈에 보여주는 비교 다이어그램

    Fedora와 Ubuntu를 홈 서버 관점에서 비교한 전체 구조 이미지입니다.

    왜 Fedora Ubuntu 비교가 홈 서버에서 중요할까요

    데스크톱에서는 조금 불편해도 금방 손으로 복구하면 되는데, 홈 서버는 얘기가 다릅니다. NAS(Network Attached Storage, 네트워크 저장소), 미디어 서버, 리버스 프록시(Reverse Proxy, 요청을 대신 받아 뒤쪽 서비스로 넘기는 서버), 백업 작업, 홈 오토메이션까지 한 박스에 몰아넣는 경우가 많잖아요. 한 번 꼬이면 밤에 알림 오고, 주말에 손이 많이 갑니다.

    실제로 써보니 배포판 선택은 단순한 UI 취향 문제가 아니었습니다. 특히 아래 항목에서 차이가 또렷하게 느껴졌습니다.

    • 업데이트 주기: 자주 바뀌는 환경이 편한지, 덜 바뀌는 환경이 편한지
    • 보안 정책: SELinux(강제 접근 통제)와 AppArmor(프로파일 기반 접근 통제) 운용 감각 차이
    • 패키지 관리: DNF(dnf, 패키지 관리자)와 APT(apt, 패키지 관리자) 사용 흐름
    • 문서 생태계: 문제 생겼을 때 검색해서 바로 답을 찾기 쉬운지
    • 컨테이너 운영: Podman(Podman, 데몬리스 컨테이너 엔진)이나 Docker(Docker, 컨테이너 런타임) 적용 습관

    1년 사용 후기 기준으로 보면, “설치는 쉬웠다”보다 “6개월 지나서도 덜 귀찮았나”가 더 중요하더라고요.

    Fedora Ubuntu 비교 핵심: 두 배포판의 성격

    쉽게 말해 Fedora는 새로운 흐름을 상대적으로 빠르게 받아들이는 배포판이고, Ubuntu는 익숙한 운영 방식과 풍부한 자료를 제공하는 배포판에 가깝습니다. 둘 다 서버 운영은 충분히 가능합니다. 다만 초반 적응 비용과 장기 유지보수의 감각이 꽤 다릅니다.

    항목 Fedora Ubuntu
    패키지 관리자 DNF APT
    보안 기본 흐름 SELinux 중심 AppArmor 중심
    업데이트/지원 성향 릴리스 주기가 빠르고 지원 기간이 상대적으로 짧음 LTS 기준 장기 유지보수에 유리함
    체감 성격 최신 흐름 반영이 빠름 자료와 예제가 풍부함
    홈 서버 적합도 컨테이너/보안 실험에 강점 안정적 운영과 문서 접근성에 강점
    초보자 체감 처음엔 약간 까다로움 비교적 진입 장벽이 낮음

    제가 직접 해보니 Fedora는 “왜 막히지?” 싶은 순간이 있었지만, 원인을 이해하고 나면 구조가 꽤 깔끔하다고 느꼈습니다. 반대로 Ubuntu는 일단 원하는 서비스가 빨리 올라갑니다. 이거 진짜 편하더라고요. 대신 시간이 지나면 패키지 버전이나 구성 방식에서 “조금 더 새것을 쓰고 싶은데” 하는 갈증이 생길 때가 있었습니다.

    패키지 관리: DNF vs APT

    APT는 워낙 익숙한 분이 많아서 자료 찾기가 쉽습니다. 반면 DNF는 명령 자체는 어렵지 않지만, 초반에는 저장소 구성이나 패키지 이름 차이 때문에 손이 한 번 더 가는 편이었습니다. 그래도 두 도구 모두 실사용에는 충분히 안정적이었습니다.

    # Fedora
    sudo dnf upgrade -y
    sudo dnf install -y podman nginx git
    
    # Ubuntu
    sudo apt update
    sudo apt upgrade -y
    sudo apt install -y docker.io nginx git

    명령 자체는 단순합니다. 다만 홈 서버에서는 명령어 한 줄보다도, 장애가 났을 때 검색해서 바로 이어서 해결할 수 있느냐가 더 크게 느껴졌습니다.

    보안 정책: SELinux vs AppArmor

    여기서 많이 갈립니다. Fedora 쪽은 SELinux가 기본 흐름에 깊게 들어와 있어서, 처음에는 서비스가 안 뜨면 “설정은 맞는데 왜 안 되지?” 싶은 일이 생깁니다. 저도 초반엔 로그도 제대로 안 보고 포트만 의심했는데, 알고 보니 보안 컨텍스트(context, 접근 허용 규칙의 문맥) 문제였던 적이 몇 번 있었습니다. 반면 Ubuntu는 AppArmor가 기본으로 활성화되어 있지만, 초반 운영에서는 상대적으로 덜 거슬리게 느껴졌습니다.

    SELinux와 AppArmor 동작 차이를 보여주는 홈 서버 보안 구성 다이어그램

    홈 서버에서 보안 정책이 서비스 접근에 어떤 영향을 주는지 설명하는 이미지입니다.

    제가 1년 동안 굴려본 홈 서버 구성

    환경을 간단히 설명드리면, 특정 하드웨어 모델에 기대는 이야기는 빼고 일반적인 홈랩 구성을 기준으로 말씀드릴게요. 서비스는 크게 이런 식이었습니다.

    • 리버스 프록시(Reverse Proxy)
    • 컨테이너 기반 애플리케이션
    • 파일 동기화 및 백업 작업
    • 간단한 모니터링(Monitoring, 상태 감시)
    • 주기적인 업데이트 및 재부팅 점검

    둘 다 처음 설치하고 네트워크 잡고 SSH(Secure Shell, 원격 접속) 붙이는 데까지는 큰 차이가 없습니다. 차이는 운영 루틴에서 벌어졌습니다. Fedora는 Podman을 중심으로 가져가면 꽤 자연스럽게 흘러갔고, Ubuntu는 Docker 예제가 워낙 많아서 필요한 구성을 붙이기가 빨랐습니다. 이 부분은 검색 생산성 차이도 꽤 컸어요.

    실전 구현: 같은 역할의 홈 서버를 두 배포판에 올릴 때

    비교를 위해 저는 최대한 비슷한 역할을 맡겼습니다. 핵심은 “업데이트, 웹 서비스, 컨테이너, 방화벽” 네 가지였습니다. 아래 절차는 현재 공식 문서 흐름과도 크게 어긋나지 않는 기본 예시입니다.

    1. 기본 업데이트와 필수 패키지 설치

    1. 시스템을 최신 상태로 올립니다.
    2. 웹 서버와 버전 관리 도구를 설치합니다.
    3. 방화벽 서비스를 확인하고 필요한 포트를 엽니다.
    # Fedora
    sudo dnf upgrade -y
    sudo dnf install -y nginx git curl
    sudo systemctl enable --now nginx
    sudo systemctl enable --now firewalld
    sudo firewall-cmd --add-service=http --permanent
    sudo firewall-cmd --reload
    
    # Ubuntu
    sudo apt update
    sudo apt upgrade -y
    sudo apt install -y nginx git curl
    sudo systemctl enable --now nginx
    sudo ufw allow 'Nginx Full'
    sudo ufw enable

    여기서 중요한 포인트가 있습니다. Fedora는 firewalld(firewalld, 동적 방화벽 관리 도구) 흐름이 자연스럽고, Ubuntu는 UFW(UFW, 간편 방화벽) 예제가 많아서 접근성이 좋습니다. 다만 Ubuntu의 UFW는 기본적으로 비활성 상태인 경우가 많아서, 규칙 추가 뒤 실제 활성화 여부를 꼭 확인하는 게 좋습니다.

    2. 컨테이너 서비스 올리기

    홈 서버에서는 결국 컨테이너를 안 쓰기가 어렵더라고요. 서비스 격리도 좋고, 복구도 빠르거든요. Fedora는 Podman과 궁합이 좋았고, Ubuntu는 Docker 기준 예제가 워낙 풍부해서 초반 구축 속도가 빨랐습니다.

    # Fedora - Podman 예시
    sudo dnf install -y podman
    podman run -d --name hello-web -p 8080:80 docker.io/library/nginx:latest
    
    # Ubuntu - Docker 예시
    sudo apt install -y docker.io
    sudo systemctl enable --now docker
    sudo docker run -d --name hello-web -p 8080:80 nginx:latest

    실제로 써보니 Fedora는 Podman이 기본 흐름과 잘 맞는 느낌이 있었고, Ubuntu는 Docker 관련 문서와 예제가 많아서 트러블슈팅 속도가 빨랐습니다. 둘 다 장점이 분명했습니다.

    3. 자동 업데이트 점검 스크립트

    무턱대고 자동 업데이트를 켜는 건 조심해야 하지만, 점검 스크립트 정도는 꼭 두는 걸 추천드립니다. 저도 이걸 안 해놨다가 한동안 방치된 적이 있거든요. 최소한 업데이트가 얼마나 쌓였는지는 주기적으로 보는 편이 마음이 편했습니다.

    #!/usr/bin/env bash
    set -euo pipefail
    
    if command -v dnf >/dev/null 2>&1; then
      echo "[Fedora] Checking updates"
      sudo dnf check-update || true
    elif command -v apt >/dev/null 2>&1; then
      echo "[Ubuntu] Checking updates"
      sudo apt update
      apt list --upgradable
    fi

    이 스크립트는 어디까지나 점검용입니다. 실제 운영에서는 자동 재부팅 여부, 커널 업데이트 시점, 백업 상태까지 같이 보고 결정하는 편이 더 안전했습니다.

    4. 서비스 정의 파일 예시

    컨테이너든 스크립트든 부팅 후 자동 실행까지 묶어두면 운영이 확실히 편해집니다. 아래는 비교용으로 보기 쉬운 compose 형식 예시입니다.

    services:
      web:
        image: nginx:latest
        ports:
          - "8080:80"
        restart: unless-stopped

    물론 실제 운영에선 비밀값(secret)이나 볼륨(volume) 분리까지 같이 잡아야 합니다. 하지만 비교의 핵심은 여기서도 드러납니다. Ubuntu는 예제가 많아서 따라가기 쉽고, Fedora는 보안과 최신 도구 흐름을 이해하면 꽤 탄탄하게 쌓입니다.

    Fedora와 Ubuntu에서 웹 서비스와 컨테이너를 배치하는 구성 화면 또는 네트워크 다이어그램

    웹 서버, 방화벽, 컨테이너 구성을 실제 운영 흐름처럼 보여주는 이미지입니다.

    주의사항과 트러블슈팅: 제가 실제로 막혔던 지점들

    이 섹션은 정말 중요합니다. 검색 결과에서는 깔끔하게 끝나 보이는데, 실제 홈 서버 운영은 여기서 시간이 많이 들어갑니다. 저도 결국 문제를 푼 건 마법 같은 명령어보다 로그 확인 습관이었습니다.

    Fedora에서 자주 겪은 부분

    • SELinux 때문에 서비스 접근이 막힘: 포트를 열었는데도 연결이 안 되는 경우가 있었습니다.
    • 최신 패키지 흐름 적응: 문서 예제가 예전 방식일 때 명령이 조금씩 다를 수 있었습니다.
    • 외부 튜토리얼과 차이: Ubuntu 기준 가이드를 그대로 따라 하면 패키지명이나 서비스명에서 어긋날 수 있었습니다.

    이럴 때 저는 먼저 로그부터 봤습니다. 처음엔 이게 뭔가 싶었는데, 로그를 보기 시작하니까 삽질 시간이 확 줄더라고요.

    # 공통적으로 먼저 보는 로그
    sudo systemctl status nginx
    sudo journalctl -xeu nginx
    
    # Fedora에서 보안 문맥 의심 시 확인에 도움 되는 명령 예시
    getenforce
    ls -Z /var/www

    Ubuntu에서 자주 겪은 부분

    • 문서가 너무 많아서 오히려 헷갈림: 같은 작업도 방법이 여러 개라 기준이 흐려질 수 있습니다.
    • 패키지/도구 버전 차이: 블로그 글마다 전제 조건이 달라서 그대로 복붙하면 안 맞는 경우가 있습니다.
    • 쉬워 보여서 구조를 대충 잡게 됨: 초반 속도는 빠른데, 나중에 정리 비용이 생기더라고요.

    제 경험상 Ubuntu는 “빨리 된다”가 장점이자 함정이었습니다. 급하게 올리다 보면 권한, 백업 경로, 로그 로테이션(log rotation, 로그 순환 관리) 같은 운영 기본기를 뒤로 미루게 되거든요.

    Fedora Ubuntu 비교 결과: 1년 사용 후기에서 체감된 차이

    그럼 결국 어떤 차이가 남았냐고 물으시면, 저는 이렇게 정리합니다.

    평가 항목 Fedora 체감 Ubuntu 체감
    초기 설치 속도 무난함 조금 더 빠름
    문서 검색 편의성 괜찮지만 편차 있음 매우 좋음
    보안 정책 이해 필요성 높음 중간
    최신 도구 활용 만족도 높음 무난함
    장기 운영 심리적 안정감 설정 이해 후 높음 익숙하면 높음

    제가 직접 해보니 Fedora Ubuntu 비교에서 가장 중요한 건 성능 수치가 아니라 운영 철학이었습니다. Fedora는 “구조를 이해하고 운영하라”는 느낌이 강했고, Ubuntu는 “일단 올리고 필요할 때 넓은 자료를 참고하라”는 방향이 강했습니다. 둘 다 홈 서버에 충분히 좋습니다. 다만 제 홈랩 기준으로는, 컨테이너와 보안 흐름을 진지하게 다루는 서비스는 Fedora가 재미있었고, 가족이 같이 쓰는 서비스나 빨리 안정화해야 하는 용도는 Ubuntu가 마음이 편했습니다.

    홈 서버 모니터링 대시보드와 서비스 상태가 안정적으로 표시되는 결과 화면

    서비스 상태, 리소스 사용량, 정상 동작 여부를 확인하는 검증 결과 이미지입니다.

    어떤 분에게 Fedora가 맞고, 어떤 분에게 Ubuntu가 맞을까요

    Fedora가 잘 맞는 경우

    • 최신 리눅스 흐름을 직접 익히고 싶은 분
    • SELinux를 포함한 보안 운영 감각을 키우고 싶은 분
    • Podman 중심의 컨테이너 운영을 해보고 싶은 분
    • 홈랩 자체를 공부와 실험의 장으로 쓰는 분

    Ubuntu가 잘 맞는 경우

    • 검색해서 빨리 구축하고 싶은 분
    • 문서와 커뮤니티 자료가 많은 환경을 선호하는 분
    • 처음 홈 서버를 시작하는 분
    • 운영 표준을 단순하게 가져가고 싶은 분

    혹시 이런 경험 있으신가요? 분명 설치는 쉬웠는데, 3개월 뒤 업데이트 한 번에 갑자기 손이 많이 가는 상황이요. 그래서 저는 이제 배포판을 고를 때 “첫날 편한가”보다 “여섯 달 뒤 덜 힘든가”를 더 보게 됐습니다.

    정리와 다음 단계

    이번 Fedora Ubuntu 비교를 1년 사용 후기 관점에서 정리하면 이렇습니다. Fedora는 배울 게 많고 구조적으로 단단한 느낌, Ubuntu는 빠르게 안정권에 진입하기 쉬운 느낌이었습니다. 저도 처음엔 Ubuntu가 더 편했는데, 홈랩에서 이것저것 실험하다 보니 Fedora 쪽의 매력도 분명히 크게 느꼈습니다. 결국 정답은 하나가 아니라, 내 서비스 성격에 맞는 선택이더라고요.

    1. 처음 홈 서버를 시작한다면 Ubuntu로 기본 운영 루틴을 익혀보세요.
    2. 보안 정책과 최신 도구 흐름이 궁금하다면 Fedora를 별도 장비나 VM(Virtual Machine, 가상 머신)에서 병행해 보세요.
    3. 둘 중 무엇을 선택하든 로그 확인, 백업, 업데이트 점검 자동화는 초반부터 잡는 걸 추천드립니다.

    다음 글에서는 홈 서버 운영에서 중요한 백업 전략과 리버스 프록시 구성 이야기를 다뤄볼 예정입니다. 이전 글의 모니터링 기본편이 있다면 함께 읽어보셔도 흐름이 잘 이어집니다.

    Fedora와 Ubuntu 선택 기준을 요약한 인포그래픽 스타일 비교표

    어떤 사용자가 어떤 배포판을 선택하면 좋은지 한눈에 정리한 요약 이미지입니다.

    자주 묻는 질문

    Q. 홈 서버 입문자는 Fedora보다 Ubuntu가 낫나요?

    대체로는 그렇습니다. 자료량과 예제 폭이 넓어서 초반 시행착오를 줄이기 쉽거든요. 다만 공부 목적이 강하면 Fedora도 충분히 좋은 선택입니다.

    Q. Fedora는 서버에서 불안정한가요?

    제가 써본 기준으로 무조건 그렇진 않았습니다. 다만 업데이트 흐름과 보안 정책을 이해하지 않으면 더 까다롭게 느껴질 수 있습니다.

    Q. Ubuntu가 무조건 더 쉬운가요?

    처음엔 쉬운데, 그래서 구조를 대충 잡고 넘어가면 나중에 정리 비용이 생길 수 있습니다. 쉬운 것과 잘 운영하는 것은 조금 다른 문제더라고요.

    Q. 결론적으로 무엇을 추천하나요?

    가족이 함께 쓰는 서비스, 빠른 구축, 문서 접근성이 중요하면 Ubuntu를 추천합니다. 홈랩 실험, 최신 흐름, 보안 학습이 중요하면 Fedora를 추천드립니다.