NAS를 산다고 하면 주변에서 묻는 용도는 대체로 셋 중 하나입니다. 영화·사진 모아두고 TV로 보는 미디어 서버, 도커 컨테이너 몇 개 올려서 이것저것 실험해보는 놀이터, 아니면 가족이나 팀이 파일을 같이 쓰는 공유 저장소.
저도 이 셋 다 씁니다. 그런데 정작 NAS를 켜두는 진짜 이유를 하나만 꼽으라면, 그건 이 셋 어디에도 안 들어갑니다. 저는 NAS를 매일 정해진 시각에 알아서 일하는 개인 서버로 씁니다. 도커도 안 씁니다. DSM 자체 크론탭에 파이썬 스크립트를 직접 등록해서 돌리는, 아주 재래식 구성입니다.
이전 글(DS423+ 2.5GbE 설정기, SSD 읽기 캐시 실측기)에서 속도를 최대한 끌어올려 놓은 이유도 사실 이 용도 때문이었습니다. 사진 스크롤 좀 부드럽게 하자고 2.5GbE 어댑터에 SSD 캐시까지 붙인 게 아니라, 그 위에서 무언가가 매일 안정적으로 돌아가야 했기 때문입니다.
가족용 종합 사이트를 통째로 얹었습니다
가장 먼저 얘기해야 할 건 사실 크론이 아니라 이겁니다. NAS의 Web Station 기능으로 집 도메인 하나를 통째로 서빙하고 있습니다. 흔히 말하는 “홈페이지 하나 만들어서 올려두는” 수준이 아니라, 한 도메인 밑에 경로만 나눠서 여러 서비스를 붙여둔 작은 자체 플랫폼에 가깝습니다. 대략 이런 것들이 같이 떠 있습니다.
- 아이들용 영어·수학·사고력·타이핑 학습 앱
- 할리갈리·도블·우노·마블월드·다마고치 같은 보드게임의 디지털판
- 가족 소식·기록을 모아두는 뉴스/기록 관리 페이지
- 부모가 진행 상황을 확인하는 관제용 대시보드
- 제가 업무적으로 쓰는 주식 포털 같은 도구들
가족이 각자 필요한 걸 같은 주소 밑 다른 경로로 들어가서 쓰는 구조입니다.
이 웹서버 역할이 사실 NAS를 계속 최고 사양으로 유지하고 싶었던 가장 큰 이유였습니다. 아래에서 다룰 크론 자동화들은 그 위에 얹혀 있는 추가 용도에 가깝습니다.
크론탭 하나로 돌아가는 주식 자동매매
가장 무거운 워크로드입니다. /etc/crontab에 파이썬 venv 경로를 직접 박아넣은 줄이 스무 줄 가까이 있는데, 하루 흐름만 추리면 이렇습니다.

- 07:40 — 전종목 스캔 + AI 판단 파이프라인 시작 (
scheduler.py) - 08:00 — 리포트 생성
- 08:50 — 매매봇 기동 (명령 수신 대기)
- 09:05~09:10 — 매수 후보 등록 → 감시 루프 시작 (돌파 모니터링 + 매도 조건)
- 10:00 / 12:00 / 14:00 — 장중 알림 체크
- 15:30 — 장마감 리포트
- 15:35 — 봇 자동 종료
- 16:05~16:10 — 매도 후 D+1~D+7 가격 추적, 백테스트 갱신
- 16:30 — 시세 저장
- 토요일 17:00 — 주간 매도 규칙 리서치
이 시스템을 어떻게 설계했는지는 파이썬 주식 분석 자동화 시리즈에 따로 정리해두었습니다. 종목을 거르는 방식도 단계형입니다 — 3,000개 전종목을 기술적 지표로 1차로 추리고, 뉴스를 곁들여 저렴한 AI 모델로 2차 스크리닝한 뒤, 마지막 단계에서만 상대적으로 비싼 AI 모델에 최종 판단을 맡깁니다. 매번 비싼 모델을 다 돌리지 않고 값싼 모델로 먼저 걸러내는 구조라, 비용은 낮게 유지하면서도 전 종목을 매일 훑을 수 있습니다.
이런 파이프라인은 “매일 같은 시각에 켜져 있는 기계”가 전제조건입니다. 노트북이나 데스크톱은 끄고 자는 게 당연한데, NAS는 애초에 24시간 켜두는 물건이라 이 조건을 별다른 노력 없이 만족시켜 줍니다.
블로그 자동 생성도 같은 크론에서
같은 원리로, 주식 관련 블로그 글도 매일 아침 8시 10분에 초안이 자동으로 만들어집니다(blog_post_generator.py). 스캔 결과와 뉴스를 바탕으로 글을 뽑아내고, 다른 서버가 그 결과물을 가져가서 검증한 뒤 발행하는 구조입니다. 생성은 NAS, 발행은 다른 서버 — 역할을 나눠둔 덕분에 한쪽에 문제가 생겨도 나머지 파이프라인은 영향을 안 받습니다.
아이디어와 할 일은 어떻게 처리되나 — 매분 큐 감시 + 맥미니 깨우기
크론탭 맨 위에는 유독 눈에 띄는 줄이 두 개 있습니다.
* * * * * twonedec /volume1/homes/twonedec/kbase/cron_runner.sh
* * * * * twonedec /volume1/homes/twonedec/kbase/idea_cron_runner.sh
매분 실행됩니다. 하는 일은 단순합니다 — idea_queue.json이라는 파일이 있는지 확인하고, 있으면 그 안의 아이디어를 꺼내서 처리 스크립트를 백그라운드로 띄우고, 큐 파일은 바로 지웁니다. 어디선가(포털이든 스크립트든) 아이디어 한 줄을 이 큐 파일에 떨어뜨리기만 하면, 늦어도 1분 안에 NAS가 알아서 집어갑니다.
재밌는 건 그다음입니다. 아이디어 분류처럼 AI 판단이 필요한 무거운 작업은 NAS가 직접 하지 않고, 집에 있는 맥미니에게 시킵니다. 그런데 맥미니는 전기 아끼려고 평소엔 재워둡니다. 그래서 처리 스크립트가 이렇게 움직입니다.
- 맥미니가 살아있는지 확인
- 자고 있으면 매직 패킷(Wake-on-LAN) 을 보내서 깨움
- 깨어난 맥의 로컬 API를 호출해서 AI가 아이디어를 분류·저장
- 완료되면 텔레그램으로 결과 알림
- 원래 자고 있었던 거면, 처리 끝나고 다시 재웁니다 (
pmset sleepnow)

같은 패턴이 키워드 리서치 큐(queue.json)에도 하나 더 있습니다. NAS는 24시간 켜져 있으니 “누가 뭘 던졌는지 감시하는 문지기” 역할을 맡고, 전력을 많이 쓰는 실제 AI 연산은 필요할 때만 맥미니를 깨워서 시키고 다시 재우는 식입니다. 거창한 메시지 큐나 서버리스 함수 없이, 파일 하나 감시하는 셸 스크립트와 매직 패킷만으로 되는 구성입니다.
할 일(Todo) 알림도 비슷하게 붙어 있습니다. 매일 밤 10시, 내일 날짜로 등록된 할 일 중 아직 안 끝난 것만 걸러서 텔레그램으로 미리 보내주는 스크립트(todo_notify.py)가 크론에 등록돼 있습니다. 이쪽은 맥을 깨울 필요 없이 NAS 혼자서 끝내는 가벼운 작업입니다.
이 정도를 다 돌리면 부하는 얼마나 될까
궁금해서 직접 접속해서 확인해봤습니다.

가족 사이트 웹서빙에 주식 자동매매, 블로그 생성, 아이디어/할일 큐 감시까지 다 얹혀 있는데도 로드 평균 0.12(4코어 기준)로 사실상 놀고 있는 수준입니다. 재부팅 없이 27일째 돌고 있고, 메모리도 17GB 중 실사용은 1.2GB뿐(나머지는 언제든 반납 가능한 캐시), 11TB 스토리지도 14%만 쓰고 있습니다. 이 정도 워크로드는 NAS 입장에서 몸풀기도 안 되는 셈입니다. 2.5GbE로 네트워크 병목을 없애고 SSD 캐시로 자잘한 파일 접근을 빠르게 만들어둔 게, 결국 이런 계산된 여유를 남겨두기 위해서였습니다.
NAS에 안 남긴 것도 있습니다
모든 걸 NAS에 몰아넣은 건 아닙니다. 매일 아침 날씨·주식·일정을 텔레그램으로 보내주는 알림 봇도 원래는 NAS로 처음 돌렸습니다. 지금은 오라클 클라우드 무료 서버로 옮겨서 운영 중인데, 이건 NAS가 부족해서가 아니라 오라클 서버를 어차피 계속 유지할 계획이라 거기로 옮겨 몰아둔 것에 가깝습니다. 워크로드가 무거우면 NAS, 이미 떠 있는 클라우드 서버에 자연스럽게 얹을 수 있으면 그쪽 — 이 정도가 제 기준입니다.
결론 — NAS는 저장소가 아니라 24시간 켜진 컴퓨터입니다
미디어 서버·도커 놀이터·공유 저장소로만 쓰기엔 NAS는 좀 아깝습니다. 가족용 사이트를 통째로 얹어 웹서버로 쓰는 것부터, 화려한 컨테이너 오케스트레이션 없이도 DSM 크론탭 몇 줄과 매분 도는 큐 감시 스크립트만으로 주식 스캔부터 블로그 초안, 아이디어 처리, 할 일 알림까지 사람 손 없이 굴러가고 있습니다. 속도(2.5GbE)와 캐시(SSD)를 다져둔 것도 결국 이런 워크로드를 무리 없이 돌리기 위해서였습니다.
다음 편은 이 파이프라인들이 실제로 어떤 결과를 내고 있는지 — 주식 자동화 시리즈와 아침 알림 봇 쪽에서 더 자세히 다룹니다.