🗒️ 게시판

13. 매일 아침 메일 현황 알림 : 스케줄링 + 웹훅

교시
4교시
선택
진행 예정
시간
14:00~14:50
회차
3회차
🎯
미션 : 3교시에 만든 메일 대시보드가 매일 아침 알아서 메일 현황을 휴대폰으로 보내게 하기 지금까지는 내가 클로드를 불러야 일이 돌았습니다. 이번 교시에는 정해진 시각에 알아서 도는 자동화(스케줄링)를 겁니다. 매일 아침 8시 30분, 메일 현황이 디스코드 알림으로 휴대폰에 오고, 알림의 메일 제목을 누르면 대시보드의 그 메일로 바로 가서 답장합니다.
  • 터미널에는 claude 하나만 입력합니다. 나머지는 모두 채팅창에 말로 시킵니다
  • 「이 명령을 실행해도 될까요?」 창이 뜨면 1. Yes
⏰
4교시 · 14:00~14:50
  • 📖 알아보기 : 스케줄링 · 웹훅이란 3분
  • 🛠️ Step 0 준비 3분 · Step 1 웹훅 만들기 7분 · Step 2 알림 만들고 지금 보내기 10분
  • 🛠️ Step 3 2분 뒤로 예약 10분 · Step 4 매일 아침으로 7분 · Step 5 내 알림 하나 더 10분

한눈에 보는 실습 흐름

notion image
실습 순서
무엇을 하나
이렇게 되면 성공
Step 0. 준비
3교시 mail-dashboard 폴더를 열고 claude 실행
대시보드 폴더에서 클로드가 뜸
Step 1. 웹훅 만들기
내 디스코드 서버에 웹훅 주소를 만들어 .env.local 에 넣기
DISCORD_WEBHOOK_URL 저장
Step 2. 지금 보내기
메일 현황 알림을 만들고 지금 한 번 보내기
휴대폰에 디스코드 알림
Step 3. 2분 뒤 예약
윈도우 작업 스케줄러에 2분 뒤 한 번 도는 예약
내가 누르지 않았는데 알림이 옴
Step 4. 매일 아침
매일 08:30 · PC 를 늦게 켜도 돌게 · 끄는 법
다음 실행 「내일 08:30」
Step 5. 내 알림 하나 더
아래 5가지 중 하나를 골라 예약 하나 더
예약 2개

📖
📖 알아보기 · 스케줄링과 웹훅 (3분)

1. 스케줄링이란?

📅
스케줄링 = "이 작업을 매일 오전 8시 30분에 알아서 해줘"라고 컴퓨터에 한 번 등록해 두는 일
  • 윈도우에는 작업 스케줄러라는 기능이 기본으로 들어 있습니다.
  • Claude Code에게 "이 작업을 매일 8시 30분에 자동으로 실행되게 등록해줘"라고 시키면,
  • Claude가 대신 작업 스케줄러에 등록해 주고, 우리는 결과만 확인하면 됩니다.
  • 핵심은 자연어 한 줄입니다. 코드 작성 · 작업 스케줄러 등록 · 한 번 직접 실행해 확인까지 클로드가 합니다.

2. 웹훅이란?

🔔
웹훅 = 디스코드 채널에 글을 보내기만 하는 주소. 이 주소로 보내면 그 채널에 글이 올라가고, 휴대폰 디스코드 앱에 알림이 옵니다.
  • 내 서버 · 내 채널에 만들기 때문에 회사 승인이나 클로드 조직 설정이 필요 없습니다.
  • 받기만 하는 통로가 아니라 보내기만 하는 통로입니다. 디스코드에서 내 PC를 움직일 수는 없습니다.
  • 웹훅 주소는 비밀번호와 같습니다. 주소를 아는 사람은 누구나 그 채널에 글을 올릴 수 있습니다. 채팅창 · 카톡 · 깃허브에 붙이지 않고 .env.local 에만 넣습니다.
3교시 대시보드
4교시 알림
언제 보나
내가 열어 볼 때
매일 08:30 에 먼저 옴
무엇을 보나
메일 전체 · 본문 · 답장 초안
오늘 처리 건수와 제목만 (본문은 보내지 않음)
답장은
대시보드에서 [내 양식으로 다시 쓰기] → [지메일로 보내기]
알림의 제목을 누르면 그 메일 상세로 바로 이동 → 같은 화면에서 답장

🛠️
🛠️ 여기부터 실습입니다 · Step 0 → Step 5 순서대로. 각 Step 끝의 ✅ 가 보이면 다음으로 갑니다

🛠️ 실습 Step 0. 준비 (3분)

  • VS Code 로 3교시 mail-dashboard 폴더를 엽니다 → 메뉴 → 터미널 → 새 터미널
  • 3교시를 다 끝내지 못했거나 배포를 못 했으면 아래 따라잡기 키트를 받아 풀고, 키트 안 따라잡기_사용법.md 대로 배포한 뒤 그 폴더에서 진행합니다 (알림 만들기 · 주소로 메일 열기 · 메일 보내기까지 들어 있음)
⌨️
입력 0-1 · 터미널
claude
✅
클로드 화면에 mail-dashboard 폴더가 보이면 다음 Step

🛠️ 실습 Step 1. 디스코드 웹훅 만들기 (7분)

notion image
① 디스코드에서 (직접)
  1. discord.com 가입 · 로그인. 휴대폰에도 디스코드 앱을 설치하고 같은 계정으로 로그인합니다
  1. 왼쪽 + → 직접 만들기 → 나와 친구들을 위한 서버 → 서버 이름 (예 : 내 메일 알림)
  1. #일반 채널 옆 톱니바퀴(채널 편집)
  1. 연동 → 웹후크 → 새 웹후크 → 이름을 「메일 대시보드」로
  1. 웹후크 URL 복사
② 주소 넣기 (직접)
💬
입력 1-1 · 채팅창
.env.local 맨 아래에 DISCORD_WEBHOOK_URL= 한 줄을 빈 값으로 추가해줘. 값은 내가 넣을게.
  • VS Code 에서 .env.local 을 열고 DISCORD_WEBHOOK_URL= 뒤에 복사한 주소를 붙여 넣고 저장(Ctrl+S)합니다. 채팅창에는 붙이지 않습니다
✅
.env.local 에 DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/… 가 저장됐으면 다음 Step
 

🛠️ 실습 Step 2. 알림 만들고 지금 한 번 보내기 (10분)

💬
입력 2-1 · 채팅창
data/mails.json 을 읽어서 메일 현황을 디스코드 웹훅으로 보내는 scripts/notify.js 를 만들어줘. 오늘 처리 건수와 제목, 이번 주 건수, 업무 종류별 건수를 넣고, 메일 제목마다 대시보드에서 그 메일 상세가 바로 열리는 링크(주소 뒤에 ?m=메일 id)를 달아줘. 맨 아래에는 「답장하러 가기」로 대시보드 링크를 넣어줘. 대시보드도 ?m= 으로 들어오면 그 메일을 바로 열고, 로그인 화면을 거쳐도 그 메일로 돌아가게 고쳐서 배포해줘. 본문은 보내지 말고, 웹훅 주소는 .env.local 에서 읽고 화면에 보여주지 마. 다 만들면 지금 한 번 보내줘.
notion image
🤖
예시 · 클로드 답변 (강사 대시보드로 실제로 돌린 결과)
scripts/notify.js 를 만들었습니다. 설치할 패키지는 없고 AI 도 쓰지 않습니다.
  • 대시보드 : 주소 뒤에 ?m=m004 를 붙이면 그 메일 상세가 바로 열립니다. 로그인하지 않았으면 비밀번호를 넣은 뒤 그 메일로 돌아갑니다. 다시 배포했습니다
  • 디스코드로 보냈습니다 (상태 204). 웹훅 주소는 화면에 표시하지 않았습니다
메일 현황 · 오늘 처리 5건
  • 부킹 · 부킹 요청 - 부산→로테르담 40HC 2대 (링크)
  • 운항 · SAMPLE VOYAGER 0412E 부산 출항 지연 안내 (링크)
  • 클레임 · 컨테이너 파손 클레임 접수 (B/L SPLBUS2409117) (링크)
  • … 이번 주 4건 · 업무 종류 부킹 2 · 견적 2 · 운항 1 · 클레임 2 · 정산 1 · 사내 1 · 참고 1
  • 답장하러 가기 : 오늘 처리만 보기 · 대시보드 전체
알림에서 답장까지 (실제 배포판 화면)
notion image
  • ([내 양식으로 다시 쓰기] · [지메일로 보내기] 는 3교시 ② 에서 만든 버튼입니다. 없으면 따라잡기 키트에 들어 있습니다)
  • 알림의 메일 제목을 누르면 대시보드의 그 메일이 바로 열립니다 → [내 양식으로 다시 쓰기] → [지메일로 보내기] (아웃룩은 [메일 앱으로 보내기]) → 작성 창에서 [보내기] → [처리 완료]
notion image
  • 보내기 버튼은 작성 창만 엽니다. 받는 사람 · 제목 · 본문을 확인하고 [보내기] 는 내가 누릅니다. [확인 필요] 가 남아 있으면 한 번 더 묻습니다
  • 「오늘 처리만 보기」를 누르면 오늘 처리할 메일만 걸러진 목록이 열립니다
✅
휴대폰 디스코드에 알림이 오고, 제목을 누르면 그 메일 상세가 열리면 다음 Step

🛠️ 실습 Step 3. 2분 뒤로 예약해서 확인하기 (10분)

💬
입력 3-1 · 채팅창
scripts/notify.js 가 지금부터 2분 뒤에 한 번 자동으로 실행되게 윈도우 작업 스케줄러에 MailDashboard_Notify 라는 이름으로 등록해줘. 등록한 시각을 알려주고, 실행되면 notify.log 로 확인해줘.
notion image
  • 2분 동안 아무것도 누르지 않고 휴대폰을 봅니다
💬
입력 3-2 · 채팅창 · 2분 뒤
실행됐는지 확인해줘
✅
내가 누르지 않았는데 알림이 오면 다음 Step. 이것이 스케줄링입니다

🛠️ 실습 Step 4. 매일 아침으로 바꾸기 (7분)

💬
입력 4-1 · 채팅창
MailDashboard_Notify 를 매일 아침 8시 30분 실행으로 바꿔줘. 8시 30분에 PC 가 꺼져 있었으면 켜자마자 실행되게 하고, 멈추는 방법도 알려줘.
notion image
🤖
예시 · 클로드 답변
매일 08:30 실행으로 바꿨습니다. 다음 실행은 내일 08:30 입니다.
  • PC 를 늦게 켠 날 : 켜자마자 한 번 실행합니다
  • PC 가 꺼져 있으면 그 시간에는 돌지 않습니다
  • 멈추기 : 「MailDashboard_Notify 꺼줘」 라고 말하거나, 작업 스케줄러에서 우클릭 → 사용 안 함
✅
작업 스케줄러에 MailDashboard_Notify · 매일 08:30 이 보이면 다음 Step. 내일 아침 휴대폰을 확인합니다

🛠️ 실습 Step 5. 웹훅으로 만들 수 있는 내 알림 하나 더 (10분)

아래 5가지 중 하나를 골라(시간이 짧으면 2번 선적 일정 D-3 권장) 같은 방법(만들기 → 지금 보내기 → 예약)으로 하나 더 겁니다. 1번은 Step 4 까지 한 것입니다.
알림
언제
무엇을 보내나
필요한 것
1. 아침 메일 현황
매일 08:30
오늘 처리 · 이번 주 건수와 제목, 제목마다 대시보드 링크
없음 (오늘 실습)
2. 선적 일정 D-3
매일 09:00
mails.json 의 ETD · ETA 가 3일 안인 건 : 선명 · 항차 · 부킹 번호
없음. 메일 정리 때 날짜를 2026-10-24 꼴로 맞추기
3. 퇴근 전 남은 일
매일 16:00
「오늘 처리」 중 아직 처리 완료가 아닌 메일
처리 완료를 브라우저가 아니라 서버에 저장하는 기능 (대시보드 기능 추가)
4. 주간 메일 리포트
금요일 17:00
한 주 업무 종류별 건수 · 클레임과 지연 목록 · Gemini 한 줄 정리
Gemini 키 (3교시 것)
5. 우리 배 입출항
매일 07:00
우리 배 목록의 오늘 입항 · 출항 소식
해운 공공데이터 키 (1회차 해운 공공데이터 페이지)
💬
입력 5-1 · 채팅창 · 예시 (2번 선적 일정 D-3)
data/mails.json 의 해운 정보에서 ETD 나 ETA 가 오늘부터 3일 안인 건만 골라 선명 · 항차 · 부킹 번호 · 날짜를 디스코드 웹훅으로 보내는 scripts/notify-etd.js 를 만들어줘. 건마다 대시보드 그 메일 링크(?m=메일 id)를 달고, 해당 건이 없으면 보내지 마. 지금 한 번 보내 보고, 매일 오전 9시에 실행되게 MailDashboard_ETD 로 등록해줘.
✅
작업 스케줄러에 예약이 2개(MailDashboard_Notify · 내가 고른 것) 보이면 실습 끝입니다
심화 · 메일 정리부터 알림까지 한 번에 (시간이 남으면)
지금 알림은 마지막으로 정리한 mails.json 을 보냅니다. 매일 새 메일을 보내려면 알림 전에 3교시 「메일 정리 돌려줘」 스킬이 먼저 돌아야 합니다.
💬
매일 아침 8시 20분에 「메일 정리 돌려줘」 스킬을 claude -p 로 실행하고, 끝나면 scripts/notify.js 로 알림을 보내는 예약을 MailDashboard_Morning 으로 만들어줘. 지메일은 읽기와 라벨만, 메일 보내기 · 지우기는 허용하지 마. 지금 한 번 돌려서 확인해줘.
  • PC 가 켜져 있어야 돕니다. 노트북을 닫으면 돌지 않습니다
  • 클로드가 자동으로 도는 동안 쓸 수 있는 도구를 미리 정합니다 (지메일 읽기 · 라벨 · 파일 저장 · 배포). 메일 보내기는 넣지 않습니다

3. 🌱 스몰 프로젝트 : 내 반복 업무 하나를 매일 휴대폰 알림으로

🌱
오늘 만든 메일 알림과 같은 꼴로, 매일 · 매주 같은 시각에 내가 확인하는 일 하나를 알림으로 바꿉니다.
무엇을 읽어서 → 무엇을 골라 → 언제 → 디스코드로. 바뀌는 것은 읽는 자료와 고르는 기준뿐입니다. 웹훅 주소는 오늘 만든 것을 그대로 씁니다.
직무
읽는 자료
언제
알림으로 받는 것
수출영업
견적 현황 엑셀
매일 08:40
아직 회신 안 한 견적 · 유효기간이 이번 주에 끝나는 견적
운항
선박 스케줄 엑셀
매일 07:30
오늘 · 내일 입출항 선박 · ETD 가 바뀐 항차
정산 · 회계
청구서 목록 엑셀
매주 월 09:00
납부 기한이 지난 미수금 · 이번 주 기한
물류센터
입출고 예정표
매일 16:00
내일 출고 예정 · 30일 넘게 보관 중인 화물
공통
국제유가 · 환율 · 벙커유 가격
매일 08:00
어제보다 오른 것 · 내린 것 한 줄씩 (외부 사이트나 API 필요)
공통
해운 시황 뉴스 헤드라인
매일 08:00
헤드라인마다 한 줄 요약 + 원문 링크 (아래 예시 2 · Gemini 키 필요)
💬
예시 1 · 수출영업 견적 알림 · 채팅창 (빨간 【 】 만 내 업무로 바꿉니다)
매일 【오전 8시 40분】에 【바탕화면 견적현황.xlsx】를 읽어서 【아직 회신 안 한 견적과 유효기간이 이번 주에 끝나는 견적】만 골라 디스코드 웹훅으로 보내줘. 웹훅 주소는 mail-dashboard 의 .env.local 에 있는 것을 쓰고 화면에 보여주지 마. 건이 없으면 보내지 말고, 금액 · 거래처 이름은 빼고 건수와 번호만 보내줘. 지금 한 번 보내 보고 【Sales_Quote_Alert】 라는 이름으로 작업 스케줄러에 등록해줘.
💬
예시 2 · 해운 시황 뉴스 알림 · 채팅창 (예전 「해운 시황 자동 요약」을 같은 꼴로 바꾼 것)
매일 【오전 8시】에 【해운 전문지 2곳】에서 밤사이 나온 해운 시황 뉴스 헤드라인을 모아, 헤드라인마다 한 줄 요약과 원문 링크를 붙여 디스코드 웹훅으로 보내줘. 요약은 Gemini API 로 만들고 키는 mail-dashboard 의 .env.local 에 있는 GEMINI_API_KEY 를 써. 같은 내용을 바탕화면 「해운시황_자동요약」 폴더에 그날 날짜 엑셀로도 저장해줘. 뉴스 본문은 보내지 말고, 지금 한 번 보내 본 뒤 【Shipping_News_Alert】 라는 이름으로 작업 스케줄러에 등록해줘.
  • 예시 2 는 뉴스 사이트에서 가져와야 해서 사이트 사정에 따라 막힐 수 있습니다. 막히면 「헤드라인을 가져올 수 있는 다른 출처를 2곳 제안해줘」 라고 묻습니다
💡
  • 읽을 자료가 지금 없으면 먼저 「내 업무에 맞는 샘플 견적현황.xlsx 를 10줄만 만들어줘」 라고 하고 그 파일로 연습합니다
  • 알림에는 제목 · 건수 · 번호 · 날짜 · 링크만 보냅니다. 본문 · 금액 · 거래처 이름 · 개인정보는 넣지 않습니다
  • 실제 업무 파일을 쓸 때는 회사 규정을 먼저 확인합니다
  • 떠오르지 않으면 : 「나는 【부서 · 직무】에서 일한다. 매일 · 매주 같은 시각에 내가 확인하는 일 중에 디스코드 알림으로 바꿀 후보 3개를 한 번에 질문 하나씩 물어서 찾아줘」
✅
휴대폰에 내 업무 알림이 한 번 오고, 작업 스케줄러에 그 예약이 보이면 스몰 프로젝트 끝입니다

4. 주의사항

⚠️
자동화는 한 번 잘못 등록하면 잘못된 결과를 매일 쌓습니다 • 첫 실행 후 반드시 결과를 한 번 눈으로 검토 • 다음 날 결과도 한 번 더 확인("어제와 형식이 비슷한가" 정도) • PC 절전과 재시작 시 작업 스케줄러가 멈추지 않는지 확인 ("작업을 가능한 한 빨리 시작" 옵션) • 웹훅 주소는 비밀번호처럼 : .env.local 에만. 새어 나갔으면 디스코드에서 그 웹후크를 지우고 새로 만듭니다 • 알림에는 제목 · 건수 · 번호 · 날짜 · 링크만 : 본문 · 금액 · 거래처 이름 · 개인정보는 보내지 않습니다. 자세한 내용은 링크를 눌러 대시보드에서 봅니다. 실제 업무 메일이면 회사 보안 담당과 상의합니다

막혔을 때

아래 문장은 모두 💬 채팅창에 입력합니다.
이럴 때
채팅창에 입력
회사 PC 에서 디스코드가 안 열린다
(입력 없음) 휴대폰 디스코드 앱에서 Step 1 을 하고, 웹훅 주소만 PC .env.local 에 넣습니다. 그래도 보내기가 막히면 「알림 대신 바탕화면에 현황 파일을 저장하고 윈도우 알림을 띄우게 바꿔줘」
「DISCORD_WEBHOOK_URL 이 비어 있거나 …」
「.env.local 에 DISCORD_WEBHOOK_URL 이 저장됐는지 확인해줘. 값은 보여주지 마」
알림 제목을 눌렀는데 목록만 보인다
「대시보드가 ?m= 으로 들어오면 그 메일을 바로 열게 고치고 배포해줘」
2분이 지나도 알림이 안 온다
「MailDashboard_Notify 의 마지막 실행 결과와 notify.log 를 확인해줘」
node 를 찾을 수 없다고 나온다
「작업 스케줄러가 node 를 찾을 수 있게 node 전체 경로로 다시 등록해줘」
스몰 프로젝트 예시 2 에서 뉴스를 못 가져온다
「헤드라인을 가져올 수 있는 다른 출처를 2곳 제안하고, 하나로 바꿔서 다시 보내줘」
예약을 지우고 싶다
「MailDashboard_Notify 예약을 지워줘」
  • 같은 Step 에서 10분 넘게 막히면 손을 들어 강사를 부릅니다

5. 마무리 : 도구 한눈에 정리

✅
지금까지 다룬 도구는 크게 두 갈래입니다.
🌐 만든 웹을 세상에 내놓고, AI 내장하기
  • 배포 : 만든 사이트를 인터넷에 공개
  • Gemini API : 그 사이트, 시스템 안에 AI를 내장
📄 AI와 문서로 일하는 방식 넓히기
  • 메모리 : AI가 나와 회사를 기억
  • 서브에이전트 : 따로 맡긴 일을 자기 작업 공간에서 처리
  • 스케줄링 + 웹훅 : 정해진 시각에 알아서 실행하고 휴대폰으로 알림 → 링크를 눌러 대시보드에서 답장
다음 5 · 6 · 7교시에는 조 주제 하나를 정하고, 지금까지 다룬 도구로 4회차 「AI 업무 자동화 대시보드」를 설계합니다.