증상
필수 속성을 자동으로 채우는 함수가 400 유효하지 않은 옵션 값을 내고 있었다. 원인은 단순했다 — 그 속성은 타입이 "선택형"이라 플랫폼이 카테고리 메타로 내려주는 허용값 목록 안의 값만 받는다. 임의 문자열을 넣으면 거부된다.
그래서 "허용 목록에서 첫 항목을 고른다"로 고쳤다. 400은 사라졌다. 그리고 성인용 신발에 유아 사이즈가 등록됐다.
원인
목록의 첫 항목은 정렬 순서가 정한다. 사이즈 목록의 첫 항목이 가장 작은 값이었다.
★★★ 제약을 만족시키는 것과 의미를 만족시키는 것은 다른 문제인데, 전자만 풀었다.
| 층위 | 결과 |
|---|---|
| 허용 목록 밖 | 400 — 시끄러운 실패. 즉시 안다 |
| 허용 목록 안인데 의미가 틀림 | 통과. 고객 화면에 유아 사이즈가 뜬다 |
★★★ 두 번째가 더 위험하다. 에러가 없으니 아무도 모르고, 발견되는 경로는 주문과 반품뿐이다. 이 컬렉션의 조용한 실패 계열이고, 검증기를 통과했다는 사실이 오히려 안심의 근거가 된다.
해법
★★ 중앙값을 고르는 이유는 "틀려도 덜 틀리기" 위해서다. 첫 항목·마지막 항목은 분포의 극단이라 유아·특대 같은 값이 걸린다. 의미를 모를 때는 극단이 아니라 중앙을 고른다.
⚠️ ★★ 그래도 중앙값은 추측이다. 상품의 실제 사양이 있으면 그것을 쓰고, 없다면 그 속성을 비우는 편이 틀린 값보다 낫지 않은지 먼저 따진다. 필수 속성이면 비울 수 없지만, 필수가 아닌데 습관적으로 채우고 있는 경우가 많다.
★★★ "빈 값을 허용하지 않는다"와 "아무 값이나 채운다" 사이에 선택지가 있다 — 채우기를 포기하고 그 건을 사람에게 넘기는 것. 자동 채우기의 성공률을 지표로 삼으면 이 선택지가 안 보인다.
검증 방법
★ 등록 후 상품 페이지에 실제로 표시되는 값을 한 번 읽어 대조하라. 전송한 값이 아니라 표시된 값이다. 이 함정은 요청/응답 어디에도 흔적을 남기지 않는다.