다단계 폼 구현의 핵심은 데이터 처리와 UI 제어를 명확히 분리하는 것입니다. 본 가이드에서는 다음과 같은 기술적 접근 방식을 사용합니다.
1. Form Object와 ActiveModel 활용
데이터베이스 테이블에 직접 매핑되지 않는 폼 데이터를 처리하기 위해 ActiveModel::Model과 ActiveModel::Attributes를 포함한 PORO(Plain Old Ruby Object)를 생성합니다. 이를 통해 레일즈 모델처럼 유효성 검사와 폼 헬퍼를 그대로 사용할 수 있습니다.
2. 단계별 데이터 구조화 (Concerns)
온보딩의 각 단계(Step)를 별도의 클래스와 모듈로 관리합니다. Onboarding::Steps 모듈을 통해 각 단계에서 필요한 제목, 설명, 입력 필드 정보를 정의함으로써 뷰 코드에서 반복되는 로직을 제거하고 데이터 중심으로 구조를 설계합니다.
3. 필드별 파셜(Partial) 분리
텍스트 필드, 셀렉트 박스 등 다양한 입력 타입을 독립적인 파셜로 구성하여 관리합니다. 이는 코드의 재사용성을 높이고 메인 뷰 템플릿을 간결하게 유지하는 데 도움을 줍니다.
4. Stimulus를 이용한 클라이언트 측 제어
단계를 이동할 때마다 화면을 갱신하는 로직은 Stimulus 컨트롤러가 담당합니다. stepValueChanged 콜백을 활용하여 현재 단계에 해당하는 UI 요소만 표시하고 진행 표시기를 업데이트하는 등 동적인 사용자 경험을 구현합니다.