목록으로
웹 · 폼

모드마다 검증이 다른 푸시 폼 구조 정리

등록/수정/구독자 × 임시저장/발송 조합마다 다른 검증을 스키마 파생으로 정리.

01

상황

푸시 발송 화면은 (등록/수정/구독자) × (임시저장/실제발송) 조합마다 필수값과 검증 규칙이 달라, 폼 초기화·검증·에러 표시가 서로 얽혀 관리가 어려웠습니다.

02

원인 분석

하나의 폼에 모드별 규칙을 조건문으로 욱여넣으면 분기가 폭발하고, 수정 진입 시 값 주입과 검증 트리거 타이밍, 임시저장의 느슨한 검증까지 겹쳐 상태가 꼬였습니다.

03

해결

공통 필드(basePushFields)를 공유하고 제출용(엄격)·임시저장용(.partial()) 스키마를 파생했습니다. 예약 발송의 날짜+시간 상호 의존과 과거 시각 차단은 다중 refine으로 처리했습니다. FormData 조립은 공통 함수 하나로 모으고, 수정 화면에 들어올 때 값을 넣은 뒤 검증 시점을 맞춰 초기 에러가 뜨지 않게 했으며, 임시저장은 isDirty 체크에서 뺐습니다.

04

결과 · 배운 점

모드가 늘어도 스키마 파생으로 규칙을 조합할 수 있게 됐고, 복잡한 폼의 검증·상태도 예측 가능해졌습니다.