발주 전화가 귀찮아서 AI로 메일 자동 알림 시스템 만든 과정

AI로 만들어봤습니다··21분 읽기·

발주 전화가 귀찮아서 AI로 메일 자동 알림 시스템 만든 과정

발주 메일 자동 감지 + SMS/카카오톡 알림 시스템 Echo Mail 개발 과정

"메일 보셨죠?" — 하루에 열 번 넘게 걸려오는 전화

B2B 업무를 해본 분이라면 이 상황이 익숙할 거예요. 거래처에서 발주 메일을 보내고, 5분도 안 돼서 전화가 옵니다. "메일 확인하셨죠?" 하루에 이런 전화가 열 통 넘게 오면... 일하는 건지 전화 받는 건지 모르겠더라고요.

지인이 딱 이 상황이었어요. 어느 날 문득 생각했죠. 발주 메일이 도착하는 순간 "접수 완료 + 납품 예정일" 문자가 자동으로 나가면, 확인 전화 자체가 사라지지 않을까? 이걸 AI로 만들어보기로 했습니다.

첫 시도 — "만들어줘"의 한계

처음에 AI한테 던진 말:

발주 메일 오면 문자 보내는 앱 만들어줘

돌아온 건 교과서 같은 개념 설명이었어요. "이메일 API를 연동하고 SMS API를 사용하면 됩니다." 맞는 말인데... 그래서 뭘 어떻게 하라는 건지 감이 안 잡혔거든요.

그래서 프롬프트를 바꿨습니다. "만들어줘"가 아니라 "기획서 먼저 써줘"로요.

당신은 B2B SaaS 기획 전문가입니다.
아래 상황에 맞는 PRD(제품 요구사항 문서)를 작성해주세요.

[현재 상황]
- 제조업체가 발주 메일을 보내면, 수신 측에서 확인 전화를 하루 10통 이상 받음
- 확인 전화를 90% 줄이는 것이 목표

[요구사항]
- 발주 메일 자동 감지 (IMAP 프로토콜 사용)
- 등록된 거래처에만 SMS 또는 카카오톡 알림 발송
- 납품 예정일 자동 계산 (공휴일 제외)
- 알림 발송 성공률 99% 이상
- 멀티테넌트: 여러 회사가 각자의 메일함/거래처를 관리

[기술 제약]
Vercel은 IMAP 지원 안 됨. 별도 서버 필요. 비용은 최소화.

차이가 뭐냐면요. "확인 전화 90% 감소"라는 성공 지표를 넣었고, "Vercel은 IMAP 지원 안 됨"이라는 기술 제약을 명시했어요. 이 두 가지만 넣었을 뿐인데 AI가 사용자 시나리오, 데이터 구조, API 설계까지 포함된 기획서를 만들어냈습니다.

핵심은 "만들어줘"가 아니라 "이 조건 안에서 계획 세워줘"로 바꾼 거예요.

기술스택 — "이건 안 돼"를 먼저 알려주는 게 핵심

기획서가 나왔으니 다음은 "뭘로 만들 건가"였어요. 여기서도 AI한테 조건을 구체적으로 줬습니다.

당신은 풀스택 아키텍트입니다.

[필수 조건]
- 메일함을 주기적으로 체크해야 함 (Vercel 서버리스 불가)
- SMS/카카오톡 발송 API 연동 (한국 서비스 호환)
- 여러 회사가 각자 데이터를 분리해서 사용
- 1인 개발자가 유지보수 가능한 수준

[현재 역량]
Next.js는 써봤음. 백엔드 경험 없음. DB는 Supabase 사용 중.

[요청]
위 조건을 만족하는 기술스택과, 각 선택의 이유를 설명해주세요.

"현재 역량"을 넣은 게 효과가 컸어요. AI가 제 수준에 맞는 스택을 추천해줬거든요.

뭘 하는 건지 어떤 도구 왜 이걸 골랐나
화면 만들기 Next.js 이미 써봤으니까
데이터 저장 Supabase 이미 쓰고 있으니까
메일 읽기 imapflow Node.js에서 메일함 읽는 도구
문자/카톡 보내기 SOLAPI 한국 문자/카카오톡 발송 서비스
서버 돌리기 Railway + Docker 메일 감시 프로그램을 24시간 켜두려고
여기서 가장 중요했던 건 Railway였어요. 보통 Next.js 앱은 Vercel에 올리는데, Vercel은 "요청이 올 때만 잠깐 켜지는" 구조라 메일함을 계속 감시하는 게 안 되거든요. Railway는 프로그램을 24시간 돌릴 수 있어서 5분마다 메일함을 체크하는 게 가능했습니다.

14주, 559커밋 — "하나만 고치면 끝"의 반복

2025년 9월 24일에 시작해서 12월 31일까지, 14주간의 핵심 구간이에요.

주차 뭘 했나
1주 "메일 오면 문자 보내기" 기본 기능 완성
2-3주 관리 화면 추가, 문자 발송 서비스 연동
4주 대전환 — 단일 회사용 → 여러 회사가 쓸 수 있는 구조로 변경
5-6주 Railway 서버 배포, 카카오톡 알림 추가, 로그인 시스템 교체
7-8주 메일 뷰어 추가, 문자 중복 발송 방지 (이게 15번 고침...)
9-10주 메일 작성기, 스팸 필터, 알림 템플릿
11-13주 성능 개선, 대량 공지 기능, 공휴일 자동 계산
14주 자잘한 버그 수정 마무리
4주차가 가장 큰 전환점이었어요. 처음에는 한 회사만 쓰는 걸로 만들었는데, "다른 회사도 쓸 수 있으면 좋겠는데?"라는 생각이 들면서 구조를 뜯어고쳤습니다.

"여러 회사가 쓰게 해줘" — 피드백이 핵심이었다

단일 회사용을 여러 회사용으로 바꾸는 건 생각보다 큰 작업이었어요. AI한테 이렇게 시켰습니다.

당신은 멀티테넌트 SaaS 아키텍트입니다.

[현재 상태]
- 한 회사만 쓰는 발주 알림 시스템
- DB에 저장된 데이터에 "어느 회사 건지" 구분이 없음

[요청]
1. 최소한의 변경으로 여러 회사가 각자 데이터를 분리해서 쓸 수 있게 해주세요
2. A회사 직원이 B회사 데이터를 절대 볼 수 없어야 합니다
3. 기존 기능은 최대한 유지해주세요

AI가 "모든 데이터에 '회사 구분값'을 추가하고, DB 레벨에서 접근 제한을 걸자"는 방식을 제안해줬어요. 여기까진 좋았는데...

AI가 놓친 게 있었습니다. 핵심 3개 테이블에만 접근 제한을 걸었고, 나머지 테이블은 열려 있었어요. 납품 규칙, 발송 기록 같은 테이블에 보안이 없어서 다른 회사 데이터가 보일 수 있는 상태였죠.

그래서 피드백을 줬습니다:

[피드백]
회사 구분값은 추가했는데, 접근 제한이 핵심 3개 테이블에만 적용됐어요.
납품 규칙, 발송 기록, 휴무일 테이블에는 보안이 없어서
다른 회사의 데이터가 보일 수 있습니다.

[요청]
회사 데이터가 들어가는 모든 테이블에 접근 제한을 일괄 적용하고,
관리자만 전체 데이터를 볼 수 있는 예외도 추가해주세요.

"모든 테이블에 일괄 적용"이라고 명시하니까 그제서야 누락 없이 처리됐어요. AI한테 큰 작업을 시킬 때는 첫 결과에서 빠진 걸 찾아서 피드백하는 게 핵심이더라고요.

납품일 자동 계산 — 비즈니스 로직이 가장 까다로웠다

개발 중 가장 머리 아팠던 건 기술적인 문제가 아니라 납품 예정일 계산이었어요. 단순히 "주문일 + 2일"이 아니거든요.

  • 서울은 오후 2시 전 주문하면 내일 납품, 경기는 낮 12시가 마감
  • 2시 넘기면? 모레 납품. 근데 추가 비용 내면 오후 4시까지도 가능
  • 토/일/공휴일은 건너뛰고, 회사별 자체 휴무일도 제외
이걸 AI한테 설명하는 프롬프트가 중요했어요:
당신은 물류 납품일 계산 전문가입니다.

[납품 규칙 구조]
- 지역별 마감 시간: 서울 14:00, 경기 12:00
- 추가 비용 마감: 서울 16:00
- 마감 전 주문: 다음 영업일 납품
- 마감 후 주문: 다다음 영업일 납품
- 주말과 공휴일은 건너뜀
- 회사별 자체 휴무일도 제외

[요청]
위 규칙에 따라 납품 예정일을 계산하는 기능을 만들어주세요.
주말과 공휴일을 건너뛰는 로직이 핵심입니다.

비즈니스 규칙을 지역별 시간, 추가 비용 조건, 예외 사항으로 구조화해서 넣으니까 AI가 정확한 계산 로직을 만들어줬어요. 다만 12월에 버그가 나왔습니다. 캘린더에서 다음 달로 넘어갈 때 그 달의 공휴일 정보를 다시 불러오지 않아서 12월 크리스마스가 영업일로 계산된 거예요. 14주차에 이 버그를 잡았습니다.

문자 발송 — 카카오톡 우선, SMS 자동 전환

알림을 보내는 건 SOLAPI라는 한국 서비스를 썼어요. 처음에는 다른 서비스(NCP)를 썼는데, SOLAPI로 바꾼 이유가 있었어요:

  • 카카오톡 알림톡이 SMS보다 저렴
  • SMS랑 카카오톡을 하나의 도구로 모두 처리 가능
  • 문자 발송 실패하면 자동으로 3번까지 재시도
  • 카카오톡 알림톡을 먼저 시도하고, 실패하면 SMS로 자동 전환하는 구조로 비용을 최적화했어요.

    559커밋이 만든 기능들

    14주 동안 만든 것들을 정리하면:

    • 메일 감지: 5분마다 메일함 자동 확인, 새 발주 메일 발견
    • 자동 알림: SMS/카카오톡으로 "접수 완료 + 납품 예정일" 자동 발송
    • 메일 뷰어: 웹에서 메일 보기 + 첨부파일 다운로드
    • 메일 작성: 답장, 표 편집, 이미지 삽입까지
    • 업체/담당자 관리: 거래처 등록, 엑셀로 한꺼번에 올리기
    • 납품 규칙: 지역별 마감 시간 + 공휴일 자동 제외
    • 대량 공지: 여러 거래처에 한 번에 안내 문자 보내기
    • 관리자 대시보드: 여러 회사 데이터를 한눈에 모니터링
    "발주 메일 오면 문자 보내는 앱"이 14주 만에 여기까지 커졌어요. 처음부터 이 규모를 계획한 건 아니에요. PRD를 구체적으로 쓰고, AI한테 제약조건을 명확히 알려주고, 결과를 보고 피드백하는 걸 반복하다 보니 점진적으로 커진 겁니다.

    솔직한 한계점

    완벽하진 않아요. 아직 남은 과제들:

    • SMS 중복 발송 버그: 같은 문자가 2~3번 가는 문제를 15번이나 고쳤는데, 엣지 케이스가 아직 나옴
    • 인증 시스템 전환 진통: NextAuth에서 Supabase Auth로 갈아타면서 로그인 무한 루프 발생, 커밋 8개 소요
    • 1인 운영의 한계: 버그 리포트가 오면 본업 끝나고 밤에 고치는 상황
    그래도 핵심 목표였던 "확인 전화 줄이기"는 달성했어요. 발주 메일이 오면 평균 30초 내에 자동 알림이 나가니까, "메일 보셨죠?" 전화가 확실히 줄었다고 하더라고요.

    되돌아보면 — "만들어줘" vs "이 조건에서 계획 세워줘"

    14주 동안 배운 건 결국 프롬프트였어요. "발주 알림 만들어줘"로는 교과서 답변만 나왔는데, "확인 전화 90% 감소가 목표고, Vercel은 안 되고, 여러 회사가 써야 한다"를 넣으니까 실행 가능한 계획이 나왔거든요.

    AI한테 뭔가를 시킬 때 효과가 있었던 패턴 세 가지:

  • "만들어줘"가 아니라 "계획 세워줘"로 시작 — AI가 전체 구조를 먼저 잡아줌
  • "안 되는 것"을 먼저 알려주기 — Vercel 안 됨, 백엔드 경험 없음, 비용 최소화 같은 제약조건
  • 첫 결과에서 빠진 걸 찾아서 피드백 — AI가 3개 테이블에만 보안 걸었을 때 "모든 테이블에 적용해"라고 돌려보냄
  • 코딩을 몰라도, 문제를 구체적으로 설명하고 결과를 검증하는 과정만 반복하면... 559커밋짜리 시스템이 만들어지더라고요.

    공유

    댓글