평일 아침 6시, 텔레그램에 뉴스 10건이 도착한다. 내가 관심 있을 만한 것만 골라서, 점수가 높은 순서로. 그중 하나가 마음에 들면 메시지에 붙은 버튼을 누른다. 몇 분 뒤 워드프레스에 그 소식을 다룬 한국어 초안이 임시글로 저장되고, 다른 텔레그램 방에 “초안 생겼다”는 알림이 온다.
내가 하는 일은 버튼 한 번 누르는 것과, 나중에 그 초안을 고쳐 쓰는 것뿐이다.
이 글은 그 시스템을 만든 3주의 기록을 시작하는 글이다. 전체 구조가 어떻게 생겼는지, 한 달에 얼마가 드는지, 그리고 앞으로 열여섯 편에 걸쳐 무엇을 다룰지를 정리한다.
왜 서버 한 대가 필요했나?
직장이 폐쇄망 환경이다. 업무용 PC로는 외부 서비스에 접속할 수 없고, 개인 노트북을 회사에 들고 다니지도 않는다. 퇴근하고 집에 와야 비로소 개인 작업을 시작할 수 있는데, 그 시각이면 이미 밤 10시다.
그 상태로 개인 프로젝트를 세 개 굴리고 있었다. 블로그, 유튜브 채널, 그리고 이런저런 웹 서비스 습작. 어느 것도 제대로 굴러가지 않았다. 이유는 명확했다. 하려는 일 대부분이 “노트북이 켜져 있어야”만 돌아갔기 때문이다.
자동화 도구를 안 써본 것도 아니다. 노트북에 스크립트를 걸어두고 스케줄러로 돌려봤다. 문제는 노트북 뚜껑을 닫는 순간 전부 멈춘다는 것이었다. 아침에 실행돼야 할 작업이 저녁에 노트북을 켜야 실행됐다. 그건 자동화가 아니라 그냥 단축키다.
그래서 일을 두 종류로 나눴다.
| 구분 | 성격 | 어디서 돌리나 |
|---|---|---|
| 사람이 붙어야 하는 일 | 코딩, 문서 작성, 리서치, 판단 | 집 노트북 |
| 사람이 안 붙어도 되는 일 | 정해진 시각의 수집·분류·알림·초안 생성 | 24시간 켜져 있는 서버 |
두 번째 칸에 들어가는 일만 서버로 옮기면 된다. 첫 번째 칸은 옮길 필요도 없고, 옮겨서도 안 된다. 이 구분이 이후 모든 결정의 기준이 됐다.

전체 구조. 위쪽이 사람이 붙는 영역, 가운데가 24시간 도는 영역이다.
전체 구조 – 다섯 덩어리
그림이 복잡해 보이지만 덩어리는 다섯 개다.
1. 집 노트북 – 사람이 붙는 영역
Claude Code CLI로 개발하고, Cowork로 문서와 리서치를 처리한다. 유튜브 영상 제작 파이프라인도 여기 남아 있다. 브라우저를 직접 조작해야 하는 단계가 끼어 있어서 서버로 못 옮긴다. 옮기려고 시도했다가 접었고, 그 판단 과정은 뒤에서 따로 다룬다.
여기가 중요한 이유는 구독 한도 때문이다. Claude Max 구독은 제3자 도구와 한도를 공유할 수 없다. 서버에 올린 자동화가 내 구독을 쓰게 만들 방법이 없다는 뜻이다. 그래서 서버 쪽 작업은 전부 별도의 API 비용으로 돌아간다. 이걸 뒤늦게 알고 계산기를 다시 두드린 이야기도 시리즈에 들어 있다.
2. 텔레그램 – 유일한 창구
시스템과 대화하는 통로를 하나로 몰았다. 대시보드를 여러 개 만들어봐야 안 들어가게 된다. 반면 텔레그램은 어차피 하루에 수십 번 연다.
포럼 모드로 그룹을 만들고 주제를 다섯 개로 나눴다.
| 주제 | 용도 |
|---|---|
| 비서 | AI 에이전트와 자유 대화 |
| 브리핑 | 정기 리포트 |
| 조사 | 매일 아침 뉴스 수집 결과 |
| 글-승인 | 초안이 생겼다는 알림 |
| 알림 | 에러·완료 통보 |
봇도 두 개다. 대화용 봇과 알림·버튼용 봇을 나눴다. 하나로 합치면 대화 중에 알림이 끼어들어 맥락이 끊긴다.
3. VPS – 24시간 도는 영역
Hostinger의 KVM 2 플랜을 썼다. 2 vCPU에 메모리 8GB, 저장공간 100GB NVMe. 우분투 24.04를 올렸다.
여기서 컨테이너 다섯 개가 돈다.
- AI 에이전트 – 텔레그램 대화 상대이자 오케스트레이터. 메모리와 크론을 자체적으로 갖고 있다
- n8n – 파이프라인 실행 엔진. 정해진 순서대로 노드를 태우는 역할
- Traefik – 리버스 프록시와 HTTPS 인증서 자동 발급
- 워드프레스 + 데이터베이스 – 블로그 정본
8GB로 이걸 다 돌리는 게 빠듯하지 않냐는 조언을 받았고, 실제로 한 단계 낮은 플랜으로 충분하다는 말도 들었다. 따르지 않았고, 그 근거는 사양 선택 편에서 실측치와 함께 정리한다.
4. 모델 게이트웨이 – OpenRouter
모델을 직접 붙이지 않고 게이트웨이 한 곳을 거친다. 이유는 두 가지다.
첫째, 모델을 바꿀 때 코드를 안 건드려도 된다. 워크플로에는 모델 이름만 문자열로 들어가 있어서, 더 싼 모델이 나오면 그 줄만 고치면 된다.
둘째, 한도를 한 곳에서 잠글 수 있다. 자동화가 폭주해서 요금이 튀는 상황이 가장 무섭다. 월 상한을 걸어두면 최악의 경우에도 손실이 확정된다.
작업 난이도에 따라 세 단계로 나눠 쓴다. 뉴스에 점수를 매기는 단순 작업은 가장 싼 등급으로, 초안 작성은 중간 등급으로, 심층 조사나 최종 검수는 상위 등급으로 보낸다.
5. 배포처
지금은 이 블로그 하나다. 나중에 네이버 블로그와 유튜브가 붙을 자리를 비워뒀다.
n8n으로 실제로 도는 파이프라인
구조 그림은 “무엇이 어디 있는지”를 보여준다. 실제로 일이 흘러가는 순서는 따로 있다.

코어는 하나다. 채널이 늘어도 ⑤에 어댑터만 추가한다.
여섯 단계다.
① 수집 – 매일 아침 6시, RSS 네 곳에서 글을 끌어온다. 개발 커뮤니티 한 곳, 국내 기술 블로그 한 곳, 해외 커뮤니티 인기글, 그리고 n8n 공식 블로그. 대략 80건이 모인다.
② 선별 – 중복을 걷어내고 상위 30건만 남긴 뒤, 각 건을 모델에 던져 0점에서 10점을 매기게 한다. 7점 이상만 통과시키고, 점수순으로 정렬해 10건으로 자른다.
이 점수 프롬프트를 처음엔 대충 썼다가 여러 번 고쳤다. 어떻게 고쳤는지가 그 편의 볼거리다.
③ 생성 – 여기가 사람이 개입하는 지점이다. 10건이 텔레그램에 도착하고, 각각에 “초안 만들기” 버튼이 달려 있다. 버튼을 눌러야 초안이 생성된다.
처음엔 상위 3건을 자동으로 골라 초안까지 만들게 짰다. 그러다 뺐다. 자동으로 고르는 순간 편집권이 사라지기 때문이다. 내가 쓰고 싶은 글은 점수 1등이 아닐 때가 훨씬 많았다.
④ 검수 – 생성된 초안은 워드프레스에 임시글로만 저장된다. 발행되지 않는다. 내가 열어서 고쳐 쓰고, 원문과 대조하고, 그다음에 직접 발행 버튼을 누른다.
이 단계를 생략할 수 있게 만들지 않았다. 기술적으로 어려워서가 아니라, 의도적으로 안 만들었다.
⑤ 배포 → ⑥ 측정 – 아직 절반만 만들어져 있다. 측정은 유입 파라미터를 붙이는 수준에서 멈춰 있고, 배포처도 하나뿐이다.
핵심은 ①부터 ⑥까지가 채널과 무관하다는 것이다. 나중에 네이버 블로그를 붙이든 유튜브를 붙이든, 코어는 그대로 두고 ⑤에 어댑터만 하나 더 만들면 된다. 채널마다 파이프라인을 따로 만들면 관리가 불가능해진다.
한 달에 얼마 드나
제목에 쓴 1만 5천 원은 서버 값이다. 전체는 이렇다.
| 항목 | 월 비용 | 비고 |
|---|---|---|
| Claude Max 5x | 약 $100 | 개발·집필 전반. 자동화 이전부터 쓰던 것 |
| VPS (24개월 약정) | 약 ₩15,500 | 2 vCPU / 8GB / 100GB |
| 도메인 (3년 선결제) | 약 ₩1,900 | 월 환산 |
| 모델 API | $0~15 | 사용량. 상한을 걸어둠 |
| 합계 | 약 $110~125 |
솔직히 말하면 이 표의 대부분은 Claude Max다. 자동화 시스템 자체가 잡아먹는 돈은 서버와 도메인, API를 합쳐 월 3만~5만 원 선이다.
Max를 해지하고 그 돈을 전부 API로 돌리면 더 많은 일을 시킬 수 있지 않을까 하는 계산을 실제로 해봤다. 결론은 안 하는 쪽이었고, 왜 그런지는 별도 편에서 숫자와 함께 정리한다. 한국어로 이 계산을 해둔 글을 못 찾아서, 나처럼 고민하는 사람에게는 쓸모가 있을 것 같다.
약정 갱신가 함정도 있다. 24개월 약정의 월 1만 5천 원은 첫 계약 기간에만 적용되고, 갱신 시점의 가격은 다르다. 이건 계약 전에 알고 들어갔다.
다섯 가지 원칙
만들면서 정한 규칙이다. 기술적 결정보다 이쪽이 더 오래 갈 것 같아서 적어둔다.
1. 직장 업무 데이터는 이 시스템에 올리지 않는다
가장 중요한 항목이라 1번에 뒀다. 편해 보인다는 이유로 업무 문서를 개인 서버에 올리는 순간, 이 프로젝트는 취미가 아니라 사고가 된다. 예외를 두지 않기로 했다.
2. 환경변수 파일은 저장소에 커밋하지 않는다
토큰과 API 키가 들어 있는 파일이다. 한 번 올라가면 이력에 남아서 지워도 안 지워진다.
3. 완전 무인 발행은 하지 않는다
검수 게이트를 뗄 수 있게 만들지 않는다. 이유는 시리즈 중반에 나오는데, 한마디로 요약하면 모델이 그럴듯한 거짓말을 쓰는 걸 직접 봤기 때문이다. 출처 링크는 정확한데 본문 내용이 그 출처와 다른 상태였다. 겉보기에 멀쩡해서 더 위험했다.
4. 새 기능을 붙이기 전에, 기존 기능이 2주간 실제로 쓰였는지 확인한다
만드는 게 재밌어서 계속 붙이게 된다. 그런데 안 쓰는 기능은 유지비만 잡아먹는다. 2주를 기준으로 잡았다.
5. 자동화는 발행량이 아니라 전환으로 평가한다
하루 열 편을 자동 발행하는 건 어렵지 않다. 그게 아무 의미 없다는 것도 안다.
이 시리즈에서 다룰 것
총 열일곱 편이다. 발행되는 대로 이 목록에 링크를 붙인다.
결정 과정
- #2 – AI 에이전트를 모델인 줄 알고 GPU 견적부터 뽑았다
- #3 – 구독을 해지하고 그 돈으로 API를 충전하면 쌀까, 계산해봤다
- #4 – 에이전트·n8n·워드프레스를 한 서버에 올릴 때 사양 고르기
서버
- #5 – SSH 키 인증만 켰는데 비밀번호 로그인이 계속 열려 있었다
- #6 – 브라우저 터미널에 명령어를 붙여넣지 마세요
텔레그램
- #7 – 봇이 그룹에서 아무 대답을 안 한다, 원인이 두 개였다
- #8 – 텔레그램 포럼으로 AI 비서 창구를 만들었다
에이전트 배포
- #9 – 원클릭 설치가 안 해주는 3가지
n8n
- #10 – n8n에 HTTPS 붙이기
- #11 – RSS 100건에서 10건만 남기는 점수 워크플로
- #12 – 제목만 넘겼더니 AI가 그럴듯한 거짓말을 썼다
- #13 – 텔레그램 버튼으로 초안 생성을 트리거하기
워드프레스
- #14 – 자동발행 블로그에 페이지빌더를 쓰면 안 되는 이유
- #15 – 업무 도메인 메일을 워드프레스 SMTP에 연결하면 안 되는 이유
- #16 – 캐시 예외 처리를 빠뜨리면 자동발행이 조용히 죽는다
- #17 – 한글 블로그 타이포그래피, 웹폰트를 안 쓰기로 했다
시행착오는 요약하지 않고 막힌 순서 그대로 쓴다. 결과만 정리한 글은 이미 많고, 나한테 도움이 됐던 글은 항상 “나도 여기서 똑같이 막혔다”가 적혀 있는 쪽이었다.

이 편에서 막힌 것
지금 보여준 그림은 3주에 걸쳐 나온 결과물이고, 처음 그린 그림에는 GPU 서버가 들어 있었다.
에이전트 런타임과 같은 이름을 쓰는 언어 모델이 있는데, 그 둘을 혼동했다. 모델을 직접 돌려야 하는 줄 알고 그래픽카드 임대 견적부터 뽑았다. 월 30만 원짜리 계산서까지 만들어놓고 나서야 잘못 짚었다는 걸 알았다.
다음 편은 거기서 시작한다.
이 시리즈의 모든 글에서 서버 IP, 호스트명, 텔레그램 식별자는 가려져 있다. 직장은 “폐쇄망 환경”으로만 적는다.

[…] 글은 월 1만 5천 원짜리 VPS에 24시간 AI 비서를 올렸다 시리즈의 세 번째 […]
[…] 글은 월 1만 5천 원짜리 VPS에 24시간 AI 비서를 올렸다 시리즈의 네 번째 글이다. 앞 편: Claude Max를 해지하고 그 돈으로 API를 […]
[…] 글은 월 1만 5천 원짜리 VPS에 24시간 AI 비서를 올렸다 시리즈의 다섯 번째 글이다. 앞 편: 에이전트·n8n·워드프레스를 한 서버에 […]