⏱️ 예상 읽기 시간: 14분

서론

네트워크 보안은 현대 IT 환경에서 가장 중요한 요소 중 하나입니다. 특히 홈 오피스나 소규모 사무실에서는 누가 네트워크에 연결되어 있는지 파악하고, 새로운 디바이스의 무단 접속을 감지하는 것이 필수적입니다.

WatchYourLAN은 이러한 요구를 해결하는 경량화된 네트워크 IP 스캐너입니다. Go와 TypeScript로 구축된 이 도구는 6k GitHub 스타를 받으며 개발자들과 네트워크 관리자들에게 인정받고 있습니다.

본 튜토리얼에서는 WatchYourLAN의 설치부터 고급 설정, Grafana 대시보드 연동까지 macOS 환경에서 실습과 함께 알아보겠습니다.

WatchYourLAN이란?

핵심 기능

🔍 네트워크 스캐닝

  • 경량화된 ARP 기반 IP 스캐닝
  • 실시간 네트워크 호스트 탐지
  • 다중 인터페이스 동시 모니터링

🚨 알림 시스템

  • 새로운 호스트 발견 시 즉시 알림
  • Shoutrrr 통합으로 다양한 플랫폼 지원
  • Discord, Telegram, Slack, Email 등 지원

📊 모니터링 및 분석

  • 호스트 온라인/오프라인 히스토리 추적
  • 웹 GUI를 통한 직관적인 관리
  • InfluxDB2, Prometheus 연동 지원

🎨 사용자 친화적 인터페이스

  • 현대적인 웹 GUI
  • 다양한 Bootstrap 테마 지원
  • 반응형 디자인

기술 스택

백엔드: Go 프론트엔드: TypeScript + Bootstrap 데이터베이스: SQLite (기본) / PostgreSQL 모니터링: InfluxDB2, Prometheus, Grafana 배포: Docker, 바이너리

시스템 요구사항

macOS 환경 확인

# macOS 버전 확인
sw_vers

# 네트워크 인터페이스 확인
ifconfig | grep -E '^[a-z]'

# Docker 설치 확인
docker --version

# Go 설치 확인 (소스 빌드용)
go version

필수 도구 설치

# Homebrew 설치 (없는 경우)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Docker Desktop 설치
brew install --cask docker

# Docker 실행 확인
docker run hello-world

# arp-scan 설치 (선택사항)
brew install arp-scan

# 네트워크 정보 확인
ipconfig getifaddr en0
route -n get default | grep gateway

설치 가이드

방법 1: Docker를 이용한 설치 (권장)

기본 Docker 실행

# 네트워크 인터페이스 확인
INTERFACE=$(route get default | grep interface | awk '{print $2}')
echo "Primary interface: $INTERFACE"

# 시간대 설정
TIMEZONE=$(ls -la /etc/localtime | cut -d/ -f8-9)
echo "Timezone: $TIMEZONE"

# WatchYourLAN 실행
docker run -d --name watchyourlan \
  -e "IFACES=$INTERFACE" \
  -e "TZ=$TIMEZONE" \
  --network="host" \
  -v $(pwd)/watchyourlan:/data/WatchYourLAN \
  aceberg/watchyourlan

# 실행 상태 확인
docker ps | grep watchyourlan
docker logs watchyourlan

Docker Compose 설정

# docker-compose.yml 생성
cat > docker-compose.yml << 'EOF'
version: '3.8'

services:
  watchyourlan:
    image: aceberg/watchyourlan
    container_name: watchyourlan
    network_mode: host
    environment:
      - IFACES=$INTERFACE
      - TZ=$TIMEZONE
      - HOST=0.0.0.0
      - PORT=8840
      - THEME=sand
      - COLOR=dark
      - TIMEOUT=60
      - LOG_LEVEL=info
      - TRIM_HIST=48
      - HIST_IN_DB=false
      # 알림 설정 (선택사항)
      # - SHOUTRRR_URL=gotify://192.168.0.1:8083/token/?title=Unknown host detected
    volumes:
      - ./data:/data/WatchYourLAN
    restart: unless-stopped

  # 선택사항: InfluxDB2 (모니터링 데이터 저장용)
  influxdb:
    image: influxdb:2.7
    container_name: influxdb2
    ports:
      - "8086:8086"
    environment:
      - DOCKER_INFLUXDB_INIT_MODE=setup
      - DOCKER_INFLUXDB_INIT_USERNAME=admin
      - DOCKER_INFLUXDB_INIT_PASSWORD=adminpassword
      - DOCKER_INFLUXDB_INIT_ORG=home
      - DOCKER_INFLUXDB_INIT_BUCKET=watchyourlan
    volumes:
      - influxdb-data:/var/lib/influxdb2
    restart: unless-stopped

volumes:
  influxdb-data:
EOF

# 실행
docker-compose up -d

# 로그 확인
docker-compose logs -f watchyourlan

방법 2: 소스코드 빌드

Go 환경 설정

# Go 설치 (Homebrew)
brew install go

# 작업 디렉토리 생성
mkdir -p ~/projects/watchyourlan
cd ~/projects/watchyourlan

# 소스코드 클론
git clone https://github.com/aceberg/WatchYourLAN.git
cd WatchYourLAN

# 종속성 확인
go mod download
go mod verify

# 빌드
make build

# 실행 파일 확인
ls -la WatchYourLAN

# 설정 디렉토리 생성
mkdir -p ~/watchyourlan-data

# 실행
./WatchYourLAN -d ~/watchyourlan-data

자동 설치 스크립트

#!/bin/bash
# 파일명: install_watchyourlan.sh

set -e

echo "🔍 WatchYourLAN 자동 설치 스크립트"

# 환경 확인
if ! command -v docker &> /dev/null; then
    echo "❌ Docker가 설치되지 않았습니다."
    echo "Homebrew로 Docker Desktop을 설치하세요: brew install --cask docker"
    exit 1
fi

# 네트워크 인터페이스 자동 탐지
INTERFACE=$(route get default | grep interface | awk '{print $2}' 2>/dev/null || echo "en0")
TIMEZONE=$(ls -la /etc/localtime | cut -d/ -f8-9 2>/dev/null || echo "Asia/Seoul")

echo "🌐 감지된 네트워크 인터페이스: $INTERFACE"
echo "🕐 시간대: $TIMEZONE"

# 데이터 디렉토리 생성
DATA_DIR="./watchyourlan-data"
mkdir -p "$DATA_DIR"

# Docker 실행
echo "🚀 WatchYourLAN 시작..."
docker run -d --name watchyourlan \
  -e "IFACES=$INTERFACE" \
  -e "TZ=$TIMEZONE" \
  -e "TIMEOUT=60" \
  -e "LOG_LEVEL=info" \
  --network="host" \
  -v "$(pwd)/$DATA_DIR:/data/WatchYourLAN" \
  aceberg/watchyourlan

# 상태 확인
sleep 5
if docker ps | grep -q watchyourlan; then
    echo "✅ WatchYourLAN이 성공적으로 시작되었습니다!"
    echo "🌐 웹 인터페이스: http://localhost:8840"
    echo "📊 실시간 로그: docker logs -f watchyourlan"
    echo "🛑 중지: docker stop watchyourlan"
    echo "🗑️ 제거: docker rm watchyourlan"
else
    echo "❌ 설치에 실패했습니다. 로그를 확인하세요:"
    docker logs watchyourlan
fi
# 스크립트 실행 권한 부여
chmod +x install_watchyourlan.sh

# 실행
./install_watchyourlan.sh

기본 설정 및 사용법

웹 인터페이스 접속

설치가 완료되면 웹 브라우저에서 http://localhost:8840에 접속합니다.

기본 구성 요소

📊 대시보드

  • 실시간 네트워크 스캔 결과
  • 온라인/오프라인 호스트 상태
  • 최근 활동 히스토리

⚙️ 설정 페이지

  • 스캔 간격 조정
  • 알림 설정
  • 테마 변경

📈 히스토리

  • 호스트별 접속 기록
  • 시간대별 네트워크 활동
  • 통계 정보

환경 변수 설정

주요 환경 변수들을 자세히 알아보겠습니다:

# config_v2.yaml 예제
host: "0.0.0.0"           # 리스닝 주소
port: "8840"              # 웹 GUI 포트
theme: "sand"             # Bootstrap 테마
color: "dark"             # 배경색 (light/dark)
ifaces: "en0"             # 스캔할 네트워크 인터페이스
timeout: 60               # 스캔 간격 (초)
log_level: "info"         # 로그 레벨
trim_hist: 48             # 히스토리 보관 기간 (시간)
hist_in_db: false         # DB에 히스토리 저장 여부

알림 시스템 설정

WatchYourLAN은 Shoutrrr를 통해 다양한 플랫폼으로 알림을 보낼 수 있습니다.

Discord 알림 설정

# Discord Webhook URL 설정
DISCORD_WEBHOOK="discord://token@id"

# Docker 환경변수로 설정
docker run -d --name watchyourlan \
  -e "IFACES=en0" \
  -e "SHOUTRRR_URL=$DISCORD_WEBHOOK" \
  --network="host" \
  -v $(pwd)/watchyourlan:/data/WatchYourLAN \
  aceberg/watchyourlan

Telegram 알림 설정

# Telegram Bot Token과 Chat ID 설정
TELEGRAM_TOKEN="your_bot_token"
TELEGRAM_CHAT_ID="your_chat_id"
TELEGRAM_URL="telegram://$TELEGRAM_TOKEN@telegram?chats=$TELEGRAM_CHAT_ID"

# 환경 변수로 설정
export SHOUTRRR_URL="$TELEGRAM_URL"

Email 알림 설정

# SMTP 이메일 설정
EMAIL_URL="smtp://username:password@smtp.gmail.com:587/?from=from@example.com&to=to@example.com"

# Gotify 자체 호스팅 알림
GOTIFY_URL="gotify://192.168.1.100:8080/AwQqpAae.rrl5Ob/?title=WatchYourLAN Alert"

알림 테스트 스크립트

#!/bin/bash
# 파일명: test_notifications.sh

# 알림 설정 테스트 함수
test_notification() {
    local service=$1
    local url=$2
    
    echo "🔔 $service 알림 테스트 중..."
    
    # 임시 컨테이너로 알림 테스트
    docker run --rm \
      -e "SHOUTRRR_URL=$url" \
      aceberg/watchyourlan echo "테스트 알림"
    
    if [ $? -eq 0 ]; then
        echo "✅ $service 알림 설정 성공"
    else
        echo "❌ $service 알림 설정 실패"
    fi
}

# 각 서비스별 테스트
test_notification "Discord" "$DISCORD_WEBHOOK"
test_notification "Telegram" "$TELEGRAM_URL"
test_notification "Email" "$EMAIL_URL"

고급 설정

다중 인터페이스 모니터링

# 여러 네트워크 인터페이스 동시 모니터링
IFACES="en0 en1 utun0"

docker run -d --name watchyourlan \
  -e "IFACES=$IFACES" \
  -e "TZ=Asia/Seoul" \
  --network="host" \
  -v $(pwd)/watchyourlan:/data/WatchYourLAN \
  aceberg/watchyourlan

VLAN 환경 설정

# VLAN 인터페이스 스캔 설정
# ARP_ARGS를 사용하여 특정 VLAN 대역 스캔
docker run -d --name watchyourlan \
  -e "IFACES=en0" \
  -e "ARP_ARGS=-r 3 -t 500" \
  -e "ARP_STRS=192.168.1.0/24,192.168.10.0/24" \
  --network="host" \
  -v $(pwd)/watchyourlan:/data/WatchYourLAN \
  aceberg/watchyourlan

PostgreSQL 데이터베이스 연동

# PostgreSQL 컨테이너 실행
docker run -d --name postgres \
  -e POSTGRES_DB=watchyourlan \
  -e POSTGRES_USER=wyl \
  -e POSTGRES_PASSWORD=password123 \
  -p 5432:5432 \
  postgres:15

# WatchYourLAN PostgreSQL 설정
PG_CONNECT="postgres://wyl:password123@localhost:5432/watchyourlan?sslmode=disable"

docker run -d --name watchyourlan \
  -e "IFACES=en0" \
  -e "USE_DB=postgres" \
  -e "PG_CONNECT=$PG_CONNECT" \
  -e "HIST_IN_DB=true" \
  --network="host" \
  -v $(pwd)/watchyourlan:/data/WatchYourLAN \
  aceberg/watchyourlan

InfluxDB2 및 Grafana 연동

InfluxDB2 설정

# InfluxDB2 컨테이너 실행
docker run -d --name influxdb2 \
  -p 8086:8086 \
  -e DOCKER_INFLUXDB_INIT_MODE=setup \
  -e DOCKER_INFLUXDB_INIT_USERNAME=admin \
  -e DOCKER_INFLUXDB_INIT_PASSWORD=adminpassword \
  -e DOCKER_INFLUXDB_INIT_ORG=home \
  -e DOCKER_INFLUXDB_INIT_BUCKET=watchyourlan \
  -v influxdb-data:/var/lib/influxdb2 \
  influxdb:2.7

# InfluxDB2 토큰 생성 (웹 UI: http://localhost:8086)
# 또는 CLI로 토큰 생성
docker exec influxdb2 influx auth create \
  --org home \
  --all-access \
  --description "WatchYourLAN Token"

WatchYourLAN InfluxDB2 연동

# InfluxDB2 연동 설정
INFLUX_TOKEN="your_influxdb_token_here"

docker run -d --name watchyourlan \
  -e "IFACES=en0" \
  -e "INFLUX_ENABLE=true" \
  -e "INFLUX_ADDR=http://localhost:8086/" \
  -e "INFLUX_BUCKET=watchyourlan" \
  -e "INFLUX_ORG=home" \
  -e "INFLUX_TOKEN=$INFLUX_TOKEN" \
  --network="host" \
  -v $(pwd)/watchyourlan:/data/WatchYourLAN \
  aceberg/watchyourlan

Grafana 대시보드 설정

# Grafana 컨테이너 실행
docker run -d --name grafana \
  -p 3000:3000 \
  -e GF_SECURITY_ADMIN_PASSWORD=admin \
  -v grafana-data:/var/lib/grafana \
  grafana/grafana:latest

# Grafana 접속: http://localhost:3000 (admin/admin)

Grafana 설정 스크립트

#!/bin/bash
# 파일명: setup_grafana.sh

# Grafana API를 통한 자동 설정
GRAFANA_URL="http://localhost:3000"
GRAFANA_USER="admin"
GRAFANA_PASS="admin"

# InfluxDB 데이터소스 추가
curl -X POST "$GRAFANA_URL/api/datasources" \
  -H "Content-Type: application/json" \
  -u "$GRAFANA_USER:$GRAFANA_PASS" \
  -d '{
    "name": "InfluxDB-WatchYourLAN",
    "type": "influxdb",
    "url": "http://localhost:8086",
    "access": "proxy",
    "database": "",
    "jsonData": {
      "version": "Flux",
      "organization": "home",
      "defaultBucket": "watchyourlan",
      "tlsSkipVerify": true
    },
    "secureJsonData": {
      "token": "'$INFLUX_TOKEN'"
    }
  }'

echo "✅ Grafana 데이터소스 설정 완료"

실전 사용 시나리오

홈 네트워크 모니터링

#!/bin/bash
# 파일명: home_network_monitor.sh

# 홈 네트워크 보안 모니터링 설정
echo "🏠 홈 네트워크 모니터링 설정"

# 신뢰할 수 있는 기기 목록 (MAC 주소)
TRUSTED_DEVICES=(
    "aa:bb:cc:dd:ee:ff"  # iPhone
    "11:22:33:44:55:66"  # MacBook
    "77:88:99:aa:bb:cc"  # iPad
)

# 알림 설정 (Telegram)
TELEGRAM_URL="telegram://your_bot_token@telegram?chats=your_chat_id"

# WatchYourLAN 실행 (엄격한 모니터링)
docker run -d --name home-monitor \
  -e "IFACES=en0" \
  -e "TIMEOUT=30" \
  -e "SHOUTRRR_URL=$TELEGRAM_URL" \
  -e "LOG_LEVEL=debug" \
  --network="host" \
  -v $(pwd)/home-monitor:/data/WatchYourLAN \
  aceberg/watchyourlan

echo "🔐 홈 네트워크 보안 모니터링 시작"
echo "📱 알 수 없는 기기 발견 시 Telegram으로 알림"

사무실 네트워크 관리

#!/bin/bash
# 파일명: office_network_setup.sh

# 사무실 다중 VLAN 모니터링
echo "🏢 사무실 네트워크 모니터링 설정"

# 다중 네트워크 대역 스캔
NETWORK_RANGES="192.168.1.0/24,192.168.10.0/24,192.168.20.0/24"

# Slack 알림 설정
SLACK_WEBHOOK="slack://token@workspace/channel"

# 전용 PostgreSQL 데이터베이스
PG_CONNECT="postgres://netadmin:securepass@db-server:5432/network_monitor"

docker run -d --name office-monitor \
  -e "IFACES=en0 en1" \
  -e "ARP_STRS=$NETWORK_RANGES" \
  -e "TIMEOUT=60" \
  -e "USE_DB=postgres" \
  -e "PG_CONNECT=$PG_CONNECT" \
  -e "HIST_IN_DB=true" \
  -e "SHOUTRRR_URL=$SLACK_WEBHOOK" \
  -e "INFLUX_ENABLE=true" \
  --network="host" \
  -v $(pwd)/office-monitor:/data/WatchYourLAN \
  aceberg/watchyourlan

echo "📊 모든 네트워크 활동이 데이터베이스에 저장됩니다"

문제 해결 가이드

일반적인 문제와 해결책

1. 네트워크 인터페이스 감지 문제

# 현재 활성 인터페이스 확인
ifconfig | grep -E '^[a-z]' | grep -v lo

# 기본 게이트웨이 인터페이스 확인
route get default | grep interface

# Docker 네트워크 문제 시 host 모드 강제 사용
docker run --network="host" aceberg/watchyourlan

2. 권한 관련 문제

# ARP 스캔 권한 확인
sudo arp-scan -l

# Docker 실행 시 권한 오류 해결
sudo docker run --privileged aceberg/watchyourlan

# macOS에서 Network Extension 권한 허용
# 시스템 환경설정 > 보안 및 개인정보 보호 > 개인정보 보호

3. 포트 충돌 문제

# 8840 포트 사용 확인
lsof -i :8840

# 다른 포트로 실행
docker run -e "PORT=8841" -p 8841:8841 aceberg/watchyourlan

디버깅 및 로그 분석

#!/bin/bash
# 파일명: debug_watchyourlan.sh

echo "🔍 WatchYourLAN 디버깅 도구"

# 컨테이너 상태 확인
echo "📊 컨테이너 상태:"
docker ps -a | grep watchyourlan

# 자세한 로그 확인
echo "📝 상세 로그:"
docker logs --details --timestamps watchyourlan | tail -50

# 네트워크 연결 테스트
echo "🌐 네트워크 연결 테스트:"
curl -s http://localhost:8840/api/health || echo "웹 서비스 응답 없음"

# 메모리 및 CPU 사용량
echo "💻 리소스 사용량:"
docker stats watchyourlan --no-stream

# 설정 파일 확인
echo "⚙️ 설정 확인:"
docker exec watchyourlan cat /data/WatchYourLAN/config_v2.yaml

# 네트워크 스캔 테스트
echo "🔍 수동 ARP 스캔 테스트:"
if command -v arp-scan &> /dev/null; then
    sudo arp-scan -l | head -10
else
    echo "arp-scan이 설치되지 않음. brew install arp-scan으로 설치하세요."
fi

성능 최적화

#!/bin/bash
# 파일명: optimize_watchyourlan.sh

echo "⚡ WatchYourLAN 성능 최적화"

# 최적화된 설정
cat > docker-compose-optimized.yml << 'EOF'
version: '3.8'

services:
  watchyourlan:
    image: aceberg/watchyourlan
    container_name: watchyourlan-optimized
    network_mode: host
    environment:
      - IFACES=en0
      - TZ=Asia/Seoul
      - TIMEOUT=30          # 스캔 간격 단축
      - LOG_LEVEL=warn      # 로그 레벨 조정
      - TRIM_HIST=24        # 히스토리 보관 기간 단축
      - HIST_IN_DB=false    # 메모리 저장으로 성능 향상
      - ARP_ARGS=-r 1       # ARP 재시도 횟수 제한
    volumes:
      - ./data:/data/WatchYourLAN
    restart: unless-stopped
    deploy:
      resources:
        limits:
          memory: 256M
          cpus: '0.5'
        reservations:
          memory: 128M
          cpus: '0.2'
EOF

echo "🚀 최적화된 설정으로 실행:"
docker-compose -f docker-compose-optimized.yml up -d

API 활용 및 자동화

REST API 사용 예제

#!/bin/bash
# 파일명: api_examples.sh

API_BASE="http://localhost:8840/api"

echo "📡 WatchYourLAN API 사용 예제"

# 현재 온라인 호스트 조회
echo "🟢 온라인 호스트 목록:"
curl -s "$API_BASE/hosts" | jq '.[] | select(.state == "online") | {ip, mac, name}'

# 히스토리 데이터 조회
echo "📈 최근 히스토리:"
curl -s "$API_BASE/history" | jq '.[:5]'

# 설정 확인
echo "⚙️ 현재 설정:"
curl -s "$API_BASE/config" | jq '.'

# 통계 정보
echo "📊 통계 정보:"
curl -s "$API_BASE/stats" | jq '.'

Python 자동화 스크립트

#!/usr/bin/env python3
# 파일명: watchyourlan_automation.py

import requests
import json
import time
from datetime import datetime

class WatchYourLANClient:
    def __init__(self, base_url="http://localhost:8840"):
        self.base_url = base_url
        self.api_base = f"{base_url}/api"
    
    def get_online_hosts(self):
        """온라인 호스트 목록 조회"""
        response = requests.get(f"{self.api_base}/hosts")
        if response.status_code == 200:
            hosts = response.json()
            return [host for host in hosts if host.get('state') == 'online']
        return []
    
    def get_new_hosts(self, hours=24):
        """최근 발견된 새로운 호스트"""
        response = requests.get(f"{self.api_base}/history")
        if response.status_code == 200:
            history = response.json()
            # 최근 24시간 내 첫 등장 호스트 필터링
            new_hosts = []
            for entry in history:
                if entry.get('event') == 'first_seen':
                    new_hosts.append(entry)
            return new_hosts[:10]  # 최근 10개
        return []
    
    def generate_report(self):
        """네트워크 상태 리포트 생성"""
        online_hosts = self.get_online_hosts()
        new_hosts = self.get_new_hosts()
        
        report = {
            "timestamp": datetime.now().isoformat(),
            "online_count": len(online_hosts),
            "online_hosts": online_hosts,
            "new_hosts_count": len(new_hosts),
            "new_hosts": new_hosts
        }
        
        return report

def main():
    client = WatchYourLANClient()
    
    print("🔍 WatchYourLAN 네트워크 리포트")
    print("=" * 50)
    
    report = client.generate_report()
    
    print(f"📅 리포트 시간: {report['timestamp']}")
    print(f"🟢 온라인 호스트: {report['online_count']}개")
    print(f"🆕 새로운 호스트: {report['new_hosts_count']}개")
    
    if report['new_hosts']:
        print("\n🚨 새로 발견된 호스트:")
        for host in report['new_hosts']:
            print(f"  - IP: {host.get('ip', 'N/A')}")
            print(f"    MAC: {host.get('mac', 'N/A')}")
            print(f"    시간: {host.get('time', 'N/A')}")

if __name__ == "__main__":
    main()

zshrc Aliases 설정

# ~/.zshrc에 추가할 WatchYourLAN 관련 aliases
cat >> ~/.zshrc << 'EOF'

# WatchYourLAN 관련 aliases
alias wyl-start="docker start watchyourlan"
alias wyl-stop="docker stop watchyourlan"
alias wyl-logs="docker logs -f watchyourlan"
alias wyl-restart="docker restart watchyourlan"
alias wyl-update="docker pull aceberg/watchyourlan && docker restart watchyourlan"
alias wyl-web="open http://localhost:8840"
alias wyl-stats="curl -s http://localhost:8840/api/stats | jq"
alias wyl-hosts="curl -s http://localhost:8840/api/hosts | jq '.[] | select(.state == \"online\")'"

# 네트워크 진단 aliases
alias netinfo="ifconfig | grep -E '^[a-z]|inet '"
alias netgw="route get default | grep gateway"
alias netscan="sudo arp-scan -l | head -20"

# WatchYourLAN 설치 및 관리 함수
wyl-install() {
    echo "🔍 WatchYourLAN 설치 시작..."
    INTERFACE=$(route get default | grep interface | awk '{print $2}' 2>/dev/null || echo "en0")
    docker run -d --name watchyourlan \
        -e "IFACES=$INTERFACE" \
        -e "TZ=Asia/Seoul" \
        --network="host" \
        -v $(pwd)/watchyourlan:/data/WatchYourLAN \
        aceberg/watchyourlan
    echo "✅ 설치 완료: http://localhost:8840"
}

wyl-backup() {
    echo "💾 WatchYourLAN 데이터 백업..."
    docker exec watchyourlan tar czf /tmp/backup.tar.gz /data/WatchYourLAN
    docker cp watchyourlan:/tmp/backup.tar.gz ./watchyourlan-backup-$(date +%Y%m%d).tar.gz
    echo "✅ 백업 완료"
}

EOF

# zshrc 재로드
source ~/.zshrc

성능 벤치마킹

#!/bin/bash
# 파일명: benchmark_watchyourlan.sh

echo "📊 WatchYourLAN 성능 벤치마킹"

# 테스트 시작 시간
START_TIME=$(date +%s)

echo "🔍 1. 스캔 속도 테스트..."
docker logs watchyourlan 2>&1 | grep -E "Scan completed|Found [0-9]+ hosts" | tail -5

echo "💾 2. 메모리 사용량 테스트..."
docker stats watchyourlan --no-stream | awk 'NR==2 {print "메모리 사용량:", $4}'

echo "🌐 3. API 응답 시간 테스트..."
for endpoint in "hosts" "history" "config" "stats"; do
    response_time=$(curl -o /dev/null -s -w "%{time_total}" http://localhost:8840/api/$endpoint)
    echo "  /$endpoint: ${response_time}초"
done

echo "📈 4. 대용량 네트워크 시뮬레이션..."
# 여러 서브넷 동시 스캔 테스트
docker exec watchyourlan sh -c 'env | grep ARP_STRS'

END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))

echo "✅ 벤치마킹 완료 (소요 시간: ${DURATION}초)"

결론

WatchYourLAN은 네트워크 보안과 모니터링을 위한 강력하면서도 사용하기 쉬운 도구입니다. 이 튜토리얼을 통해 다음과 같은 내용을 학습했습니다:

🎯 주요 성과

✅ 완전한 설치 가이드

  • Docker와 소스코드 빌드 두 가지 방법 마스터
  • macOS 환경 최적화 설정
  • 자동화 스크립트를 통한 원클릭 설치

✅ 실전 모니터링 시스템 구축

  • 홈/사무실 네트워크 보안 강화
  • 실시간 알림 시스템 구축
  • 다중 플랫폼 알림 연동

✅ 고급 데이터 분석 환경

  • InfluxDB2와 Grafana 연동
  • 장기간 네트워크 트렌드 분석
  • API 기반 자동화 시스템

🚀 다음 단계

  1. 모니터링 확장: 더 많은 네트워크 세그먼트로 확장
  2. 보안 강화: 침입 탐지 시스템과 연동
  3. 자동화: 의심스러운 활동 자동 차단
  4. 분석 고도화: 머신러닝 기반 이상 탐지

📚 추가 학습 리소스

공식 문서: WatchYourLAN GitHub Docker Hub: aceberg/watchyourlan 커뮤니티: GitHub Discussions

WatchYourLAN은 단순한 네트워크 스캐너를 넘어서 종합적인 네트워크 보안 솔루션의 핵심 구성 요소가 될 수 있습니다. 지속적인 모니터링과 적절한 알림 설정을 통해 네트워크 보안을 크게 향상시킬 수 있습니다.

💡 Pro Tip: 정기적으로 스캔 결과를 검토하고, 새로운 기기가 발견될 때마다 해당 기기의 정체를 확인하는 습관을 들이세요. 이것이 효과적인 네트워크 보안의 첫걸음입니다.