성도 관리 & 문자 발송 앱
태그별 문자 전송, 새가족 환영 메시지 자동화
🎯 학습 목표
- ✓CRUD 기반 성도 관리 시스템 구축
- ✓SMS API (Aligo/NCP SENS) 연동
- ✓태그 기반 필터링 및 단체 문자
- ✓메시지 템플릿 및 자동화
📱 SMS API 소개
알리고 (Aligo)
💰 가격: 건당 15원~
✅ 장점: 저렴, 간편, API 사용 쉬움
📞 용도: 소규모 교회, 개인 사용
🔗 웹사이트: smartsms.aligo.in
NCP SENS (Naver Cloud)
💰 가격: 건당 9원~
✅ 장점: 대용량, 안정적, 통계
📞 용도: 대규모 교회, 기업
🔗 웹사이트: ncloud.com
💻 실습: 단계별 진행
STEP 1DB 스키마: 성도 관리 (8분)
🤖 프롬프트
Prisma로 Member 모델을 만들어줘:
- name (이름)
- phone (전화번호, unique)
- email (이메일)
- birthdate (생년월일)
- address (주소)
- group (소속: 청년부/장년부/어린이부)
- role (직분)
- tags (태그 배열: 새가족, VIP, 봉사자 등)
- registeredAt (등록일)
- notes (비고)
Message 모델도 만들어줘:
- to (수신자 전화번호)
- message (내용)
- status (대기/전송완료/실패)
- sentAt (전송 시각)
- errorMessage (실패 사유)
STEP 2백엔드: 성도 관리 API (10분)
🤖 프롬프트
NestJS로 Member CRUD API를 만들어줘:
GET /members - 전체 조회 (페이지네이션, 검색, 필터)
POST /members - 신규 등록
GET /members/:id - 상세 조회
PATCH /members/:id - 정보 수정
DELETE /members/:id - 삭제
검색 기능: 이름, 전화번호, 이메일로 검색 가능하게
필터 기능: 소속, 태그로 필터링 가능하게
정렬 기능: 이름순, 등록일순 정렬 가능하게
📊 페이지네이션 예시
GET /members?page=1&limit=20&search=김&group=청년부
Response:
{
data: [...members],
total: 150,
page: 1,
totalPages: 8
}STEP 3백엔드: SMS 발송 서비스 (12분)
🤖 프롬프트 1 - Aligo 연동
NestJS에 Aligo SMS 서비스를 만들어줘.
환경변수로 ALIGO_API_KEY, ALIGO_USER_ID, ALIGO_SENDER를 받아줘.
sendSMS 메서드:
- to: 수신자 번호 (또는 배열)
- message: 메시지 내용
- 결과를 Message 테이블에 저장
axios로 Aligo API 호출:
POST https://apis.aligo.in/send/
Body: key, user_id, sender, receiver, msg
💡 SMS 서비스 구조
// sms.service.ts
@Injectable()
export class SmsService {
async sendSMS(to: string[], message: string) {
const results = [];
for (const phone of to) {
try {
// Aligo API 호출
const response = await axios.post(...);
// DB에 성공 기록
await prisma.message.create({
data: { to: phone, message, status: 'SENT' }
});
results.push({ phone, success: true });
} catch (error) {
// DB에 실패 기록
await prisma.message.create({
data: {
to: phone,
message,
status: 'FAILED',
errorMessage: error.message
}
});
results.push({ phone, success: false });
}
}
return results;
}
}⚠️ SMS API 테스트 주의
실제 문자가 발송되고 비용이 청구되므로, 테스트 시 본인 번호로만 테스트하세요!
STEP 4프론트엔드: 성도 관리 화면 (10분)
🤖 프롬프트
Next.js로 성도 관리 페이지를 만들어줘:
상단:
- 검색창 (이름/전화번호)
- 필터 (소속별, 태그별)
- "신규 등록" 버튼
테이블:
- 이름, 전화번호, 소속, 태그
- 각 행에 "수정" "삭제" 버튼
- 체크박스 (문자 발송용)
- 페이지네이션
하단:
- "선택된 XX명에게 문자 보내기" 버튼
STEP 5프론트엔드: 문자 발송 화면 (10분)
🤖 프롬프트
문자 발송 모달을 만들어줘:
1. 수신자 목록 표시 (선택된 사람들)
2. 템플릿 선택 드롭다운:
- 환영 메시지
- 생일 축하
- 행사 안내
- 직접 작성
3. 메시지 입력 영역 (바이트 수 표시)
4. 변수 삽입 버튼: {name}, {church}
5. 미리보기
6. "전송" 버튼
전송 후 결과 표시:
- 성공 XX건, 실패 XX건
- 실패한 번호 목록
📝 메시지 템플릿 예시
환영 메시지
{name}님, {church}에 오신 것을 환영합니다! 하나님의 사랑이 함께 하시길 기도합니다. 🙏
생일 축하
{name}님! 생일을 진심으로 축하드립니다. 🎂 하나님의 축복이 가득하시길 기도합니다!
🤖 자동화 기능
NestJS Cron으로 자동 발송
🤖 프롬프트
NestJS의 @nestjs/schedule을 사용해서 다음 자동 작업을 만들어줘:
1. 매일 오전 9시: 오늘 생일인 성도들에게 축하 문자
2. 매주 토요일 오후 6시: 내일 예배 안내 문자
3. 새가족 등록 시: 즉시 환영 문자 발송
💡 구현 예시
@Injectable()
export class AutoMessageService {
@Cron('0 9 * * *') // 매일 오전 9시
async sendBirthdayMessages() {
const today = new Date();
const members = await prisma.member.findMany({
where: {
birthdate: {
month: today.getMonth() + 1,
day: today.getDate()
}
}
});
for (const member of members) {
await smsService.sendSMS(
[member.phone],
`${member.name}님! 생일을 축하드립니다! 🎂`
);
}
}
}🚀 확장 아이디어
📊 발송 통계
월별 발송량, 비용, 성공률 차트
📅 예약 발송
특정 날짜/시간에 자동 발송
📸 MMS (사진문자)
이미지 첨부 문자 발송
💾 엑셀 import/export
대량 등록 및 백업
✅ 완성 체크리스트
👨🏫 강사 노트
⏰ 가장 긴 세션: 50분이므로 중간 휴식 없이 집중! 템포 유지 중요
💳 API 키: 실습용 Aligo 계정 미리 준비 (충전 필요). 또는 데모 모드로 진행
🎯 핵심: "이제 여러분은 교회 전체 성도에게 문자를 보낼 수 있습니다!"
⚠️ 비용 안내: SMS 비용 명확히 설명. 월 예산 계획 중요성 강조
🔐 개인정보: 전화번호 등 민감 정보 관리 주의사항 반드시 언급
💡 실전 팁: "새가족에게 일일이 전화하던 것을 자동화!"