폼·입력

검증으로 게이팅하는 다단계 스텝퍼 위저드

단계별 입력을 검증하며 진행하는 회원가입 폼. 진행 인디케이터로 현재 위치를 보여주고, 통과한 단계로 자유롭게 되돌아갈 수 있습니다.

ReactTypeScriptReact useStateTailwind CSSARIA
라이브 데모
새 탭에서 열기
데모 불러오는 중…

제작 과정

한 줄 요약

긴 폼을 단계로 쪼개고, 각 단계가 유효할 때만 다음으로 넘어가게 게이팅하는 회원가입 위저드입니다.

이럴 때 필요해요

입력 항목이 많은 폼을 한 화면에 다 펼치면 사용자는 압도당하고 이탈합니다. 회원가입온보딩결제처럼 항목이 많을 때, 단계로 나누면 한 번에 집중할 양이 줄고 "지금 어디쯤인지"가 명확해집니다. 핵심은 잘못된 입력을 다음 단계로 끌고 가지 않는 것 단계 경계에서 막아야 마지막에 몰아서 터지지 않습니다.

어떻게 동작하나

  1. 단일 form 상태와 step 인덱스로 전체를 관리하고, validateStep(step, form) 한 함수가 단계별 에러 맵을 반환합니다.

  2. "다음"을 누르면 현재 단계만 검증 에러가 없으면 진행, 있으면 각 필드에 표시합니다.

  3. 진행 인디케이터는 완료/현재/예정 상태로 그려지고, 통과한 단계는 눌러서 되돌아갈 수 있습니다(앞 단계로만).

놓치기 쉬운 것

  • 검증 로직을 컴포넌트 곳곳에 흩지 말고 validateStep 한 곳에 모아야 단계가 늘어도 관리됩니다.

  • 앞으로 점프는 막아야 합니다 검증을 건너뛴 단계로 가버리면 게이팅이 무의미해집니다.

  • 단계 전환 시 제목으로 포커스를 옮기고 aria-live로 알려야 스크린리더 사용자가 맥락을 잃지 않습니다.

이런 곳에 써요

  • 회원가입온보딩 플로우

  • 결제/체크아웃

  • 설문신청서

소스 코드

· 데모 페이지에서 자동 추출
import type { Metadata } from "next";
import { MultiStepForm } from "./-components/MultiStepForm";

export const metadata: Metadata = {
  title: "다단계 스텝퍼 위저드 (데모)",
  description:
    "진행 인디케이터가 있는 회원가입 위저드. 단계별 입력 검증으로 게이팅, 통과한 단계로 점프, 완료 요약 + 접근성(aria-current·포커스 이동) 대응.",
  robots: { index: false, follow: false },
};

export default function Page() {
  return (
    <main className="flex min-h-[100dvh] items-center justify-center bg-gradient-to-br from-slate-50 via-white to-violet-50/40">
      <MultiStepForm />
    </main>
  );
}
32조회수

댓글