매일 아침 주식 브리핑을 AI 에이전트가 자동으로 — 예약 루틴 만든 이야기

먼저 밝혀둡니다

이 글은 자동화 시스템을 만든 경험을 공유하는 것으로, 특정 종목·투자에 대한 추천이나 권유가 아닙니다. 브리핑의 시세는 지연·오차가 있을 수 있으며, 투자 판단과 그 결과에 대한 책임은 투자자 본인에게 있습니다.

아침마다 환율 보고, 지수 보고, 관심 종목 훑고, 밤새 뜬 공시랑 뉴스까지 챙기는 거 은근히 번거롭잖아요. 저는 이 “매일 똑같이 반복하는 일”을 AI 에이전트 예약 루틴으로 넘겨버렸어요. 정해둔 시각이 되면 에이전트가 알아서 데이터를 모아 채팅에 상세 브리핑을 띄우고, 핵심 요약은 카카오톡으로 쏴줍니다. 오늘은 그걸 어떻게 짰는지, 그리고 예약 루틴을 만들 때 꼭 알아야 할 설계 포인트를 정리할게요.

예약 루틴: 스케줄러가 정해진 시각에 에이전트를 자동으로 실행하는 것. 사람이 매번 시키지 않아도 같은 작업이 반복된다.

무엇을 만들었나 — 흩어진 데이터를 한 곳에

핵심 아이디어는 단순해요. 아침 브리핑에 필요한 정보가 여러 군데 흩어져 있으니, 그걸 한 번에 모아 한 장으로 정리하는 거예요. 제가 모으기로 한 건 환율, 주요 지수와 관심 종목의 시세, 전날 올라온 기업 공시, 그리고 관련 뉴스였습니다. 사람이 하면 탭 대여섯 개를 오가야 할 일을, 에이전트가 한 번에 처리하게 만드는 게 목표였어요.

어떻게 짰나 — 도구를 조합한다

에이전트 혼자서는 실시간 데이터를 모릅니다. 그래서 도구(MCP)를 붙여줬어요.

MCP: AI 에이전트에 외부 도구·데이터를 연결하는 규약. 시세 조회·공시 검색 같은 걸 에이전트가 함수처럼 호출하게 해준다.

제가 지시서에 적은 건 “어떤 도구로 무엇을 가져올지”의 목록이었어요. 시세 조회 도구로는 환율과 지수·종목의 현재가·등락률을, 공시 조회 도구로는 최근 며칠간의 신규 공시를, 뉴스 검색 도구로는 관련 기사 최신 몇 건을 가져오게 했죠. 여기서 중요한 건, 제가 결과를 어떻게 가공할지까지 지시서에 못박았다는 거예요 — 채팅엔 지수·종목을 오름(▲)/내림(▼) 표시와 함께 목록으로, 공시와 뉴스는 상위 몇 건만. 에이전트가 “알아서 잘” 하길 기대하지 않고, 형식을 정해준 겁니다.

작은 함정도 하나 있었어요. 시세 도구가 값을 JSON 문자열로 감싸서 돌려줄 때가 있어서, 받은 걸 한 번 풀어(파싱)줘야 했습니다. 이런 건 실제로 돌려보기 전엔 모르는 부분이라, 지시서에 “결과가 문자열이면 파싱하라”를 미리 적어뒀어요.

실패해도 멈추지 않게 — 부분 실패 허용

자동 루틴에서 제일 신경 쓴 건 하나가 실패해도 전체는 멈추지 않게 만드는 것이었어요. 뉴스 검색이 잠깐 안 되거나 공시 서버가 느릴 수 있잖아요. 그때 브리핑 전체가 날아가면 곤란하죠.

그래서 지시서에 규칙을 박았습니다 — 어떤 데이터 수집이 실패하면 그 자리엔 “데이터 없음”이라고 표기하고 나머지는 그대로 진행하라고요. 완벽한 브리핑 하나보다, 좀 비어도 매일 오는 브리핑이 낫다는 판단이었어요. 자동화는 부분 실패를 견디게 만들어야 오래 굴러갑니다.

카카오톡 요약 — 제약이 요약을 강제한다

채팅 상세 브리핑과 별개로, 핵심만 카카오톡으로 200자 이내 전송하게 했어요. 처음엔 글자 제한이 불편해 보였는데, 써보니 오히려 좋더라고요. 200자 안에 넣으려면 정말 중요한 것만 골라야 하거든요. 제약이 요약의 질을 강제한 셈이에요. 아침에 폰 알림으로 이 한 줄만 봐도 “오늘 분위기”가 잡히게요.

제일 중요한 설계 — 기억 없이도 완결되게

이게 예약 루틴을 만들며 가장 크게 배운 점이에요. 한번은 에이전트가 세션 한도에 걸려 작업 도중 끊겼습니다. 그런데 “이어서 하라”고 하니 처음부터 전 과정을 다시 실행해서 멀쩡하게 브리핑을 완성했어요. 어떻게 그게 가능했을까요?

비결은 이 루틴을 이전 대화 기억에 의존하지 않게 짰다는 데 있어요. 지시서 하나만 보면 처음부터 끝까지 스스로 완결되도록요.

무상태(stateless) 설계: “지금까지 뭘 했는지”에 대한 기억 없이, 매번 지시만으로 전체를 처음부터 완수하게 만드는 것.

예약 루틴은 언제 끊길지, 언제 재시도될지 알 수 없어요. 만약 “아까 3번까지 했으니 4번부터”처럼 중간 상태를 기억해야만 이어갈 수 있게 짜면, 한 번 끊기는 순간 망가집니다. 반대로 “매번 1번부터 다 한다”로 만들면, 끊겨도 다시 돌리면 그만이에요. 이게 자동 루틴을 튼튼하게 만드는 핵심이었습니다.

7월 31일 실행 기록에 AI가 남긴 노트에도 그대로 적혀 있어요. «세션 한도로 한 번 중단됐다가 “Continue from where you left off”로 재개 — 예약 루틴은 이전 대화 기억 없이 지침만으로 완결되게 설계돼 재개 후에도 전 과정 재실행으로 정상 완료.» 그날 루틴은 시세 조회를 여덟 번(환율 하나, 지수 둘, 종목 다섯), 공시 조회와 뉴스 검색을 한 번씩 돌린 뒤 카카오톡 요약을 보냈고, 전송은 성공했습니다.

데이터는 실시간이 아니다 — 라벨링으로 정직하게

한 가지 더. 제가 쓴 시세는 거래소 실시간이 아니라 약간 지연된 값이에요. 그래서 가끔 일간 등락으로 보기엔 과한 숫자가 튀기도 합니다. 이때 에이전트가 “이건 이상하니까 내가 고쳐서 보여줄까?” 하고 판단에 개입하는 건 위험해요. 잘못 만지면 데이터를 왜곡하니까요.

이 원칙은 한 번으로 끝나지 않았어요. 8월 3일과 6일 실행 노트에도 «데이터는 20분 지연 시세(Yahoo Finance).»가 되풀이되고, 8월 6일 노트는 «예약 루틴은 판단 개입 최소화 — 수집값 그대로 표기 + 지연 시세 각주 원칙 유지.»로 끝납니다.

그래서 규칙은 간단했어요. 수집한 값은 그대로 표기하고, 지연 시세라는 한계만 각주로 밝힌다 — 이게 전부였습니다. 에이전트는 데이터를 해석·수정하지 않고 있는 그대로 전달하고, 그 한계(지연)만 정직하게 라벨링합니다. 자동 브리핑에서 신뢰는 “얼마나 똑똑하게 해석하느냐”가 아니라 “값을 왜곡하지 않느냐”에서 나오더라고요.

한 달 돌려 보니 — 무상태의 뒷면

이 루틴은 그 뒤로도 예약대로 돌았어요. 그중 무상태 설계가 시험받은 날만 추려 보면, 이 원칙이 어디서 버텼고 어디서 모자랐는지 보입니다.

날짜무슨 일이 있었나카톡 요약닿는 원칙
7/31세션 한도로 끊겼다가 재개, 처음부터 다시 돌아 끝냄보냄무상태
8/8 기록수집 도중 호출이 끊겨 재시도, 그 뒤 기록이 끝남. 받아 둔 데이터도 남지 않음못 보냄무상태의 뒷면
9/2 (날짜 추정)현재가 칸이 비어 과거 시세로 보완하려다 멈춤. 첫 실행은 사용자가 중단, 재실행은 15분 넘게 기다려 끝냄첫 실행 못 보냄 · 재실행 보냄부분 실패 허용이 안 지켜짐
9/3같은 칸이 비었지만 보완 조회 없이 “없음”으로 적고 뉴스로 보완보냄부분 실패 허용

자세한 날짜별 기록은 이 글에 있어요.

제일 아팠던 건 8월 8일이에요. 위에서 “끊겨도 다시 돌리면 그만”이라고 했는데, 그날 기록에는 재시도 뒤에 기록이 끝났다는 것만 있고 다시 돌린 실행은 남아 있지 않아요. AI가 남긴 노트가 그 뒷면을 정확히 짚습니다. «예약 루틴이 이전 대화 기억 없이 단발로 도는 구조라, 중단되면 부분 산출물도 남지 않고 통째로 유실된다는 게 이번 사례의 교훈.» 7월 31일엔 끊긴 세션이 이어서 재개됐기에 무상태가 빛났고, 8월 8일엔 재개가 없었기에 결과가 통째로 사라진 거죠.

9월 2일과 3일의 대비도 같은 쪽을 가리켜요. 같은 지침, 같은 빈 칸이었는데 2일엔 과거 시세 보완에 매달리다 멈췄고, 3일엔 지침대로 “없음”이라 적고 넘어가 한 번에 끝났습니다. AI는 노트에 지침에 “히스토리 보완 금지 / 없음 표기” 한 줄을 넣으면 재현성이 올라간다고 적어 뒀어요. 그 한 줄을 지침에 실제로 넣었는지는 기록에 없습니다.

무상태 예약 루틴의 두 얼굴. 루틴은 지침만으로 처음부터 수집, 요약, 전송을 한다. 중간에 끊겼을 때 7월 31일처럼 재개되면 처음부터 다시 돌아 끝나지만, 8월 8일처럼 재개되지 않으면 부분 산출물도 없이 결과가 사라진다.
끊겨도 다시 돌리면 그만 — 단, 다시 돌릴 때만

그래서 뭘 하면 되나

반복되는 아침 루틴을 AI 에이전트로 자동화하고 싶다면, 이 표대로 챙겨보세요.

설계 포인트왜어떻게
흩어진 데이터를 한 번에탭 순례 제거필요한 소스별로 도구(MCP) 지정
출력 형식을 못박기“알아서”에 기대지 않음목록·상위 N건·표기법까지 지시서에
부분 실패 허용하나 실패로 전체 중단 방지실패 자리엔 “데이터 없음” 후 진행
무상태로 완결끊겨도 재실행으로 회복이전 기억 없이 지시만으로 전 과정
데이터 한계 라벨링왜곡 방지값은 그대로, 지연 등 한계는 각주

한 문장 요약: 반복 작업을 AI 예약 루틴으로 넘길 땐 — 출력 형식을 못박고, 부분 실패를 견디게 하고, 무엇보다 이전 기억 없이 지시만으로 매번 완결되게(무상태) 짜라. 그래야 끊겨도 다시 돌리면 되는 튼튼한 루틴이 된다.

돌아보면 이 작업의 본체는 “주식”이 아니라 반복을 어떻게 안전하게 위임하나였어요. 매일 똑같이 해야 하는 일일수록 자동화의 값어치가 큰데, 그만큼 끊김·실패에 강하게 만들어둬야 실제로 매일 굴러갑니다. 저는 이걸 아침 주식 브리핑으로 시작했지만, 같은 틀이면 날씨·환율·할 일 알림 뭐든 얹을 수 있겠더라고요.


댓글 남기기