| 자산 | 역할 | 위치 |
|---|---|---|
| Mac Studio | 주 작업기, 클로드 코드 운영, 자동화 스크립트 호스트 | 로컬 |
| NAS 1 — sysadcom (RS822+) | 웹 호스팅, 24/7 서비스, Docker 메인 | 외부 도메인 sysadcom.dscloud.me |
| NAS 2 — live79bambu (RS815+) | 대용량 저장(영화), 백업 | 외부 도메인 live79bambu.dscloud.me |
| 항목 | sysadcom (메인) | live79bambu (서브) |
|---|---|---|
| 모델 | RS822+ (2022) | RS815+ (2015) |
| CPU | AMD Ryzen V1500B (Zen, 4코어 2.2GHz) | Intel Atom C2538 (4코어 2.4GHz) |
| RAM | 32 GB | 2 GB |
| 저장 용량 | 37 TB | 14 TB |
| DSM 버전 | 7.3.2 | 7.1.1 |
| 인터넷 회선 | 1 Gbps | 10 Gbps |
| 외부 노출 포트 | 80 (HTTP), 5001 (DSM) | 5001 (DSM) |
| 실측 다운로드 속도 | ~561 Mbps | ~679 Mbps |
| 호칭 | NAS 경로 | 메인 (sysadcom) | 백업 (live79bambu) | 용도 |
|---|---|---|---|---|
| 홈 | /web/index.html | http://sysadcom.dscloud.me/ | — (의도적 미공개) | sysadcom 메인 인덱스 (카드형 허브) |
| 보안 2급 | /web/portfolio/ | http://sysadcom.dscloud.me/portfolio/ | http://live79bambu.dscloud.me:8080/portfolio/ | 토스 포트폴리오 실시간 보고서 |
| 로네 (Ronnefeldt) | /web/Ronnefeldt/ | http://sysadcom.dscloud.me/Ronnefeldt/ | http://live79bambu.dscloud.me:8080/Ronnefeldt/ | 로네펠트 선릉점 직원 관리 SPA |
| 기술문서 (Manual, 통합) | /web/Manual/ | http://sysadcom.dscloud.me/Manual/ | http://live79bambu.dscloud.me:8080/Manual/ | 통합 허브 — 운영 매뉴얼 + 부동산 문서 (구 /web/Dongseon/ 통합 / 2026-05-17)· index.html 카드 허브· operation-manual.html 운영 매뉴얼 (이 문서)· ulsan-sincheon-apartments.html 부동산 |
| 라이브 (Office Live) | /web/Office Live/ | http://sysadcom.dscloud.me/Office%20Live/ | — (라이브 스트림이라 미러 의미 없음) | HLS 라이브 스트리밍 (LG UltraFine 카메라) |
| 애플에너지 (수력발전) | /web/appleenergy/ | https://sysadcom.dscloud.me/appleenergy/ | — | 수력발전 업무일지 대시보드 (2026-07-08 신설) |
| 86 (Toyota86) | /web/toyota86/ | https://sysadcom.dscloud.me/toyota86/ | — | 토요타86 차량 정비이력 (단일 index.html) |
com.sysadcom.web-mirror.plist가 30분 주기로 메인 → 백업 NAS 폴더 sync.portfolio, Manual, Ronnefeldt (Ronnefeldt는 추가로 deploy 직후 즉시 미러).index.html 의도적으로 삭제 — URL 직접 알아야 접근 (실수 노출 방지).~/bin/sync-web-to-live79.sh · 로그: ~/Library/Logs/sync-web-to-live79.log
사용자: 배은광 — 한국 주식 투자자 (한국투자증권 A 계좌, 토스증권 B 계좌)
토스 watchlists 페이지 (Tampermonkey 오버레이)
↓ 10초마다 가격 읽기
iCloud Drive (~/Library/Mobile Documents/com~apple~CloudDocs/Code Claude/보안 2급/)
├── portfolio_data.json
└── daily.json
↓ launchd 30초마다 sync (~/bin/sync-icloud-to-nas.sh)
NAS sysadcom — Web Station
└── /web/portfolio/
↓ HTTP fetch
보고서: http://sysadcom.dscloud.me/portfolio/
index.html — 메인 (보유 + Daily P&L + 카드 링크)trades-history.html — 매매 내역cashflow.html — 현금 흐름daily-pl.html — 일별 P&L + 차트trades.html — 거래 입력 (NAS 로그인)bo-an-2-geum-icloud.user.js — Tampermonkey 오버레이 (~32KB)portfolio_data.json / trades.json / daily.json — 데이터 (로컬이 원본)보안 2급.html — 오버레이가 10초마다 자동 생성하는 시점 스냅샷타입: 단일 HTML SPA (~140KB), 한국어, 클라이언트 사이드 저장(localStorage)
~/bin/ronnefeldt-deploy.sh 가 배포 직전에 현재 NAS index.html → ronnefeldt-pro.html로 자동 백업cp ronnefeldt-pro.html index.html| 구성 | 내용 |
|---|---|
| 소스 | LG UltraFine 카메라 (장치 이름으로 고정) + 무음 오디오 (anullsrc 합성) — 2026-07-08 재작성 |
| 인코딩 | H.264 720p @15fps + AAC stereo 48kHz (무음 트랙) |
| 세그먼트 | 2초 단위 .ts, 5개 rolling window (delete_segments) |
| 워터마크 | 좌하단 실시간 시각 |
| 운영 스크립트 | ~/bin/live-stream.sh (launchd 24/7), ~/bin/live-record-daemon.sh (트리거 녹화) |
| 자동 청소 | ~/bin/live-cleanup.sh — launchd 1시간 주기, 5분+ 묵은 .ts 일괄 삭제 |
| 외부 시청 URL | http://sysadcom.dscloud.me/Office%20Live/ |
-f avfoundation -framerate 15 -capture_cursor 0 -i "LG UltraFine 디스플레이 카메라" \ -f lavfi -i "anullsrc=r=48000:cl=stereo" \ -map 0:v -map 1:a
-i "0:1")로 지정하면 아이폰 연속성 카메라가 붙고 떨어질 때마다 인덱스가 밀려 Invalid audio device index 크래시루프에 빠진다. 반드시 장치 이름 문자열로 지정할 것.
anullsrc 무음 합성 트랙으로 대체 — 어떤 오디오 장치에도 의존하지 않아 절대 안 깨진다.
"부팅 45초 경과했으나 m3u8 미생성 — 장치 stall"이 반복되면 이 증상. 해결: 모니터 Thunderbolt 케이블 재연결 또는 Mac 재부팅 (카메라 데몬은 root 소유라 소프트웨어 리셋 불가).
tail ~/Library/Logs/live-stream.log — 에러 종류 확인Invalid audio device index → 스크립트가 구버전(인덱스 방식)으로 롤백된 것. 이름 고정 + anullsrc로 수정m3u8 미생성 stall 반복 + 로컬 /tmp/livestream/에 .ts 없음 → 카메라 wedge → TB 케이블 재연결/재부팅ls /tmp/livestream/ 세그먼트 생성 + NAS m3u8 MEDIA-SEQUENCE 전진 + 세그먼트 HTTP 200(구) 오디오 함정 참고: LG UltraFine 마이크 직접 캡처 시절에는 입력 단 -ac 2 -ar 44100 강제 시 0채널 빈 오디오 문제가 있었음. 현재는 무음 합성으로 전환되어 해당 없음.
배경: 애플에너지(주) = 수력발전소 운영사 (발전기 5호기). 2019.09부터 일별 업무일지 xlsx 2,400여 개를 파싱해 웹 대시보드로 제공.
Synology Drive 동기화 폴더 (원본 일지 xlsx, 일별 1파일)
~/Library/CloudStorage/SynologyDrive-OfficeApple/애플에너지(주)/업무일지/업무일지/
↓ launchd 10분 주기 변경 감지 (~/bin/appleenergy-journal-sync.sh)
parse_journal.py 재파싱
├── journal.json (전체 일지 ~1MB — 대시보드용)
└── widget.json (경량 요약 1.5KB — iOS 위젯용)
↓ FileStation 업로드
NAS /web/appleenergy/ → https://sysadcom.dscloud.me/appleenergy/
Code Claude/애플에너지/)index.html — 대시보드: KPI 타일(금일 발전량/정산금/SMP/금년누계) + 최근일지 상세(근무자·수위·호기별 가동·시간별 바차트) + 월별 발전량/SMP 차트 + 연도별 실적표 + 일별기록 브라우저 + 특이사항 메모parse_journal.py — xlsx 전량 파서 (양식: N3=날짜, G11:G15=호기별 kWh, J17=금일SMP, J20/P20/V20=정산금 일·월·년누계 등)journal.json / widget.json — 파싱 산출물memo.php + memos.json — 특이사항 메모 저장 (같은 오리진 PHP 엔드포인트)AppleEnergy-v1.js — Scriptable 폴더 (iCloud~dk~simonbs~Scriptable/Documents/), 로네/포트폴리오 위젯과 동일 패턴widget.json (발전량+전일대비, 정산금, SMP 금일→명일, 수위, 호기 점등, 근무자, Large는 14일 바차트+연누계)_ae_memo_key에 1회 저장| 스크립트 | 역할 |
|---|---|
~/bin/toss-prefill.sh | 토스 signin 폼 자동 채우기 (이름, 생년월일, 주민첫글자, 휴대폰, 통신사, 약관 마스터) |
~/bin/toss-prefill-cg.py | CGEvent 기반 입력 (잠금화면/원격 환경 우회용) |
~/bin/toss-watchdog.sh | launchd 60초 주기, 로그아웃 감지 시 prefill 자동 재실행, SMS rate limit 회피 5분 cooldown |
~/bin/toss-health-check.sh | launchd 2시간 주기, 탭/오버레이/데이터 sync 상태 점검 + 자동 복구 |
~/bin/toss-popup-daemon.sh | Chrome OTP 자동완성 popup 좌표 클릭 |
~/bin/toss-icloud-folder.sh | 오버레이 "iCloud 폴더 선택" 클릭 자동화 (NSOpenPanel) |
~/Library/LaunchAgents/com.sysadcom.live-stream.plist — ffmpeg 자동 시작/재시작~/Library/LaunchAgents/com.sysadcom.live-cleanup.plist — 1시간 주기 NAS 청소~/bin/sync-icloud-to-nas.sh — 30초마다 iCloud → NAS (portfolio_data.json + daily.json + sync-status.json)~/Library/LaunchAgents/com.sysadcom.boanusgeum.sync.plist — 30초 주기 트리거~/bin/appleenergy-journal-sync.sh + com.sysadcom.appleenergy-journal.plist — 10분 주기, RunAtLoadparse_journal.py 재파싱 → journal.json + widget.json FileStation 업로드~/Library/Logs/appleenergy-journal-sync.log~/bin/ronnefeldt-deploy.sh 1. NAS의 현재 index.html 다운로드 2. 그것을 ronnefeldt-pro.html로 업로드 (직전 작동 버전 백업) 3. 로컬 index.html을 새 NAS index.html로 업로드 4. 두 URL 모두 health check (HTTP 200)
| 서비스명 | 대상 | 계정 |
|---|---|---|
nas-portfolio-sync | sysadcom NAS (FileStation/DSM API) | user + pass |
nas-live79bambu | live79bambu NAS | user + pass + host (QuickConnect URL) |
NAS_HOST="https://sysadcom.dscloud.me:5001" NAS_USER=$(security find-generic-password -s nas-portfolio-sync -a user -w) NAS_PASS=$(security find-generic-password -s nas-portfolio-sync -a pass -w) # Login → SYNO.API.Auth (session=FileStation, format=sid) # List → SYNO.FileStation.List (folder_path=...) # Upload → SYNO.FileStation.Upload
| NAS | 외부 도메인 | 외부 노출 포트 |
|---|---|---|
| sysadcom | sysadcom.dscloud.me | 80 (Web Station), 5001 (DSM HTTPS) |
| live79bambu | live79bambu.dscloud.me | 5001 (DSM HTTPS만) |
100.84.81.75smb://100.84.81.75/video + Claude/Rz2127vc~/Library/Mobile Documents/com~apple~CloudDocs/Code Claude/ 가 마스터 작업 폴더.
Code Claude/ ├── CLAUDE.md ← 단일 마스터 인덱스 (한 개 파일 정책) ├── 보안 2급/ ← 토스 포트폴리오 프로젝트 ├── Ronnefeldt/ ← 로네펠트 사이트 작업 사본 ├── Toyota86/ ← 토요타86 정비이력 사이트 ├── 애플에너지/ ← 수력발전 업무일지 대시보드 (index.html + parse_journal.py + journal.json) ├── Manual/ ← 이 운영 매뉴얼 (NAS /web/Manual/ 원본) ├── nas-home/ ← NAS 홈 허브(index.html) 편집 원본 └── (PDF 매뉴얼 3개)
~/.claude/projects/-Users-macstudio/memory/MEMORY.md (각 대화 시작 시 자동 로드)/remote-control 실행 → claude.ai/code/session_XXX URL 발급/remote-control 재실행으로 새 URL 발급| 경로 | 한계 |
|---|---|
| QuickConnect | 브라우저 전용. API 자동화 안 됨 |
| DDNS:5001 (DSM) | API 정상. 다만 패키지 설치 등 일부 제한 |
| DDNS:80 (Web Station) | sysadcom만 노출. live79bambu는 라우터 작업 후 가능 |
| Tailscale | SMB/IP 직접 접근. 모든 포트 사용 가능 |
tail -f ~/Library/Logs/sync-icloud-to-nas.log tail -f ~/Library/Logs/toss-watchdog.log tail -f ~/Library/Logs/toss-health-check.log tail -f ~/Library/Logs/live-stream.log tail -f ~/Library/Logs/live-cleanup.log tail -f ~/Library/Logs/appleenergy-journal-sync.log
# 시퀀스가 몇 초 간격으로 전진하면 정상, 멈춰 있으면 §2.4 복구 절차 curl -s "http://sysadcom.dscloud.me/Office%20Live/stream.m3u8" | grep MEDIA-SEQUENCE ls -lt /tmp/livestream/ | head # 로컬 세그먼트 생성 확인
# 평소엔 launchd 10분 주기 자동. 즉시 반영하고 싶을 때: ~/bin/appleenergy-journal-sync.sh
curl -s "http://sysadcom.dscloud.me/portfolio/portfolio_data.json" | python3 -m json.tool curl -s "http://sysadcom.dscloud.me/portfolio/trades.json" | python3 -m json.tool
~/bin/ronnefeldt-deploy.sh
// 토스 페이지 F12 → Console
localStorage.removeItem('_portfolio_holdings');
localStorage.removeItem('_portfolio_buy_prices');
claude --resume <session-id> # 세션 파일 위치: ~/.claude/projects/-Users-macstudio/*.jsonl
| 사이트 | URL |
|---|---|
| 📊 보안 2급 (포트폴리오) | http://sysadcom.dscloud.me/portfolio/ |
| 🍵 로네펠트 직원 관리 | http://sysadcom.dscloud.me/Ronnefeldt/ |
| 📺 Office Live (라이브 스트림) | http://sysadcom.dscloud.me/Office%20Live/ |
| ⚡ 애플에너지 (수력발전 대시보드) | https://sysadcom.dscloud.me/appleenergy/ |
| 🚗 Toyota86 (정비이력) | https://sysadcom.dscloud.me/toyota86/ |
| 🏠 홈 허브 (카드 인덱스, 비번 0429) | https://sysadcom.dscloud.me/ |
| 💃 dance | http://sysadcom.dscloud.me/dance/ |
| 🎬 영화 (Tailscale 후) | smb://100.84.81.75/video |
| 🔧 sysadcom DSM | https://sysadcom.dscloud.me:5001 |
| 🔧 live79bambu DSM | https://live79bambu.dscloud.me:5001 |
이 문서는 클로드 코드와 함께한 작업 이력을 종합한 것입니다. 변경사항은 Code Claude/CLAUDE.md의 "최근 작업" 섹션과 메모리 시스템에서 추적됩니다.