강사를 위한 가이드

강사님,
그 일 언제까지
직접 하실 거예요?

매일 검색하고, 매일 확인하고, 매일 정리하던 일들. 혹시 그 시간이 아깝다고 느껴진 적 있으세요? 이 페이지는 그 반복을 멈추는 방법을 담았습니다. 자동화는 거창한 시스템이 아닙니다. "이거 또 해야 돼?"라는 한마디에서 시작합니다.

대상 기업교육 강사·담당자
소요 시간 각 프로젝트 2~3시간
사전 지식 바이브코딩 기초 권장
발제 WOWD.LAB · 테디
이 페이지에서 얻는 것
  • 자동화를 위한 문제 정의
  • 자동화 기획을 위한 4단계 프레임
  • 실제 자동화 2가지 사례 — 뉴스레터 + 나라장터 공고 모니터링
  • 내 업무에 적용하기 위한 실전 팁
SECTION 01

자동화도 결국 문제 정의입니다

AI를 쓴다고 자동화가 되는 게 아닙니다. 무엇을 자동화할지, 왜 자동화할지를 먼저 정의해야 합니다. 디자인씽킹의 첫 단계와 같습니다.

"이거 또 해야 돼?"

이 한마디가 나오는 순간이 신호입니다. 하지만 이걸 그냥 "귀찮으니까 자동화"로 넘어가면 금방 막혀요. 반복은 증상일 뿐, 그 뒤에 진짜 문제가 따로 있거든요.

그래서 시작 전에 잠깐 멈춰서 세 가지를 적어보면 좋아요. 현상, 본질, 가치 — 이 순서로요.

강사가 반복하는 일 — 다섯 가지 예시

혹시 이 중에 "어, 나도 이거 하는데" 싶은 게 있다면, 그게 출발점이에요.

01
뉴스 검색
매일 아침 내 강의 분야 키워드로 검색하기
02
교육 공고 확인
나라장터·HRD-Net 새 공고 들여다보기
03
설문 정리
교육 종료 후 설문 응답 분석하고 보고서 쓰기
04
이력 업데이트
새 강의 끝날 때마다 소개서·포트폴리오 수정
05
후속 연락
한 달 후, 세 달 후 고객사 안부 메일 보내기
06
일정 문의 회신
"강의 가능하세요?" 물음에 매번 비슷한 답장 쓰기
반복은 증상이고, 진짜 문제는 그 뒤에 있습니다. 그래서 자동화도 "무엇을, 왜"를 먼저 정의해야 해요.

자동화 문제 정의 — 3가지 질문

떠오른 반복 업무 하나를 골라서, 이 세 가지에 답해보세요. 답이 잘 안 나오면, 그건 아직 자동화할 때가 아닐 수도 있어요.

  1. 무엇을 반복하고 있는가?
    — 문제의 현상
  2. 그 일 때문에 무엇이 불편한가?
    — 문제의 본질
  3. 그 일이 나에게 왜 중요한가?
    — 어떤 가치가 있는가?
SECTION 02

자동화 기획을 위한 4단계 프레임

문제가 정의되면, 이제 설계입니다. 모든 자동화는 네 칸으로 설명됩니다. 이 프레임 하나면 어떤 자동화든 그릴 수 있어요.

01
입력
어디서 데이터를 가져올까?
02
처리
AI가 무엇을 해줄까?
03
출력
결과를 어디로 보낼까?
04
트리거
언제 자동으로 돌릴까?

01. 입력 — 어디서 데이터를 가져올까

자동화는 데이터에서 시작합니다. 그 데이터를 어디서, 어떻게 가져오느냐가 자동화의 안정성을 결정해요. 선택지는 크게 네 가지입니다.

RSS
가장 가벼움. 뉴스·블로그처럼 정기 발행되는 곳에 적합
API
가장 안정적. 공식 데이터 창구가 있는 곳 (공공데이터포털, 트위터 등)
크롤링
차선책. API가 없는 사이트를 직접 긁어오기 (Playwright 등)
직접 입력
사람이 데이터를 만들어야 할 때 (강의 이력 등록 등)
API가 있으면 무조건 API. 없으면 RSS. 둘 다 없을 때만 크롤링이에요.

크롤링은 강력하지만, 사이트 구조가 바뀌면 깨지고, 차단당할 수도 있어요. 그래서 마지막 선택지로 두는 게 안전합니다.

02. 처리 — AI가 무엇을 해줄까

가져온 데이터를 AI에게 무엇을 시킬지 정하는 단계입니다. AI가 잘하는 일과 못하는 일이 따로 있어요. 주로 이 네 가지를 시킵니다.

요약
긴 글을 핵심만 짧게 (기사, 회의록, 보고서)
필터링
많은 것 중에서 고르기 (적합도 판단, 관련성 분류)
변환
형식을 바꾸기 (설문 응답 → 보고서, 음성 → 텍스트)
생성
새 문장을 만들기 (소개서, 후속 메일, 콘텐츠 초안)
AI에게 맡길 일과 내가 할 일을 미리 나눠두세요. 그게 결과의 영혼을 지킵니다.

"전부 AI에게"가 아니라 "AI가 70%, 내가 30%"의 구조로 설계해야 자동화가 작동하면서도 결과물이 내 색깔을 잃지 않아요. 무엇을 AI에게 맡길지보다, 무엇을 내가 끝까지 가져갈지를 먼저 정하는 게 핵심입니다.

03. 출력 — 결과를 어디로 보낼까

AI가 만든 결과를 어디로 보낼지 정하는 단계입니다. 결과가 닿는 곳에 따라 자동화의 체감 가치가 완전히 달라져요.

이메일
가장 보편적. 매일 아침 받기 좋고, 보관·검색이 쉬움
슬랙·카톡
즉시성이 중요할 때. 알림 성격이 강함
웹 대시보드
누적된 결과를 모아 보고 검색해야 할 때
PDF·문서
공유하거나 인쇄해야 할 때 (소개서, 보고서)
결과를 언제 볼지 정하면, 채널은 자동으로 결정됩니다.

매일 아침 출근 전에 보고 싶다 → 이메일. 움직이는 중에 즉시 알고 싶다 → 카톡. 주말에 모아서 검토하고 싶다 → 웹 대시보드. 시간과 맥락이 채널을 결정해요.

04. 트리거 — 언제 자동으로 돌릴까

자동화의 화룡점정입니다. 트리거가 없으면 "버튼 눌러서 실행하는 반자동"이에요. 시간이 되면 알아서 돌아가야 진짜 자동화입니다.

버튼 누르는 건 반자동입니다. 시간이 되면 알아서 돌아가는 게 진짜 자동화예요.

트리거는 종류가 정말 많습니다

코드 기반(Vercel Cron, GitHub Actions, Cloudflare Workers, AWS Lambda), 노코드(Zapier, Make, n8n), 구글 도구 안(GAS), DB 기반(Supabase Edge, Firebase), 그리고 이벤트 기반(웹훅, 이메일 수신, 폼 제출)까지.

다 알 필요는 없어요. 강사한테 추천하는 출발점은 이 세 가지입니다.

  • GAS (Google Apps Script) — 구글 도구 안에서 시작. 비개발자 친화적
  • Zapier · Make — 완전 노코드. 수백 개 앱을 클릭으로 연결
  • GitHub Actions — 바이브코딩으로 만든 앱과 연결 (오늘 시연)
각 트리거의 강점·적합한 경우·난이도 자세히
RECOMMENDED 01
GAS (Google Apps Script)
강점
구글 도구 안에서 시작 가능. 폼·시트·캘린더·Gmail과 직접 연결
적합한 경우
구글 워크스페이스를 주로 쓰는 강사. 코드 약간만 가능하면 충분
난이도
★★☆ (비개발자도 가능)
RECOMMENDED 02
Zapier · Make
강점
완전 노코드. 수백 개 앱을 클릭으로 연결
적합한 경우
여러 도구를 쓰는 강사 (Notion + Gmail + Calendar + Slack 등)
난이도
★☆☆ (코드 없이 가능)
RECOMMENDED 03
GitHub Actions
강점
무료 한도 넉넉. 무거운 작업(크롤링 등)까지 가능
적합한 경우
바이브코딩으로 직접 만든 앱을 자동화하고 싶을 때 (오늘 시연)
난이도
★★★ (코드 기반)

판단 기준 — 한 줄 가이드

  • 구글 도구 중심이면 → GAS
  • 노코드로 여러 앱 연결이 필요하면 → Zapier / Make
  • 직접 만든 앱을 자동화하고 싶으면 → GitHub Actions
· · ·

오늘 만들 두 자동화를 4칸에 넣어보면

앞으로 시연할 두 프로젝트를 이 프레임에 미리 정리해두면, 따라할 때 길을 잃지 않아요.

PROJECT 01
뉴스레터 자동화
입력
Google News RSS
처리
Claude API가 강사 관점으로 필터 + 요약
출력
Gmail로 발송
트리거
GitHub Actions · 매일 오전 7시
PROJECT 02
나라장터 공고 모니터링
입력
공공데이터포털 · 조달청 입찰공고 API
처리
Claude API가 내 분야 적합도 판단
출력
Gmail 알림 + 웹 대시보드
트리거
GitHub Actions · 하루 2회
SECTION 03
PROJECT 01

뉴스레터 자동화

매일 아침, 내 강의 분야 기사가 요약되어 메일함에 도착합니다. 더 이상 검색하지 않습니다.

0

완성된 모습 미리보기

매일 아침 7시, 메일함을 열면 이런 게 도착해있어요. 내가 검색하지 않아도, AI가 어제 하루치 기사를 훑어서 강사 관점으로 골라 요약해둔 거예요.

실제로 발송된 뉴스레터 — 오늘의 AI 인사이트 5건, 각 기사마다 3줄 요약과 '강의 활용 포인트' 박스가 들어 있음
실제 발송된 뉴스레터 — 키워드별 분류 + 3줄 요약 + 강의 활용 포인트
"오늘 출근길에 읽을거리, 이미 도착해있다." — 이게 자동화의 체감입니다.
1

4칸 프레임으로 설계 정리

본격적으로 만들기 전에, 4칸으로 한 번 그려봐요. 이 그림이 머릿속에 있으면 코딩하면서 길을 잃지 않아요.

01
입력
Google News RSS
02
처리
Claude API
필터 + 요약
03
출력
Gmail 발송
04
트리거
GitHub Actions
매일 오전 7시

※ RSS를 선택한 이유 — Google News는 API가 없지만 RSS를 제공해요. "API 없으면 RSS, RSS도 없을 때만 크롤링" 원칙을 따른 결과입니다.

입력은 다른 것도 가능해요 — 네이버 뉴스 검색 API

한국 뉴스 중심으로 깔끔하게 받고 싶다면 네이버 검색 API의 뉴스 검색이 더 좋은 선택일 수 있어요. 국내 매체 중심으로 결과가 정제되어 있고, 일 25,000건까지 무료입니다.

다만 API 키 발급이 필요하다는 추가 단계가 있어요. 그래서 가장 빠르게 시작하기엔 Google News RSS가 편하고, 한국 뉴스 품질을 우선시한다면 네이버 API가 적합합니다.

※ 네이버 API 키 발급 방법과 코드는 Step 4(구현하기)의 마지막 대안 박스에서 자세히 다룹니다.

2

바이브코딩 문서 시스템 만들기

바로 코딩하지 않습니다. 먼저 네 개의 문서를 만들어요. 이게 바이브코딩의 진짜 핵심이에요. 문서 단계에 30~40분 투자하면, 코딩 단계는 "1단계부터 시작해줘" 한마디로 흘러갑니다.

바이브코딩의 핵심은 코드 단계가 아니라 PRD 단계에 있어요.

네 개의 문서, 네 가지 역할

PRD.md
왜·무엇을 만드는가 — 제품 정의
CLAUDE.md
어떻게·어디를 만지는가 — 작업 규칙
README.md
다른 사람이 어떻게 쓰는가 — 사용자 가이드
current_status.md
지금 어디까지 왔는가 — 세션 메모리

이 네 개를 같이 가져가면 Claude Code는 "맥락 잃지 않은 동료 개발자"처럼 일해요. 하나만 있을 땐 매번 다시 설명해야 했던 게, 같이 있으면 알아서 따라옵니다.

왜 굳이 4개로 나누나요? — 한 문서에 다 쓰면 안 되나

물론 PRD 하나에 다 적을 수도 있어요. 다만 그러면 두 가지 문제가 생겨요.

문제 1. 문서가 길어지면 Claude도 사람도 흐려져요

제품 정의(왜/무엇)와 코딩 규칙(어떻게)이 한 문서에 섞이면, 한 군데를 고치면 다른 부분도 함께 흔들려요. 네 개로 나누면 각 문서가 자기 책임만 가지니까 수정과 참조가 명확해집니다.

문제 2. 세션 메모리가 필요해요

Claude Code는 세션이 끝나면 맥락을 잃어요. 다음에 다시 열면 "어디까지 했지?"부터 시작이에요. current_status.md는 이걸 해결하는 노트예요. 작업할 때마다 누적 기록하니까, 다음 세션은 그것만 읽으면 5분 안에 따라잡습니다.

4개 문서 시스템은 단순한 PRD가 아니라, 바이브코딩 운영 시스템입니다.

PRD 만들기 — 시작 프롬프트

먼저 PRD부터 만듭니다. Claude에게 아래 시작 프롬프트를 던지고, 대화하면서 PRD를 완성합니다. 한 번에 완벽하게 만들지 말고 티키타카 하면서 다듬으세요.

— PRD 시작 프롬프트 (복붙용)
나는 기업교육 강사야. 매일 아침 내 강의 분야 뉴스를 직접 검색하는 게 번거로워서, 자동화 도구를 만들고 싶어.

목표:
- 매일 오전 7시에 내가 설정한 키워드로 뉴스를 자동 수집
- AI가 강사 관점에서 적합도 '상'인 기사를 우선 선별
- 최대 5개까지 포함하되, 적합한 기사가 적은 날엔 그만큼만 보냄
- 각 기사는 3줄 요약 + "강의에 이렇게 써먹을 수 있다" 한 줄 코멘트
- 중복 기사는 제목·URL 기준으로 사전 제거
- 결과를 내 Gmail로 자동 발송

기술 스택 (이미 정함):
- 데이터 수집: Google News RSS
- AI 처리: Claude API
- 발송: Nodemailer + Gmail SMTP
- 자동화: GitHub Actions (매일 오전 7시)
- 언어: Node.js

추가 요구사항:
- 이 코드는 다른 강사들도 키워드만 바꿔서 그대로 쓸 수 있도록 만들어줘
- 모든 개인 설정(API 키, 메일 정보, 키워드)은 .env에 모아주기
- .env.example 파일도 만들어서 다른 사람이 어떤 변수를 채워야 하는지 알 수 있게 해줘
- README.md에 사용 방법(Fork → Secrets 등록 → 키워드 수정) 자세히 적어줘

이걸 만들기 위한 PRD를 함께 작성해줘. 먼저 내게 필요한 질문 3~5가지를 던져서 요구사항을 명확히 한 다음, 정리된 PRD 문서를 만들어줘.

※ 프롬프트의 핵심 — "함께 작성"과 "질문부터 던져줘"라는 두 표현입니다. Claude가 일방적으로 PRD를 토해내지 않고, 대화하면서 정교화하게 만드는 장치예요.

왜 "최대 5개"로 제한할까? — 자동화 설계 사고

처음엔 "기사 많이 받을수록 좋은 거 아닌가?"라고 생각할 수 있어요. 그런데 자동화의 목적을 한번 더 짚어보면 답이 보입니다.

5개로 제한하는 세 가지 이유

  1. 매일 아침 시간 — 양을 줄여야 자동화의 의미가 살아요
    메일함에 20~30개 기사가 쏟아지면 결국 안 읽어요. 자동화의 목적이 "정보 홍수에서 해방"인데, 양을 안 줄이면 다른 형태의 홍수만 만드는 거예요. 5개는 출퇴근 15분에 다 훑을 수 있는 양입니다.
  2. AI 호출 비용
    필터링·요약은 Claude API 호출이 일어나는 단계예요. 20개 다 요약하면 호출 횟수가 5~6배가 돼요. 5개로 제한하면 월 $1~3 수준에서 유지 가능.
  3. 제약이 AI의 선택 품질을 높입니다
    "중복만 제거"하면 결국 단순 수집기예요. 5개라는 제약이 AI에게 "최선의 선택"을 요구하게 만들죠. 그래서 적합도 '상'인 기사만 추려 5개까지 — 부족한 날엔 적게 보내는 구조가 가장 깔끔해요.
자동화 설계의 핵심은 "더 많이"가 아니라 "딱 필요한 만큼"입니다. 제약을 두는 것 자체가 설계예요.
다음 단계 — CLAUDE.md / README.md / current_status.md 만들기

PRD가 완성되면, 같은 Claude 채팅에서 이어서 나머지 세 문서를 만들어요.

CLAUDE.md 만들기 프롬프트

— CLAUDE.md 생성 프롬프트
방금 만든 PRD를 바탕으로 CLAUDE.md를 만들어줘. 이 파일은 Claude Code가 본 프로젝트에서 작업할 때 따라야 할 규칙을 담아야 해.

포함할 내용:
- 작업 시작 전과 종료 후 프로토콜 (current_status.md 읽기/업데이트)
- 프로젝트 핵심 아키텍처 (파일별 역할)
- 절대 규칙(Must) — 환경변수 통합, 한 파일 한 책임, 한국어 주석, 코드 생략 금지 등
- 절대 금지(Must Not) — 키 하드코딩, .env 커밋 등
- 자주 하는 작업 가이드 (이거 바꾸려면 어디 만져야 하는지)
- 에러 처리 원칙

PRD가 "왜/무엇"을 다룬다면, CLAUDE.md는 "어떻게/어디를"에 집중해야 해.

README.md 만들기 프롬프트

— README.md 생성 프롬프트
이 프로젝트를 다른 강사들이 Fork해서 쓸 수 있도록 README.md를 만들어줘.

포함할 내용:
- 이 도구가 무엇을 해주는지 (3~5줄)
- 시작하기 (Fork → Gmail 앱 비밀번호 → Anthropic API 키 → GitHub Secrets → Actions 활성화)
- 키워드와 강사 프로필 작성 팁
- 비용 가이드 (모델별)
- FAQ (메일 안 올 때, 시간 바꾸기, 주말 제외 등)

톤은 친근하고 강사 친화적으로. 코딩 지식 없는 사람도 따라할 수 있게.

current_status.md 만들기 프롬프트

— current_status.md 생성 프롬프트
current_status.md를 만들어줘. 이 파일은 작업 맥락을 다음 세션·다른 PC로 이어가기 위한 로그야.

구조:
- 완료된 작업 (구체적 파일명·함수명 포함)
- 진행 중 작업 (지금 어디서 멈췄는가)
- 다음 단계 (다음에 할 일 1~3개)
- 미결정 이슈 (사용자 결정 필요한 항목)

지금은 코드 작성 시작 전 단계니까 "프로젝트 킥오프" 상태로 작성해줘.
그리고 이 파일은 .gitignore에 추가해서 git에 안 올라가게 해줘.
세 문서 모두 Claude와 대화하면서 다듬어 가세요. 한 번에 완성된 문서는 없어요.

코드 작성 시작 프롬프트

네 문서가 다 준비되면, Claude Code에 던지는 첫 프롬프트는 단 한 줄이면 충분합니다.

— 첫 코드 작성 프롬프트 (복붙용)
4개의 파일(PRD.md, CLAUDE.md, README.md, current_status.md)을 읽고 맥락을 파악한 다음, 개발 계획을 세워줘.

그리고 1단계부터 개발 시작해줘.

※ 한 줄 같은 이 프롬프트가 의외로 강력해요. 네 문서가 맥락을 모두 담고 있으니까, Claude Code는 "이 프로젝트가 뭔지, 어떤 규칙을 지켜야 하는지, 어디서 시작해야 하는지"를 다 알고 시작합니다.

📥 완성된 4개 문서 — 다운로드 (테디가 실제로 만든 것)

아래 ZIP에는 실제로 작동하는 뉴스레터 자동화 프로젝트의 4개 문서가 들어 있어요. 본인 프로젝트에 맞게 수정해서 사용하세요. 이게 시작점이 됩니다.

📦 4개 문서 ZIP 다운로드

개별로 받기

※ 이 4개는 정답이 아니라 출발선이에요. 본인 프로젝트의 성격에 맞게 수정해서 쓰세요. 특히 PRD의 키워드, 강사 프로필, CLAUDE.md의 파일 구조는 본인 것으로 갈아엎으면 됩니다.

문서 단계가 잘 정리되면, 코드 단계는 신기할 만큼 매끄럽게 흘러갑니다.
트랙 A · 빠른 시작 받아서 바로 쓰기 (약 30분) → ⏬ 클릭하면 전체 단계가 펼쳐집니다 · Fork → Secrets → Actions 활성화
A1

GitHub 계정 만들기

코드를 받으려면 GitHub 계정이 필요해요. 아직 없다면 먼저 만들어주세요.

GitHub 가입 — 자세히
  1. github.com 접속 → 우측 상단 Sign up 클릭
  2. 이메일 입력 (구글 메일 사용 가능)
  3. 비밀번호 설정
  4. Username 정하기 — URL에 들어가는 영문 이름
  5. 이메일 인증 코드 확인
  6. 무료 플랜(Free) 선택
A2

완성 코드 Fork (복제)

Fork는 다른 사람의 GitHub 코드를 내 계정으로 복제해 가져오는 기능이에요. 한 번 Fork하면 내 코드가 되니까 마음대로 수정해도 원본에 영향을 주지 않아요.

Fork가 뭐예요? — 더 자세히

한 줄로 — 다른 사람의 GitHub 코드를 내 계정으로 복제해 오는 것.

비유하자면 요리 레시피를 받아서 내 노트에 베껴 적는 것과 같아요. 원본은 그대로 있고, 내 노트에 똑같은 게 하나 더 생기는 거죠. 그다음부터 내 노트는 내가 마음대로 수정해도 원본에는 영향이 없어요.

왜 Fork가 필요한가

GitHub의 원칙은 단순해요. 남의 레포는 직접 수정할 수 없고, 내 계정으로 복사를 떠야 수정과 자동화가 가능해요. 특히 GitHub Actions(자동 실행)는 내 레포 안에서만 돌아가요. 그래서 다운로드나 클론이 아닌 Fork가 필요한 거예요.

Fork vs Clone vs Download — 헷갈리는 셋

  • Fork — 내 GitHub 계정에 새 레포로 복제. Actions 사용 가능.
  • Clone — 내 컴퓨터에 다운로드. 내 GitHub엔 흔적 안 남음.
  • Download (zip) — 그냥 압축파일로 받기. 자동화 안 됨.
자동화를 돌리려면 반드시 Fork. 내 GitHub 계정 안에 코드가 있어야 GitHub Actions가 작동해요.
이 레포가 Public인데 — 안전한가요?

Fork할 수 있다는 건 원본 레포가 Public(공개)이라는 뜻이에요. 누구나 코드를 볼 수 있죠. 처음 보면 "내 API 키나 비밀번호도 노출되는 거 아닌가?" 걱정될 수 있어요.

걱정하지 않아도 되는 이유

  • 코드 안에는 키가 한 줄도 없습니다. 키와 비밀번호는 process.env.XXX 같은 환경변수 참조만 있고, 실제 값은 GitHub Secrets라는 별도 저장소에 들어 있어요.
  • Secrets는 외부에서 절대 볼 수 없어요. Fork된 레포도 원본의 Secrets를 가져오지 않아요. 그래서 강사 본인이 자기 Fork에 자기 Secrets를 따로 등록해야 합니다 (A4 단계).
  • .env 파일도 GitHub에 안 올라가요. .gitignore에 등록돼 있어서, 실수로 키가 노출될 일이 없어요.
Public 레포는 "코드는 공유, 키는 비밀" 구조예요. 이게 GitHub 자동화의 표준 패턴입니다.

Fork 순서

  1. 아래 완성 코드 레포 링크 접속:
    📂 github.com/TeddyChoi-wow/Mynewsletter →
  2. 우측 상단 Fork 버튼 클릭
  3. 본인 GitHub 계정 선택 → Create fork 클릭
  4. 잠시 후 본인 계정 안에 똑같은 레포가 생김

※ 만약 Cannot fork because you own this repository 메시지가 보인다면, 본인이 이미 같은 레포를 소유하고 있다는 뜻이에요. 다른 강사 입장에서는 마주칠 일이 거의 없습니다.

A3

준비물 발급 — API 키, 앱 비밀번호

코드는 받았으니, 이제 본인 키와 비밀번호를 발급받을 차례예요.

필요한 것 3가지

  • Anthropic API 키 sk-ant-로 시작하는 긴 문자열
  • Gmail 앱 비밀번호 16자리 (공백 제거하고 사용)
  • 받을 이메일 주소 발송용 Gmail과 같아도 되고, 다른 메일이어도 됨

각각 발급 방법은 Track B의 사전 준비물 단계에 자세히 있어요. → Track B의 ③ 계정 + 키 발급 보기

A4

GitHub Secrets에 키 등록

내 GitHub 레포에 안전하게 키와 비밀번호를 등록해요. 이게 자동화의 핵심이에요. 코드에 직접 쓰면 안 되고, Secrets 안에 보관해야 안전합니다.

GitHub Secrets가 뭐예요?

GitHub Secrets는 레포 안에 키·비밀번호 같은 민감한 값을 안전하게 저장하는 금고예요. 여기 들어간 값은:

  • 외부에서 절대 볼 수 없음 (본인도 한 번 등록한 후엔 다시 못 봄)
  • GitHub Actions가 실행될 때만 자동으로 주입됨
  • 레포가 Public이어도 Secrets는 비공개
  • Fork된 레포는 원본의 Secrets를 가져오지 않음 (각자 따로 등록)

그래서 코드 안에는 process.env.ANTHROPIC_API_KEY 같은 참조만 있고, 실제 값은 Secrets에 들어 있어요.

등록 단계 — 클릭 경로

  1. Fork된 본인 레포 페이지 접속 예: github.com/내아이디/daily-news-curator
  2. 상단 메뉴 Settings 탭 클릭 ⚠️ 본인 프로필 Settings가 아니라, 레포 페이지 안의 Settings예요. 레포 이름 아래쪽 가로 메뉴에 있어요
  3. 좌측 사이드 메뉴를 아래로 스크롤 → Security 섹션의 Secrets and variables 클릭
  4. 드롭다운 펼침 → Actions 선택
  5. 우측 상단 초록색 New repository secret 버튼 클릭
  6. Name 입력란에 변수명, Secret 입력란에 실제 값 붙여넣기
  7. 아래 Add secret 버튼 클릭 → 등록 완료
  8. 아래 9개 변수를 위 단계로 하나씩 반복 등록 (한 번에 하나씩만 가능)
등록할 9개 변수 전체 목록

이름은 정확히 일치해야 해요. 대소문자 구분, 오타 주의.

필수 (6개)

  • ANTHROPIC_API_KEY — Anthropic API 키 (sk-ant-...)
  • GMAIL_USER — 발송용 Gmail 주소
  • GMAIL_APP_PASSWORD — Gmail 앱 비밀번호 (공백 제거)
  • MAIL_TO — 받을 이메일 (보통 본인)
  • KEYWORDS — 키워드 (쉼표 구분, 공백 없음. 예: 리더십,조직문화,디자인씽킹)
  • INSTRUCTOR_PROFILE — 강사 프로필 한 줄 (예: 기업교육 강사, 디자인씽킹·AI 워크숍, 사례 중심 선호)

선택 (3개) — 생략 시 자동 적용

  • CLAUDE_MODEL — 기본 claude-haiku-4-5
  • MAX_ARTICLES — 기본 5
  • SIMILARITY_THRESHOLD — 기본 0.65
⚠️ 흔한 실수 — Secrets 이름의 오타. 대소문자까지 정확히 일치해야 코드가 찾아서 사용해요.
A5

키워드 바꾸기 — 내 강의 분야로

이 단계가 트랙 A의 핵심이에요. 다른 건 다 그대로 두고, 키워드와 강사 프로필만 본인 것으로 바꿉니다. 그리고 좋은 소식 — 이미 A4에서 끝났어요.

A4에서 GitHub Secrets에 등록한 두 변수가 곧 본인의 강의 분야예요:

  • KEYWORDS — 받고 싶은 뉴스 주제 (쉼표 구분) 예: 리더십,조직문화,코칭,MZ세대
  • INSTRUCTOR_PROFILE — AI가 적합도 판단할 기준이 되는 강사 정체성 예: 리더십 강사, 코칭·조직문화 전문, 데이터 기반 인사이트 선호
키워드 + 강사 프로필 작성 팁

키워드 (KEYWORDS)

  • 3~5개가 적정 — 너무 적으면 풀이 작고, 너무 많으면 한 키워드당 노출이 줄어듦
  • 너무 일반적인 단어 피하기AI보다 생성형AI, 교육보다 기업교육
  • 영어/한글 혼용 가능리더십,leadership
  • 운영하다 안 맞으면 GitHub Secrets에서 즉시 수정 가능

강사 프로필 (INSTRUCTOR_PROFILE)

한 줄로, 다음 3요소를 담아주세요.

[직업/역할], [전문 분야], [선호 콘텐츠 스타일]

예시

  • 기업교육 강사, 디자인씽킹·AI 워크숍, 사례 중심 선호
  • 리더십 강사, 코칭·조직문화 전문, 데이터·연구 결과 선호
  • 마케팅 강사, B2C 그로스해킹, 실무 케이스 중심
이 한 줄이 Claude의 평가 기준을 결정합니다. 적합도 '상'으로 판정되는 기사의 성격이 바뀌어요.

나중에 키워드 바꾸고 싶을 때

코드를 다시 만질 필요 없어요. GitHub Secrets에서 KEYWORDS 값만 바꾸면 다음 실행부터 바로 반영됩니다.

  1. 본인 레포 → SettingsSecrets and variablesActions
  2. KEYWORDSUpdate 버튼 클릭
  3. 새 값 입력 → 저장
A6

Actions 켜기 + 첫 실행

Fork한 레포는 기본적으로 GitHub Actions가 꺼져 있어요. 활성화하고 한 번 수동으로 돌려서 메일이 오는지 확인해요.

  1. Fork한 레포 → 상단 메뉴 Actions
  2. "I understand my workflows, go ahead and enable them" 버튼 클릭 (Fork한 레포에서 처음 한 번만 표시됨)
  3. 좌측 워크플로우 목록에서 자동화 선택
  4. 우측 Run workflow 버튼 클릭 → 다시 Run workflow
  5. 잠시 후 실행 결과 확인 — 초록 체크면 성공
  6. 본인 메일함 확인 — 뉴스레터 도착!
여기까지 30분 안에 왔다면, 축하해요. 자동화 하나를 처음으로 가진 거예요.
A7

막혔을 때

  • Secrets 이름이 정확히 일치하는지 확인 대소문자 구분, 오타 주의 — Settings → Secrets에서 다시 확인
  • Gmail 앱 비밀번호의 공백 제거 발급 시 표시는 abcd efgh ijkl mnop이지만, 등록할 땐 공백 빼고 abcdefghijklmnop
  • Actions 실패 시 빨간 X 클릭해서 로그 보기 에러 메시지를 그대로 Claude에 복붙해서 물어보면 답이 빠름
  • 스팸함 확인 첫 발송은 가끔 스팸으로 분류됨
트랙 B · 직접 만들기 바이브코딩으로 만들기 (약 2~3시간) → ⏬ 클릭하면 전체 단계가 펼쳐집니다 · 분량이 길어 평소엔 접혀 있어요
3

사전 준비물

실습 전에 깔거나 발급받아둘 것들이에요. 준비물 없이 시작하면 중간에 멈춥니다. 한 번 훑어보고, 각 항목은 클릭하면 자세한 설치·발급 방법이 펼쳐져요.

한눈에 보는 체크리스트

  • Node.js (LTS) — 코드 실행 환경
  • VS Code — 코드 에디터
  • Git — 버전 관리 (GitHub과 다른 도구)
  • Claude Code — 바이브코딩 도구 (CLI 또는 VS Code 확장)
  • GitHub 계정 — 코드 저장 + Actions 자동화
  • Anthropic API 키 — 앱에서 Claude 호출용
  • Gmail 앱 비밀번호 — 메일 자동 발송용

설치 가이드

Node.js 설치

nodejs.org 접속 → LTS 버튼 클릭 → 설치 파일 실행 (다음만 누르면 됨).

설치 확인 — 터미널에 node -v 입력 시 버전 번호가 나오면 완료.

VS Code 설치

code.visualstudio.com 접속 → Download 버튼 → 본인 OS용 설치 파일 실행.

Git 설치 — Git과 GitHub는 다른 거예요

둘은 완전히 다른 거예요. 헷갈리기 쉬운 부분이라 짧게 정리합니다.

  • Git (설치 필요) — 내 컴퓨터에 까는 버전 관리 프로그램. 코드 변경 이력을 기록.
  • GitHub (가입만) — Git으로 관리한 코드를 인터넷에 올리는 웹사이트.

비유하면 Git은 워드 프로세서, GitHub은 구글 드라이브예요.

설치 방법

  • Mac · 보통 기본 설치돼 있음. 터미널에 git --version으로 확인.
  • Windows · git-scm.com → Download for Windows → 옵션 모두 기본값으로 설치.
Claude Code 설치 + 사용 방식 (CLI vs VS Code 확장)

먼저 — 본체 설치 (공통)

터미널에서 한 줄:

terminal npm install -g @anthropic-ai/claude-code

그다음 — 사용 방식 두 가지 중 선택

같은 Claude Code를 두 가지 방식으로 쓸 수 있어요. 본질은 똑같고 인터페이스만 달라요. 자동차 엔진은 같은데 운전석이 다른 거라고 보시면 돼요.

방식 A. CLI (터미널) — 단순하고 빠름

  1. VS Code 열기 (또는 시스템 터미널)
  2. 터미널 열기 — Ctrl/Cmd + `
  3. 터미널에 claude 입력 후 엔터
  4. 처음 실행 시 브라우저 자동으로 열림 → Anthropic 계정 로그인
  5. 로그인 후 채팅 시작

방식 B. VS Code 확장 — 시각적으로 편함

  1. VS Code 열기
  2. 왼쪽 사이드바 Extensions 클릭 (Ctrl/Cmd + Shift + X)
  3. 검색창에 Claude Code 입력
  4. Anthropic 공식 확장 선택 → Install
  5. 사이드바 Claude 아이콘 → 로그인 → 채팅 시작
둘은 OR이 아니에요. 같은 엔진이라 한 프로젝트에서 왔다갔다 쓸 수 있어요.

계정·키 발급 가이드

GitHub 계정 만들기

GitHub은 자체 계정 시스템이에요. 구글 로그인은 안 됩니다.

  1. github.com → 우측 상단 Sign up
  2. 이메일 (구글 메일 사용 가능)
  3. 비밀번호 + Username 정하기 (URL용 영문 이름)
  4. 이메일 인증 → 무료 플랜 선택
Anthropic API 키 발급 — Claude Code 로그인과 별개

Claude Code 로그인과는 별개예요. 앱 안에서 Claude를 호출하려면 API 키가 따로 필요합니다.

  1. console.anthropic.com 가입
  2. 좌측 Billing → 결제 정보 등록 → 최소 $5 충전 ※ 사용한 만큼만 과금 · 뉴스레터 자동화 정도면 월 $1~3 수준
  3. 좌측 API KeysCreate Key
  4. 키 이름 입력 (예: newsletter-automation)
  5. 생성된 키 복사 (sk-ant-...로 시작)
⚠️ 키는 발급 직후 한 번만 표시됩니다. 못 복사하면 다시 발급.
Gmail 앱 비밀번호 발급 — 2단계 인증 필수

전제 조건 — 2단계 인증이 켜져 있어야 해요.

  1. myaccount.google.com → 좌측 보안
  2. 2단계 인증 상태 확인 (꺼져 있으면 켜기)
  3. 앱 비밀번호 페이지 직접 접속
  4. 앱 이름 입력 (예: Newsletter) → 만들기
  5. 16자리 비밀번호 표시 (abcd efgh ijkl mnop) → 복사 + 안전한 곳에 저장
⚠️ 코드에 넣을 땐 공백 제거 — abcdefghijklmnop

※ 무료 Gmail에서 모두 가능. 기업용 Workspace는 관리자 제한 가능.
※ 이 비밀번호는 다시 볼 수 없어요. 잃어버리면 새로 발급.

준비물 체크리스트를 다 했으면, 이제 절반은 끝난 거예요. 진짜.
4

구현하기 (바이브코딩)

준비가 끝났으면 이제 실제로 만들어요. Step 2에서 만든 4개 문서를 Claude Code에 던지고, "1단계부터 개발 시작해줘"로 흘러갑니다.

① 프로젝트 폴더 만들기 — GitHub Desktop으로

터미널 명령어 대신 GitHub Desktop으로 프로젝트를 시작합니다. 클릭 몇 번이면 폴더 생성 + GitHub 레포 연결 + .gitignore 자동 생성까지 한 번에 끝나요.

GitHub Desktop이 뭐예요?

GitHub에서 만든 Git/GitHub용 시각적 도구예요. 터미널에서 git add, git commit, git push 같은 명령어를 외울 필요 없이, 버튼 클릭으로 코드를 GitHub에 올릴 수 있어요.

강사 친화적인 이유:

  • 프로젝트 생성 + GitHub 연결이 한 번에
  • .gitignore 자동 생성 (언어 선택만 하면 됨)
  • 변경 사항이 시각적으로 보임 (어떤 파일이 추가/수정됐는지)
  • Commit과 Push가 버튼 두 번

desktop.github.com에서 다운로드 → 본인 GitHub 계정으로 로그인 한 번이면 끝.

단계

  1. GitHub Desktop 실행 → 상단 메뉴 FileNew repository
  2. Name 입력 (예: my-newsletter)
  3. Local path — 내 컴퓨터의 어디에 저장할지 선택 (기본값 OK)
  4. Git ignore 드롭다운에서 Node 선택 ⭐ 자동으로 Node.js용 .gitignore가 만들어져요. node_modules, .env 같은 게 미리 제외됨
  5. Initialize this repository with a README 체크 (옵션)
  6. Create repository 버튼 클릭
  7. 상단의 Publish repository 버튼 → Private 선택 → Publish ⭐ 이 단계에서 GitHub에도 같은 이름의 레포가 자동 생성돼요
터미널에서 git init + git remote add + git push 다 합쳐서 한 번에 끝나는 단계예요.

VS Code에서 폴더 열기

이제 만든 폴더를 VS Code에서 열고 Claude Code를 실행합니다.

terminal # 만든 폴더로 이동
cd ~/Documents/GitHub/my-newsletter

# VS Code로 폴더 열기
code .

# Claude Code 실행
claude

※ VS Code 메뉴 File → Open Folder에서 직접 선택해도 됩니다. Mac에서 code . 명령어가 안 되면 — VS Code에서 Cmd+Shift+P → "Install code command in PATH" 한 번 실행.

② Claude Code에 첫 프롬프트 던지기

Step 2에서 만든 4개 문서가 같은 폴더 안에 있는 상태예요. Claude Code를 열고 다음 한 줄을 던지면 됩니다.

— 첫 코드 작성 프롬프트
4개의 파일(PRD.md, CLAUDE.md, README.md, current_status.md)을 읽고 맥락을 파악한 다음, 개발 계획을 세워줘.

그리고 1단계부터 개발 시작해줘.

※ Step 2에서 4개 문서를 잘 만들었다면, 정말 이 한 줄로 충분해요. Claude Code가 맥락을 다 파악하고 계획부터 세운 뒤 단계별로 작성합니다.

③ 중간 확인 포인트

Claude Code가 코드를 만드는 동안, 이 지점들에서 한 번씩 멈춰서 확인해요.

  • 폴더 구조가 합리적인가 파일이 너무 많이 분산돼 있지 않은지 — 작은 프로젝트는 3~5개 파일이면 충분
  • 환경변수 파일(.env)이 만들어졌는가 API 키, 비밀번호가 코드에 하드코딩되지 않았는지
  • 각 함수가 한 가지 일만 하는가 RSS 가져오기 / AI 요약 / 메일 발송이 분리되어 있는지
  • 에러 처리가 들어있는가 RSS 가져오기 실패, API 호출 실패 시 멈추지 않고 메시지 남기는지
대안 — 네이버 뉴스 검색 API로 만들고 싶다면

우리가 만든 자동화는 Google News RSS를 사용해요. 가볍고 인증 없이 쓸 수 있다는 장점이 있죠. 그런데 한국 뉴스 중심으로 더 정제된 결과를 받고 싶다면 네이버 검색 API의 뉴스 검색이 더 좋은 선택이에요.

두 입력 방식 비교

Google News RSS
인증 없음 · 글로벌 매체 포함 · 가장 빠르게 시작 가능 (지금 우리가 쓴 방식)
네이버 뉴스 API
API 키 발급 필요 · 국내 매체 중심 · 일 25,000건 무료 · 결과가 비교적 정제됨

네이버 API 키 발급

  1. developers.naver.com 접속 → 우측 상단 로그인 (네이버 계정)
  2. 상단 메뉴 Application애플리케이션 등록 클릭
  3. 애플리케이션 이름 입력 (예: newsletter-automation)
  4. 사용 API 선택에서 검색 체크
  5. 환경 추가 → WEB 설정 → 웹 서비스 URL http://localhost 입력
  6. 등록 → Client IDClient Secret 발급됨
  7. 두 값을 복사해서 안전한 곳에 저장

바꿔야 할 것 — 한 가지만

다른 단계는 동일해요. RSS 가져오는 부분만 네이버 API 호출로 교체하면 됩니다. Claude Code에게 이렇게 부탁하세요:

— 네이버 API 전환 프롬프트
지금 fetcher.js가 Google News RSS를 사용하고 있는데, 네이버 뉴스 검색 API로 바꿔줘.

- 엔드포인트: https://openapi.naver.com/v1/search/news.json
- 헤더: X-Naver-Client-Id, X-Naver-Client-Secret
- 쿼리 파라미터: query, display=20, sort=date
- 환경변수에 NAVER_CLIENT_ID, NAVER_CLIENT_SECRET 추가
- .env.example과 GitHub Actions workflow에도 두 변수 추가
이게 4칸 프레임의 강점이에요. "입력" 칸만 바꾸면 나머지 처리·출력·트리거는 그대로. 데이터 소스를 바꾸는 게 자동화 전체를 다시 만드는 게 아니에요.
5

로컬 테스트 — 내 컴퓨터에서 작동 확인

GitHub Actions로 자동화하기 전에, 내 컴퓨터에서 한 번 돌려서 메일이 실제로 오는지 확인해요. 여기서 작동 안 하면, GitHub Actions로 올려도 작동 안 합니다.

① .env 파일 만들기 — Claude Code가 만들어준 걸 활용

Claude Code에게 PRD대로 코드를 만들어달라고 했다면, 이미 .env.example 파일이 만들어져 있을 거예요. 그걸 복사해서 본인 키로 채우기만 하면 됩니다.

  1. VS Code 파일 트리에서 .env.example 찾기
  2. 복사해서 같은 위치에 .env로 새로 만들기 파일명 앞에 점(.) 빠뜨리지 않기
  3. 각 항목에 본인의 실제 키와 비밀번호 채우기
  4. 저장

또는 더 빠른 방법 — Claude Code에게 시키기:

— Claude Code에게
.env.example 파일을 복사해서 .env 파일을 만들어줘. 각 항목은 내가 직접 채울 거니까 비워둬도 돼.
⚠️ .env 파일은 절대 GitHub에 올라가면 안 돼요. GitHub Desktop으로 만들 때 Node용 .gitignore를 선택했으면, .env는 자동으로 제외됩니다.

② 의존성 설치 + 실행

설치는 한 번만, 실행은 매번 합니다.

"의존성"이 뭐예요? 왜 설치하나요?

의존성(Dependency) = 내 코드가 의존하는 외부 도구들

내가 만든 코드는 다른 사람들이 만든 도구(라이브러리)를 가져다 써요. 예를 들어 우리 뉴스레터 자동화에서는:

  • Nodemailer — Gmail로 메일 보낼 때
  • rss-parser — RSS 읽을 때
  • @anthropic-ai/sdk — Claude API 호출할 때
  • dotenv — .env 파일 읽을 때

이 도구들은 내 컴퓨터에 자동으로 깔려 있지 않아요. 따로 다운로드해야 해요. 그래서 npm install로 한 번에 설치합니다.

npm install이 하는 일

  1. package.json 파일을 읽음 (Claude Code가 만들어둔 도구 목록)
  2. npm 저장소(npmjs.com)에서 도구들을 다운로드
  3. 프로젝트 안 node_modules 폴더에 저장

비유

레시피(코드)와 재료(라이브러리)로 생각하면 쉬워요. 레시피에는 "재료 A와 B를 섞어서..."라고만 적혀 있고, 진짜 재료는 따로 사 와야 해요. npm install레시피에 적힌 재료를 한 번에 사 와서 부엌에 두는 일이에요. 요리(코드 실행)는 그다음에 가능해지죠.

설치는 한 번만, 실행은 매번

  • npm install은 처음 한 번 (재료 사두기)
  • node src/index.js는 실행할 때마다 (요리하기)
  • 새 라이브러리가 추가되면 그때만 다시 npm install
terminal # 의존성 설치 (처음 한 번만)
npm install

# 실행 (매번)
node src/index.js

※ 실제 실행 명령어는 Claude Code가 만든 package.json의 scripts에 따라 다를 수 있어요. 만든 직후 Claude Code에게 "어떻게 실행해?"라고 물어보면 알려줍니다.

③ 메일 수신 확인

  • 터미널에 에러 메시지가 없는가 붉은 글씨가 보이면 에러 메시지를 그대로 Claude에 복붙해서 물어보기
  • 내 Gmail 받은편지함에 뉴스레터가 도착했는가 스팸함도 한 번 확인 — 첫 발송은 가끔 스팸으로 분류됨
  • 기사 내용이 키워드와 맞는가 엉뚱한 기사가 들어와 있으면 AI 필터링 프롬프트를 손봐야 할 수도 있음
  • 요약 품질이 만족스러운가 짧으면 "3줄로 늘려줘", 평이하면 "강사 관점에서 어떻게 쓸지 한 줄 추가" 같은 보완 프롬프트로 조정
로컬에서 한 번 메일이 오면, 그게 자동화의 8할이에요. 남은 건 시간 정해서 알아서 돌게 만드는 것뿐.
6

GitHub에 코드 올리기 + Actions 자동화

이미 Step 4에서 GitHub Desktop으로 레포를 만들고 GitHub에 연결해뒀어요. 이제 Claude Code가 만든 코드를 GitHub에 올리고, Actions로 자동 실행되게 만듭니다.

① 코드 GitHub에 올리기 (Commit + Push)

GitHub Desktop으로 한 번에 끝나요. 터미널 명령어 외울 필요 없어요.

  1. GitHub Desktop 열기 → 좌측에서 본인 프로젝트 선택
  2. 좌측 패널에 변경된 파일 목록이 보임 .env 파일이 목록에 안 보이면 정상 — .gitignore가 잘 작동하는 거예요
  3. 하단 Summary 입력란에 커밋 메시지 (예: first commit)
  4. Commit to main 버튼 클릭
  5. 상단 Push origin 버튼 클릭 → GitHub에 업로드 완료
터미널 명령어 git add . / git commit / git push 세 줄이 버튼 두 번으로 끝났어요.

② GitHub Actions Workflow 만들기 — 자동화의 심장

이 파일이 없으면 GitHub Actions는 아무것도 안 해요. .github/workflows/daily.yml이 "언제, 무엇을, 어떻게 실행할지"를 정의합니다.

※ Claude Code에게 PRD대로 만들어달라고 했다면 이 파일도 이미 만들어져 있을 거예요. 없으면 "GitHub Actions workflow 파일도 만들어줘 (매일 KST 오전 7시 실행)"라고 추가 요청.

핵심 한 줄 — 언제 실행할지

cron 표현 # 매일 UTC 22:00 = KST 07:00 (한국시간 9시간 빠름)
cron: '0 22 * * *'

# 평일(월~금)만 받고 싶다면 (UTC 일~목 = KST 월~금)
cron: '0 22 * * 0-4'

cron 표현 한 줄이 자동화의 스케줄을 결정해요. 강사들이 가장 자주 만지는 부분이기도 합니다.

📄 전체 daily.yml 파일 — 실제로 작동하는 버전

Claude Code가 만들어준 파일은 이런 모양이에요. 그대로 써도 되고, 시간만 조정해서 써도 됩니다.

.github/workflows/daily.yml name: Daily News Curator

on:
  schedule:
    - cron: '0 22 * * 0-4'  # UTC 일~목 22:00 = KST 월~금 07:00
  workflow_dispatch:        # 수동 실행 가능

jobs:
  curate:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v5
      - name: Setup Node.js
        uses: actions/setup-node@v5
        with:
          node-version: '22'
      - name: Install dependencies
        run: npm ci
      - name: Run curator
        run: node src/index.js
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          CLAUDE_MODEL: ${{ secrets.CLAUDE_MODEL }}
          GMAIL_USER: ${{ secrets.GMAIL_USER }}
          GMAIL_APP_PASSWORD: ${{ secrets.GMAIL_APP_PASSWORD }}
          MAIL_TO: ${{ secrets.MAIL_TO }}
          KEYWORDS: ${{ secrets.KEYWORDS }}
          INSTRUCTOR_PROFILE: ${{ secrets.INSTRUCTOR_PROFILE }}
          MAX_ARTICLES: ${{ secrets.MAX_ARTICLES }}
          SIMILARITY_THRESHOLD: ${{ secrets.SIMILARITY_THRESHOLD }}

파일이 하는 일 — 5단계

  1. 언제 — cron 표현으로 매일 KST 07:00 실행
  2. 어디서 — Ubuntu 가상머신 띄우기 (runs-on: ubuntu-latest)
  3. 준비 — Node.js 22 버전 설치
  4. 설치npm ci로 의존성 설치
  5. 실행node src/index.js + Secrets를 환경변수로 주입

강사들이 자주 만지는 두 곳

  • 발송 시간 변경 — cron 표현 수정
    KST 09:00 = '0 0 * * *' · KST 18:00 = '0 9 * * *'
  • 발송 요일 변경 — cron 마지막 부분
    매일 = '0 22 * * *' · 평일만 = '0 22 * * 0-4' · 주말만 = '0 22 * * 5,6'
cron 표현 한 줄을 바꾸는 것만으로 자동화의 리듬이 바뀌어요. 이게 진짜 자동화의 힘이에요.

③ Secrets 등록 — API 키와 비밀번호 안전하게 넣기

로컬의 .env에 있던 값들을 GitHub Secrets에 등록해서, Actions가 안전하게 사용하게 합니다.

GitHub Secrets를 왜 만들어요?

한 줄로 — 코드와 비밀을 분리하기 위해서.

GitHub Actions는 클라우드(GitHub 서버)에서 코드를 실행해요. 그런데 코드가 작동하려면 API 키, Gmail 비밀번호 같은 민감한 값이 필요하죠. 이 값들을 어디에 두느냐가 문제예요. 세 가지 선택지가 있어요.

❌ 선택지 1. 코드 안에 직접 쓰기

GitHub은 코드 저장소예요. Public 레포에 올리면 키가 즉시 노출돼요. 일단 한 번 올라가면 삭제해도 이력에 영원히 남아요.

⚠️ 선택지 2. 로컬 .env 파일에만 두기

내 컴퓨터에서 실행할 땐 OK. 그런데 GitHub Actions는 클라우드에서 돌아요. 내 컴퓨터의 .env에 접근 못 함. 자동화가 작동을 안 함.

✅ 선택지 3. GitHub Secrets에 두기

  • 외부에서 절대 볼 수 없음 (본인도 등록 후엔 다시 못 봄)
  • Actions 실행 시에만 환경변수로 자동 주입
  • 레포가 Public이어도 Secrets는 비공개
  • 키를 바꾸고 싶을 땐 Secrets만 수정, 코드는 그대로
코드(레시피)는 누구나 봐도 되지만, 키(재료)는 금고 안에. 이게 GitHub 자동화의 표준 패턴이에요.

클릭 경로

  1. 내 GitHub 레포 → 상단 메뉴 Settings⚠️ 프로필 Settings가 아니라 레포 페이지 안의 Settings
  2. 좌측 사이드 메뉴 스크롤 → Security 섹션의 Secrets and variables → 드롭다운에서 Actions
  3. 우측 상단 초록 New repository secret 버튼
  4. Name에 변수명, Secret에 실제 값 입력 → Add secret
  5. 아래 변수들을 하나씩 반복 등록 (한 번에 하나씩만 가능)

등록할 변수

  • ANTHROPIC_API_KEY
  • GMAIL_USER
  • GMAIL_APP_PASSWORD (공백 제거)
  • MAIL_TO
  • KEYWORDS (쉼표 구분)
  • INSTRUCTOR_PROFILE
⚠️ Secrets 이름은 대소문자까지 코드와 정확히 일치해야 해요.

④ 첫 실행 — 수동 테스트

매일 오전 7시까지 기다리지 말고, 지금 수동으로 한 번 돌려서 작동을 확인해요.

  1. GitHub 레포 → 상단 메뉴 Actions
  2. 좌측에서 만든 workflow 선택
  3. 우측 Run workflow 버튼 → Run workflow
  4. 실행 결과 — 초록 체크면 성공, 빨간 X면 실패 (클릭해서 로그 확인)
  5. 실패 시 에러 메시지를 그대로 Claude에 복붙
Run workflow 버튼을 누르고 초록 체크가 뜨는 순간, 자동화가 살아 움직이기 시작합니다.
7

완성 확인 + 막혔을 때

완성 확인 체크리스트

  • 로컬에서 메일 수신 OK npm 실행 시 내 Gmail에 뉴스레터 도착
  • GitHub에 코드 업로드 OK 레포 페이지에 파일들이 보이고, .env는 보이지 않아야 함
  • GitHub Actions 수동 실행 OK Actions 탭에서 초록 체크 확인
  • 다음 날 자동 실행 OK 설정한 시간에 자동으로 메일이 도착하는지 — 하루 기다려서 확인

막혔을 때

모든 단계에서 막혀도 괜찮아요. 가장 빠른 해결은 두 가지입니다.

  1. 에러 메시지를 그대로 Claude에 복붙 — 메시지를 해석하려 하지 말고, 그대로 던지는 게 가장 빨라요.
  2. 완성 레포에서 비교 — 아래 링크에서 작동하는 코드를 받아 내 것과 비교.

완성 코드 레포
📂 github.com/TeddyChoi-wow/Mynewsletter →

SECTION 04
PROJECT 02

RFP 공고 모니터링

조달청 입찰 공고가 올라오면, AI가 내 분야 적합도를 판단해 알려줍니다. 더 이상 사이트를 들락거리지 않습니다.

0

완성된 모습 미리보기

완성 스크린샷 또는 데모 영상 영역

1

4칸 프레임으로 설계 정리

이 프로젝트의 입력·처리·출력·트리거 다이어그램

2

PRD 만들기

시작 프롬프트 · 대화 흐름 가이드 · 완성 PRD 예시(접힘)

3

사전 준비물 + 공공데이터 API 키 발급

data.go.kr 회원가입 · 조달청 입찰공고정보 활용 신청 · 인증키 확인 · 환경변수 등록 가이드

4

구현하기 (바이브코딩)

프로젝트 세팅 · 메인 프롬프트(복붙용) · API 응답 구조 이해 · 적합도 판단 프롬프트 설계

5

자동화 연결 — GitHub Actions

하루 2회 실행 workflow · 시크릿 키 등록 · 테스트 실행 가이드

6

완성 확인 체크리스트

API 호출 OK · 적합도 분석 OK · 메일 알림 OK · 자동 실행 OK

7

막혔을 때 — 완성 코드

GitHub 완성 레포 링크 + 자주 발생하는 에러 안내

SECTION 05

내 업무에 적용하기

이제 직접 채워보세요. 내가 반복하는 일을 4칸 프레임에 넣어보면, 자동화의 윤곽이 잡힙니다.

빈 프레임 — 내 자동화 한 줄 설계

01
입력
어디서 가져올까?
02
처리
AI가 뭘 해줄까?
03
출력
결과는 어디로?
04
트리거
언제 돌릴까?
· · ·

이어서 만들어볼 수 있는 자동화

NEXT 01
강의 포트폴리오 자동 업데이트
입력
직접 입력 (강의 끝날 때마다)
처리
Claude API가 누적 데이터 기반 소개서 문장 생성
출력
웹 포트폴리오 + PDF 다운로드
트리거
Vercel Cron · 주 1회 통계 요약

시작 프롬프트 · 완성 레포 링크 예정

NEXT 02
고객사 후속 관리 자동화
입력
교육 이력 DB
처리
Claude API가 맞춤 후속 메일 작성
출력
Gmail 자동 발송
트리거
Supabase Edge Functions · D+7, D+30, D+90

시작 프롬프트 · 완성 레포 링크 예정

SECTION 06

막혔을 때 — 자주 만나는 문제

바이브코딩 초보가 가장 자주 만나는 다섯 가지 상황과 대처법.

FAQ 1 — npm install 에러
FAQ 2 — API 키 인식 안 됨
FAQ 3 — Supabase 연결 실패
FAQ 4 — GitHub Actions 실행 안 됨
FAQ 5 — Claude Code가 코드를 잘못 생성했을 때
에러가 났을 때 가장 빠른 길은, 에러 메시지를 그대로 Claude에 복붙하는 것입니다.
만든 사람

만든 사람

테디 · 최송일
WOWD.LAB(와우디랩) 대표 · 한양대학교 겸임교수

WOWD.LAB은 디자인씽킹 × AI로 일하는 방식을 변화시키는 교육 훈련 전문 기업입니다. "AI를 제대로 쓰려면 디자인씽킹부터"라는 관점으로 14년간 기업교육 현장에서 사고방식과 일하는 방식을 다뤄왔습니다.

문의 · support@wowdlab.com
홈페이지 · wowdlab.com

피드백

오늘 수업, 어떠셨어요?

잠깐의 피드백이 다음 수업을 더 단단하게 만듭니다. 아래 링크에서 짧은 설문에 답해주시면 큰 도움이 됩니다.

설문조사 참여하기 →

※ 설문 링크는 수업 직후 업데이트됩니다