Server 에서 validate, 항상
Client validation 은 UX nicety. Server validation 이 security boundary. 누구든 action endpoint 에 POST 가능; client 가 check 했을 거라고 절대 못 믿어.
Zod 가 깔끔하게 fit
Schema 정의, form input 에 safeParse 호출, success/failure 로 분기. Failure 시 useActionState 통해 field-level error 반환; success 시 mutation 돌고 revalidate.
State 모양 type
Action 의 State type 명시적으로. Front-end 와 back-end 가 TypeScript 통해 모양 합의.