크로스플랫폼 상품 어드민
무신사 · 2026.01 ~ 현재배경 · 문제
무신사·29CM·조조타운·티몰글로벌·무신사차이나 5개 플랫폼과 14개 판매지역에 걸쳐, 파트너와 운영자가 한 곳에서 상품을 등록·수정·검수하는 통합 어드민을 만드는 프로젝트입니다.
상품 하나에 붙는 필드가 200여 개인데, 어떤 섹션이 보이고 무엇이 필수인지는 판매할 플랫폼과 카테고리, 상품 유형에 따라 전부 달라집니다. 플랫폼이 추가될 때마다 폼을 다시 짜는 구조라면 유지할 수 없었습니다. 여기에 파트너가 수천 건을 한 번에 올리고 고치는 엑셀 일괄 작업까지 같은 제품에서 받아야 했습니다.
접근 · 해결
폼을 40여 개 섹션으로 나누고, 섹션마다 Zod 스키마와 기본값을 정의해 하나의 폼 스키마로 조립했습니다. 섹션 사이에 걸친 규칙(예를 들어 특정 플랫폼을 선택하면 그 플랫폼 전용 섹션들이 필수가 되는)은 스키마의 크로스필드 검증으로 한곳에 모았습니다. 화면 쪽은 섹션 레지스트리 하나가 등록·수정·조회 세 화면의 순서·노출·검증 전략을 결정하는 단일 진실이라, 플랫폼이 추가되면 스키마와 레지스트리 항목을 늘리는 것으로 끝납니다.
엑셀 일괄 처리의 원칙은 "이 작업을 하는 사람은 조금 기다려도 되지만, 그 때문에 다른 사용자의 화면이 느려지면 안 된다"였습니다. 상품을 반영하는 API가 한 번에 한 건씩만 처리할 수 있어서, 수천 행을 그대로 흘려보내면 그 부담을 화면을 서빙하는 서버가 함께 떠안는 구조였습니다.
그래서 파싱과 1차 검증을 브라우저에서 끝내 잘못된 파일이 서버까지 가지 않게 했고, 전송은 일정 크기로 쪼개 동시 2건까지만 보내도록 제한했습니다. 실제 반영은 여러 건을 병렬로 처리하는 별도 서버에 묶음 단위로 넘겨, 화면을 담당하는 쪽이 오래 붙잡히지 않게 했습니다. 재시도해도 같은 행이 두 번 반영되지 않도록 행마다 고유 키를 부여했습니다.
결과
플랫폼과 판매지역이 늘어도 폼 구조를 바꾸지 않고 스키마 확장으로 흡수할 수 있게 됐습니다.
이 제품을 만들며 내린 기술 결정 중 가장 큰 것이 BFF 도입이었고, 별도 프로젝트로 아래에 정리했습니다.