루틴이 자동으로 돌아가게 만드는 법 — 알림·갱신·보고서 자동화
좋은 계획도 바쁠 때는 무너집니다. 그래서 저는 알림 → 확인 → 실행 → 보고를 자동화했습니다. 오늘은 여러분이 그대로 따라 할 수 있도록, 구글 시트·캘린더·Apps Script로 월간·분기 루틴을 자동으로 돌리는 방법을 공유합니다.
1) 자동화 설계도(한 눈에 보기)
- 알림: 캘린더/스크립트가 월말·분기말 21:00에 메일/팝업 발송
- 갱신: 시트가 최신 평가금액을 반영, KPI·드리프트 자동 계산
- 후보 표시: 밴드 이탈·주식합산·현금버퍼 신호등 색상
- 보고: 1페이지 대시보드를 PDF로 내보내 이메일 전송
핵심은 사람이 할 일은 숫자 입력과 최종 확인뿐이라는 점입니다.
2) 시트 준비(필수 탭)
- 자산입력: 자산 | 목표w | 현재금액 | 현재w | 드리프트
현재w = 현재금액 / SUM(현재금액), 드리프트=(현재w-목표w)/목표w - 월별스냅샷: 월 | 순자산 | 러닝피크 | 월수익률(TWR) | MDD
- 대시보드: KPI 카드 6개 + 차트 4개(도넛/드리프트/순자산·MDD/월수익률)
- 설정: 수신 이메일, 보고서 시트명, 월평균지출, 총부채 등
3) Apps Script(복붙·실행)
스프레드시트 → 확장 프로그램 ▸ Apps Script에서 아래 코드를 붙여넣고 저장 후 실행하세요.
function onOpen(){ SpreadsheetApp.getUi() .createMenu('Finance Routine') .addItem('① 월말 루틴 실행','runMonthlyRoutine') .addItem('② 분기 리뷰 실행','runQuarterlyReview') .addItem('③ 트리거 설정(자동화)','setupTriggers') .addToUi(); } // 1) 월말 루틴: 스냅샷 업데이트 → 경보 확인 → PDF 메일 function runMonthlyRoutine(){ const ss = SpreadsheetApp.getActive(); const set = ss.getSheetByName('설정'); const rpt = ss.getSheetByName(set.getRange('B6').getValue() || '대시보드'); // 보고서 시트명 // 1) 월별 스냅샷 마지막 행 자동 계산(예: 순자산/월TWR) const snap = ss.getSheetByName('월별스냅샷'); const last = snap.getLastRow()+1; const today = Utilities.formatDate(new Date(),'Asia/Seoul','yyyy-MM'); snap.getRange(last,1,1,5).setValues([[today,'','','','']]); // 수식 연결 시 자동 계산 // 2) PDF 생성 및 메일 발송 sendPdf(rpt, '월간 투자 보고서', '월간 점검 결과를 확인하세요.'); } // 2) 분기 리뷰: KPI 스냅샷 → 템플릿 문구 채우기 → 메일 function runQuarterlyReview(){ const ss = SpreadsheetApp.getActive(); const rpt = ss.getSheetByName('대시보드'); sendPdf(rpt, '분기 리뷰 보고서', '분기 리뷰 결과와 조정안을 확인하세요.'); } // 공통: PDF 내보내기 + 메일 function sendPdf(sheet, subject, body){ const ss = SpreadsheetApp.getActive(); const pid = ss.getId(); const gid = sheet.getSheetId(); const token = ScriptApp.getOAuthToken(); const params = 'format=pdf&size=A4&portrait=true&fitw=true&gridlines=false&sheetnames=false&pagenum=DISABLED&top_margin=0.4&bottom_margin=0.4&left_margin=0.4&right_margin=0.4&gid='+gid; const resp = UrlFetchApp.fetch('https://docs.google.com/spreadsheets/d/'+pid+'/export?'+params,{headers:{Authorization:'Bearer '+token}}); const blob = resp.getBlob().setName(subject+'_'+Utilities.formatDate(new Date(),'Asia/Seoul','yyyy-MM')+'.pdf'); const to = (ss.getSheetByName('설정').getRange('B5').getValue() || Session.getActiveUser().getEmail()); MailApp.sendEmail(to, subject, body, {attachments:[blob]}); } // 3) 시간 트리거 자동 설정(월말·분기말 21:05) function setupTriggers(){ // 기존 트리거 삭제 ScriptApp.getProjectTriggers().forEach(t=>ScriptApp.deleteTrigger(t)); // 매월 마지막 날 21:05 ScriptApp.newTrigger('runMonthlyRoutine').timeBased() .onMonthDay(31).atHour(21).nearMinute(5).inTimezone('Asia/Seoul').create(); // 분기(3개월 간격) 21:10 ScriptApp.newTrigger('runQuarterlyReview').timeBased() .everyMonths(3).atHour(21).nearMinute(10).inTimezone('Asia/Seoul').create(); SpreadsheetApp.getUi().alert('자동 트리거 설정 완료!'); }
※ 일부 시트 구조·열 이름이 다르면 함수 내 시트명/셀 참조를 본인 구조에 맞게 수정하세요.
4) 신호등 경보(조건부 서식)
- 주식합산 ≤ 55% → 정상(🟢), 55~60% 주의(🟡), >60% 경보(🔴)
- 현금버퍼 10~15% 범위 밖 → 색상 경보
- 드리프트 |편차| ≤ 20% 이탈 시 “조정 필요” 표시
조건부 서식 규칙만 미리 걸어두면, 월말에 자동으로 위험 구간이 하이라이트됩니다.
5) 자동화 가드레일(오작동 방지)
- PDF/메일 전송 전 사전 확인 체크박스가 “예”일 때만 실행
- 계좌·개인정보는 리포트에서 마스킹(예: “국민***123”)
- 스크립트 권한: MailApp, UrlFetchApp 사용 알림을 승인
6) 월말 10분 실전 플로우
- 시트에서 현재금액만 갱신(자산입력 탭)
- 대시보드 신호등 확인 → 이탈 자산만 후보에 표시
- Finance Routine ▸ ① 월말 루틴 실행 클릭
- 메일 수신 후 3문장 코멘트로 결론 저장
7) 자주 묻는 질문
Q. 데이터 입력도 자동화할 수 있나요?
가능하지만, 계좌 연동은 보안·약관 이슈가 있습니다. 본 글은 수동 입력 최소화 + 핵심만 자동화를 권장합니다.
Q. 소액 투자자도 쓸 가치가 있나요?
있습니다. 비중·경보·기록은 금액과 무관하게 의사결정을 간결하게 합니다.
마무리
자동화의 목적은 빠르게 끝내고, 흔들림 없이 실행하는 데 있습니다. 오늘 스크립트와 체크리스트를 적용해 보세요. 다음 달부터는 “해야지”가 아니라 “돌아간다”가 됩니다.
※ 교육용 일반 정보입니다. 수수료·세율·앱 기능은 각 기관 공지를 확인하세요.
- 🧱 루틴 스택: 기존 습관(아침 커피/저녁 산책)에 점검 3분 붙이기
- 🧭 IF-THEN: “만약 밴드 이탈이면 → 금요일 21:00 2%p 조정”
- 🏁 성공 신호: 주간 로그·이모지 신호등으로 즉시 피드백
- 🎁 보상 설계: 월간 루틴 완료 시 작은 보상·가족 공유
자동화 + 습관 설계가 만나면, 계좌는 더 조용하고 안정적으로 자랍니다.