"어떤 순위든 이미 아는 사실에 대봐."
검사 두 종류, 그리고 여기서 먹히는 건 하나뿐
유효성 검사는 데이터가 잘 생겼냐를 물어. 타입 맞나, 범위 맞나, 널 금지된 자리에 널 없나, 개수가 그럴듯한가. 내부적이야. 필요한 게 전부 응답 안에 있어.
검증은 데이터가 맞냐를 묻고, 필연적으로 외부적이야. 대볼 바깥 사실이 필요해.
거의 모든 코드베이스에 첫 번째는 많고 두 번째는 거의 없어. 유효성 검사는 싸고 범용이고 스키마에서 생성할 수 있는데, 검증은 도메인에 대해 뭔가를 알고 그걸 적어야 하거든. 그리고 그 절단 버그는 딱 검증만 볼 수 있는 결함이었어. 알파벳 순 1,083 종목은 완벽히 유효한 응답이고, 거기서 나온 명단은 어떤 스키마도 표현 못 하는 방식으로 틀렸으니까.
제일 싼 검증: 아는 구성원 하나
포괄적인 신탁이 필요한 게 아니야. 순위라면 아는 구성원 하나로 보통 충분하고, 그걸 고르는 기준은 안정성이야. 달마다 안 바뀔 이유로 집합에 반드시 들어 있어야 하는 것.
미국 최대 기업 목록이라면 초대형주 몇 개가 자격이 돼. 정확한 순위가 예측 가능해서가 아니라 존재가 그렇거든. 시총 기준 미국 상위 열 개 목록에 세계 최고 가치 기업 여럿이 빠져 있으면 그건 고장난 거고, 그 주에 시장에서 뭐가 일어났든 상관없이 고장난 거야.
맞는 이유로 떨어지게 사실을 골라
기술은 헛발질 안 할 만큼 안정적이면서 진짜 결함은 잡을 만큼 구체적인 사실을 고르는 데 있어.
너무 구체적이면 — 정확한 순위나 정확한 시총을 단언하면 — 세상이 움직일 때마다 떨어지고, 그러면 다들 무시하도록 훈련돼. 사람들이 건너뛰기를 배운 단언은 없는 것보다 나빠. 진짜 단언이 들어갈 자리를 차지하고 있으니까.
너무 느슨하면 — 목록이 비어 있지 않다거나 열 개라고만 단언하면 — 잘린 데이터에서 신나게 통과하고, 그게 실제로 벌어진 일이야.
중간은 순서 없는 멤버십이야. 이 이름들은 결과 어딘가에 반드시 나와야 한다. 시장이 움직여도 안정적이고, 어떤 절단이나 필터 오류나 모집단 설정 실수에도 즉시 위반돼.