웰로 · Wello-biz · 2026.01
Chakra·yup을 걷어내도 폼 필드는 지워지지 않는다
Wello-biz 레거시 UI 스택 정리 (Chakra UI·yup 제거)
Wello-biz의 Chakra UI·yup과 서드파티 UI 라이브러리를 걷어내고 UI와 검증 기준을 공통 디자인 시스템·Zod로 맞췄습니다.
- 문제
- Chakra UI 기반 공통 컴포넌트와 yup 검증, 여러 서드파티 UI 라이브러리가 섞여 있어, 공통 디자인 시스템과 Zod를 쓰는 모노레포의 다른 앱과 UI·검증 방식이 갈려 있었습니다.
- 결정
- 컴포넌트는 공통 디자인 시스템으로, 캐러셀과 스와이프는 더 단순한 구현으로 바꾸고, Zod가 지우는 필드는 느슨한 객체 스키마로 보존했습니다.
- 결과
- wello-biz에서 Chakra UI(글로벌 테마 포함), yup, Swiper, react-swipeable, react-feather 의존성이 사라졌고, 검증은 Zod 하나로 통일됐습니다.
결과 근거: 이력서 기재 내용. 번들 크기 변화는 측정한 값이 없어 싣지 않았습니다.
구조
- 디자인 시스템 Modal·Button · 확정
- 폼 화면 · 확정
컴포넌트 대체. Chakra 의존 글로벌 컴포넌트를 공통 디자인 시스템의 Modal·Button 조합으로 대체합니다.
범례
- 임시·화면 계산
- 확정
- 문제 발생
- 대기
- 복구
내부 코드 전환 작업이라 공개 캡처가 없어 구조를 다시 그린 도식입니다. 실제 화면이 아닙니다.
판단
Chakra에 의존한 글로벌 컴포넌트와 서드파티 UI 라이브러리를 어떻게 정리할 것인가
공통 디자인 시스템과 더 단순한 구현으로 대체
Modal·Alert·Table 등은 공통 디자인 시스템의 Modal·Button 조합으로, 캐러셀은 Embla Carousel로, 스와이프는 브라우저 Pointer Events 직접 구현으로 바꿨습니다.
Zod가 선언되지 않은 필드를 제거하는 문제를 어떻게 풀 것인가
값을 그대로 보내야 하는 폼의 스키마를 느슨한 객체로 변경
선언하지 않은 필드가 제출 데이터에서 빠지지 않아, API 응답 전체를 폼 값으로 쓰는 화면에서도 값이 유지됩니다.
폼 라이브러리 연결부를 어떻게 통일할 것인가
입력·출력 타입이 다른 스키마도 받는 어댑터를 직접 작성
transform으로 입력과 출력 타입이 달라지는 스키마도 받을 수 있게, 스키마를 제약 없이 받아 검증 오류를 폼 라이브러리의 오류 형식으로 변환합니다.
문제와 해결
문제
Chakra UI 기반 공통 컴포넌트와 yup 검증, 여러 서드파티 UI 라이브러리가 섞여 있어 모노레포의 다른 앱과 UI·검증 방식이 갈려 있었습니다.
해결
컴포넌트와 서드파티 라이브러리를 공통 디자인 시스템과 단순한 구현으로 바꾸고, 검증은 Zod 하나로 통일했습니다.
문제
Zod가 스키마에 선언되지 않은 필드를 제출 데이터에서 제거했습니다.
해결
값을 그대로 보내야 하는 폼의 스키마를 느슨한 객체로 바꿔 필드가 빠지지 않게 했습니다.
이력서 원문
Wello-biz의 Chakra UI·yup과 서드파티 UI 라이브러리를 걷어내고, UI는 공통 디자인 시스템으로 검증은 Zod 하나로 통일했습니다. Zod가 선언하지 않은 필드를 지우는 문제는 느슨한 객체 스키마로 풀었습니다.
문제
Wello-biz는 Chakra UI 기반 공통 컴포넌트와 yup 검증, 여러 서드파티 UI 라이브러리가 섞여 있어, 공통 디자인 시스템과 Zod를 쓰는 모노레포의 다른 앱과 UI·검증 방식이 갈려 있었습니다.
기여
Chakra에 의존한 Modal·Alert·Table 등 글로벌 컴포넌트를 공통 디자인 시스템의 Modal·Button 조합으로 바꾸고, 캐러셀은 Embla Carousel로, 스와이프는 브라우저 Pointer Events 직접 구현으로 교체했습니다. yup 검증은 Zod로 전환했고, Zod가 선언하지 않은 필드를 제출 데이터에서 지우는 문제는 해당 폼의 스키마를 느슨한 객체로 바꿔 해결했습니다. 폼 라이브러리 연결부는 입력과 출력 타입이 다른 스키마도 받는 어댑터를 직접 작성해 통일했습니다.
결과
wello-biz에서 Chakra UI(글로벌 테마 포함), yup, Swiper, react-swipeable, react-feather 의존성이 사라졌고, UI는 공통 디자인 시스템과 Tailwind, 검증은 Zod 하나로 통일됐습니다.