시도하고자 했던 것과 그 이유를 알려주세요.
Above Coding Club 워크샵을 운영하면서 신청이 들어올 때마다 수동으로 처리하던 업무들을 자동화했습니다.
신청자가 생길 때마다 슬랙에서 알림 받기
신청 완료 확인 이메일 자동 발송
모집 마감 후 상세 안내 이메일 일괄 발송
기존에는 Airtable 에 신청 데이터가 쌓이기만 하고, 알림도 이메일도 전부 수동이었습니다. 워크샵을 반복 운영하면서 이 과정을 코드로 자동화하고 싶었습니다.
진행 방법
어떤 도구를 사용했고, 어떻게 활용하셨나요?
Claude Code에게 현재 프로젝트 구조(Vercel + Airtable)를 기반으로 자동화 방법을 상의하고, 함께 구현했습니다.
1단계: 자동화할 업무 정리 + 방법 논의
첫 프롬프트로 자동화하고 싶은 업무 목록을 주고, 기술 스택에 맞는 방법을 제안받았습니다.
이제 상세페이지로 워크샵을 오픈할거야. 그럼 이 과정에서의 일어나는 일들을 자동화하고 싶어. 자동화 필요한 업무를 살펴보면, 아래의 일과 같아. 이걸 어떻게 할 수 있을까?
- 신청자 발생할 때마다 알림 받기
- 신청 완료 메일 발송
- 리마인더 문자 발송 (d-1)
Claude Code가 현재 스택(Vercel Serverless + Airtable)을 분석하고, 각 업무별로 구현 방법과 난이도를 비교 정리해줬습니다. 슬랙 알림은 웹훅, 이메일은 Resend API, 문자는 알리고 API를 추천받았습니다.
2단계: 계획 수립 + 이메일 내용 공유
Claude Code가 계획 모드에서 구현 계획을 세우고, 이메일 내용은 제가 직접 공유했습니다.
대화하면서 신청 확인 이메일(자동)과 상세 안내 이메일(수동 트리거) 두 종류로 나뉘어야 한다는 것도 정리되었습니다. 문자 리마인더는 이번 스코프에서 제외하고 나중에 추가하기로 했습니다.
3단계: 구현
Claude Code가 기존 api/apply.js를 수정하고 api/send-info.js를 새로 만들었습니다.
api/apply.js — 신청 시 슬랙 알림 + 확인 이메일 자동 발송:
// 슬랙 알림 발송
async function sendSlackNotification({ name, phone, email, job, tool }) {
const webhookUrl = process.env.SLACK_WEBHOOK_URL;
if (!webhookUrl) return;
const text = `🎉 새 워크샵 신청!\n이름: ${name}\n하시는 일: ${job}\n이메일: ${email}\n연락처: ${phone}${tool ? `\n만들고 싶은 도구: ${tool}` : ''}`;
await fetch(webhookUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text })
});
}
// 신청 확인 이메일 발송
async function sendConfirmationEmail({ name, email }) {
const apiKey = process.env.RESEND_API_KEY;
if (!apiKey) return;
await fetch('https://api.resend.com/emails', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: process.env.FROM_EMAIL || 'Above Coding Club <[email protected]>',
to: email,
subject: '[어보브 코딩 클럽] 워크샵 신청이 완료되었습니다',
text: `${name}님, 어보브 코딩 클럽 워크샵 신청이 완료되었습니다!\n\n신청 내역을 확인한 후 상세 안내 메일을 보내드릴게요.\n궁금한 점은 이 메일로 편하게 답장 주세요.\n\n어보브 코딩 클럽 드림`
})
});
}
Airtable 저장 성공 후 두 함수를 호출:
await Promise.allSettled([
sendSlackNotification({ name, phone, email, job, tool }),
sendConfirmationEmail({ name, email })
]);
api/send-info.js — 모집 마감 후 상세 안내 이메일 일괄 발송 API도 별도로 만들어, 워크샵 날짜를 넘기면 Airtable에서 신청자를 조회해 참석자 소개와 만들고 싶은 도구 목록을 자동으로 채워 발송합니다.
4단계: 환경변수 설정 + 배포
Vercel Dashboard에서 환경변수 2개를 추가하고, git push로 자동 배포했습니다.
Key
용도
SLACK_WEBHOOK_URL
슬랙 Incoming Webhook URL
RESEND_API_KEY
Resend 이메일 API 키
결과와 배운 점
배운 점과 나만의 꿀팁
외부 라이브러리 없이
fetch만으로 슬랙 웹훅과 Resend API를 호출할 수 있어서 의존성을 최소화할 수 있었습니다.Claude Code에게 현재 코드를 먼저 분석하게 한 후 방법을 제안받으면, 기존 구조에 자연스럽게 녹아드는 방식으로 구현할 수 있습니다.
이메일 내용처럼 정해진 텍스트가 있으면 직접 공유하는 게 좋습니다. Claude Code가 알아서 동적 변수(
{이름},{날짜}등)를 분리해서 템플릿화해줍니다.
시행착오
처음에 슬랙/이메일 발송을
await없이 비동기로 실행했더니 아무것도 오지 않았습니다. Vercel 서버리스 함수는 응답을 보내면 바로 종료되기 때문에, 알림 발송이 완료되기 전에 함수가 꺼진 것이었습니다.await Promise.allSettled()로 변경하여 해결했습니다.Vercel 환경변수 추가 시 Key와 Value를 바꿔 넣는 실수를 했습니다. Key에는 변수 이름(
SLACK_WEBHOOK_URL), Value에 실제 값을 넣어야 합니다.
여러 항목이 표시된 컴퓨터 화면의 스크린샷
앞으로의 계획
D-1 문자 리마인더 추가 (알리고 API + Vercel Cron Job)
Resend 도메인 인증 후 자체 이메일 주소로 발송
상세 안내 이메일에 HTML 디자인 적용