개발일지 2026-07-19
개발일지 (2026-07-19)
개요
카카오 알림톡 템플릿 형식을 뿌리오 심사 규격([*N*])에 맞춰 전면 교체하고, DB 기본 템플릿과 뿌리오 키를 일괄 업데이트했다.
수정/생성 파일 목록
백엔드 (piano-backend)
PpurioService.java(수정) —[*N*]/[*이름*]형식 변수 치환 추가AcademyNotificationSender.java(수정) — 학원명([*1*]) 자동 주입, AcademyMapper 연동
프론트 — 학원 앱 (academy)
pages/NotificationTemplates.tsx(수정) — VAR_MAP을[*N*]형식으로 전면 교체, 제목 편집 TextField 추가, 뿌리오 카카오 키 입력/저장 필드 추가api/notificationTemplates.ts(수정) —kakaoTemplateCode필드 추가
DB
academy_notification_templates—kakao_template_code컬럼 추가, 전체 템플릿 내용/키 업데이트
파일별 상세
1. 카카오 알림톡 변수 형식 통일
카카오 심사에서 {1} 형식이 반려되어 [*N*] / [*이름*] 형식으로 전면 교체했다.
반려 사유:
- 변수 형식 오류:
{1}→[*변수*]형태여야 함 - 수신자 액션 명시 필요: "신청하신", "예약하신" 등 문맥 추가
교체 결과:
| 유형 | 뿌리오 키 | 내용 |
|---|---|---|
| 레슨 확정 | ppur_2026071610295799285497030 | [*1*] 레슨이 확정되었습니다... |
| 예약 알림 | ppur_2026071610530397693814438 | 예약하신 수업이 [*4*]분 후 시작... |
| 결제 완료 | ppur_2026071611015799285348251 | [*1*] 결제가 완료되었습니다... |
| 환불 완료 | ppur_2026071611025699285305094 | [*1*] 환불이 처리되었습니다... |
| 상담 예약 | ppur_2026071611034497693127571 | [*1*] 상담 예약이 확정되었습니다... |
| 수강권 만료 | ppur_2026062514164015156435443 | 수강권 만료일이 임박했습니다... |
| 체험 레슨 | ppur_2026071610295799285497030 | [*1*] 체험 레슨이 확정되었습니다... |
2. 발송기 변수 치환 확장
PpurioService.replaceVariables()에 [*N*] 형식 치환을 추가했다.
// [*N*] / [*이름*] 뿌리오 카카오 형식
result = result.replace("[*" + entry.getKey() + "*]", entry.getValue());
3가지 형식을 모두 지원: [*N*] (카카오), {N} (SMS), #{N} (레거시)
3. 알림 관리 UI 개선
- 제목(알림 유형명) 편집 가능 (TextField)
- 뿌리오 카카오 템플릿 코드 입력/저장 필드 추가
- 발송 시점 셀렉트박스로 변경
4. 알림 발송 시점 정책 정리
학원별 발송 시점을 자유롭게 설정하면 스케줄러 부하가 증가하므로, "즉시" 또는 "사전 알림(고정)" 두 가지로 통일하는 정책을 수립했다.
- 즉시 발송: 레슨 확정, 결제 완료, 환불, 상담 예약, 체험 레슨
- 사전 알림(배치): 레슨 1시간 전 리마인더, 수강권 만료 7일 전
결론 / 배운 점
- 카카오 알림톡 심사는 변수 형식에 엄격하다.
[*변수내용*]형태만 허용. 수신자 액션(신청/예약/결제 등)을 명시해야 정보성 메시지로 인정. - 발송 시점은 단순하게. 학원마다 다른 지연 발송은 스케줄러 복잡도를 기하급수적으로 높인다. "즉시" + "고정 사전 알림"이 운영 효율적.
- 변수 치환은 한 곳에서. SMS/카카오/레거시 3가지 형식을
replaceVariables한 메서드에서 처리하면 어떤 형식이든 대응 가능.
댓글 0
- 첫 번째 댓글을 남겨보세요.