현재 사용법 (2026-09-10,
6fbaee7f): 공개 랜딩·데모·상담 신청 · 기능 마스터. 아래는 작성 당시의 변경 설명이며 현재 전체 동작·재측정 결과를 뜻하지 않습니다.
요약
상담 신청은 서버의 명시적인 성공 응답을 확인한 뒤 접수 완료로 표시하며, 동일 이메일의 동시 신청은 하나의 메일 발송 결과를 함께 기다리도록 수정했습니다.
랜딩의 상담 신청 폼은 inquiry.create API를 호출하며, 이 API는 내부 영업 메일의 발송 성공을 접수 성공으로 처리합니다. 기존 프런트는 HTTP 상태만 확인하여 잘못된 본문도 성공으로 표시했습니다. 서버는 발송 전에 이메일을 중복 차단 목록에 등록하여, 첫 발송이 실패하더라도 동시에 들어온 두 번째 요청에는 성공을 반환할 수 있었습니다.
변경 전
변경 후
프런트 요청 함수를 분리하고 tRPC 응답의 result.data.json.success === true까지 검사합니다. HTML, 빈 본문, 잘못된 JSON 구조 또는 실패 응답은 접수 완료로 처리하지 않습니다. 기존 오류 표시와 사용자 재신청 흐름을 유지합니다.
서버는 진행 중인 발송을 담는 pending과 성공 시각을 담는 delivered를 구분합니다. 같은 이메일의 요청은 진행 중인 Promise를 공유하며, 발송 성공 시점부터 5분 동안 추가 발송을 생략합니다. 실패하면 진행 상태를 정리하므로 다시 신청할 수 있습니다. 동기 예외도 같은 정리 경로를 거칩니다.
별도의 중복 알림은 추가하지 않습니다. DB 저장과 자동 재발송도 추가하지 않습니다. 중복 방지는 기존과 동일하게 서버 프로세스 단위이며 여러 인스턴스 사이에서는 공유되지 않습니다.
Test plan
- [x] 프런트 응답 검사 8개가 통과했습니다. 명시적 성공, 잘못된 200 본문, 서버 오류, 네트워크 오류 및 후속 요청을 확인했습니다.
- [x] 서버 발송 조정 테스트 3개가 통과했습니다. 동시 요청의 결과 공유, 실패 후 재신청, 성공 후 5분 만료 및 동기 예외를 확인했습니다.
- [x] 서버 테스트 파일을 별도로 타입 검사했습니다.
- [x] 전체 린트 및 전체 빌드 23개 작업이 통과했습니다. 로컬 pnpm 자동 재설치를 비활성화하고 Turbo loose 환경 모드로 검증했습니다.
- [ ] 실제 운영 메일 발송은 실행하지 않았습니다.