Codelier · Lead Submit UX Lab

문의를 보냈을 때,
화면은 무엇을 해야 하나

제출 버튼을 누른 뒤 서버 응답까지의 공백을 어떻게 처리하느냐가 "이 개발사 느린데?"와 "빠릿하다"를 가릅니다. 다만 빠르게 보이려고 리드를 잃으면 안 됩니다. 아래 네 가지 패턴을 네트워크 조건을 바꿔가며 직접 눌러 비교해 보세요. 각 카드 아래 타임라인 로그에 화면 뒤에서 실제로 무슨 일이 일어났는지 그대로 찍힙니다.

네트워크

빠름 — 서울 리전 Supabase의 실제 insert 지연대(50~200ms)입니다.

PATTERN 01

낙관적 전환

버튼을 누르는 즉시 완료 화면으로 넘깁니다. 전송은 뒤에서 진행하고, 실패하면 되돌립니다.

권장 — 단, 실패 복구가 반드시 있어야 함

접수되었습니다

평일 기준 1영업일 안에 회신드립니다.

전송에 실패했습니다

입력하신 내용은 그대로 있습니다. 다시 시도하시거나 메일로 보내주세요.

메일로 보내기
타임라인
  • 제출하면 여기에 기록됩니다

PATTERN 02

버튼 인라인 로딩

버튼이 스피너로 바뀌고 응답이 오면 완료로 전환합니다. 가장 정직하지만 느릴 때 그대로 드러납니다.

조건부 — 응답이 항상 빠를 때만

접수되었습니다

평일 기준 1영업일 안에 회신드립니다.

전송에 실패했습니다

잠시 후 다시 시도하시거나 메일로 보내주세요.

메일로 보내기
타임라인
  • 제출하면 여기에 기록됩니다

PATTERN 03

단계 연출

"보내는 중 → 접수 → 담당자 배정"을 순차로 보여줍니다. 기다림을 서사로 바꾸지만, 실제 진행이 아니면 거짓말이 됩니다.

비권장 — 실제 단계일 때만 허용
내용 확인
접수 저장
담당자 배정

전송에 실패했습니다

단계 연출 중 실패하면 어디까지 진짜였는지 사용자가 알 수 없습니다.

메일로 보내기
타임라인
  • 제출하면 여기에 기록됩니다

PATTERN 04

낙관적 전환 + 접수번호

즉시 넘기되 접수번호와 회신 시각을 함께 줍니다. 번호는 저장이 확인된 뒤 채워집니다.

권장 — 이 사이트에 채택

접수되었습니다

평일 기준 1영업일 안에 회신드립니다.

접수번호 발급 중…

전송에 실패했습니다

담당자에게 직접 전달했습니다. 확인 후 먼저 연락드리겠습니다.

메일로도 보내기
타임라인
  • 제출하면 여기에 기록됩니다

이 사이트에 적용할 결론

"느려 보이지 않기"보다 "리드를 잃지 않기"가 상위 목표입니다. 개발사 사이트에서 문의가 조용히 사라지는 건 화면이 0.2초 느린 것과 비교가 안 되는 손해입니다. 그래서 연출로 덮는 대신, 덮을 필요가 없게 만듭니다.

  • 01일시정지를 먼저 막습니다. Vercel Cron 하루 1회 헬스체크로 Supabase 무료 티어의 7일 일시정지를 방지합니다. 이러면 지연이 50~200ms대로 유지돼 애초에 덮을 공백이 없습니다.
  • 02저장은 기다립니다. insert를 await 해야 "접수되었습니다"가 진실이 됩니다. 대신 화면은 낙관적으로 먼저 넘겨 체감을 없앱니다.
  • 03알림은 뒤로 넘깁니다. Discord·자동 회신 메일은 after()로 응답 후 처리합니다. 실패해도 리드는 이미 DB에 있습니다.
  • 04실패 경로를 설계합니다. 2.5초 타임아웃 후에도 저장이 안 되면 Discord로 연락처 포함 긴급 알림을 보내고, 화면에는 "담당자에게 직접 전달했습니다"를 보여줍니다. 사용자에게 재입력을 요구하지 않습니다.
  • 05가짜 단계 연출은 쓰지 않습니다. 패턴 03처럼 실제 진행과 무관한 단계를 보여주면, 실패했을 때 어디까지가 진짜였는지 아무도 모릅니다.
← 코들리에 이 화면은 제작 예시입니다. 브랜드명 · 문구 · 숫자 · 사진은 실제가 아니며, 제작 시 그 사업에 맞춰 다시 씁니다. 시안 전체 보기 문의하기 →