피드로 돌아가기
Dev.toBackend
원문 읽기
단순 30줄 함수 구현 후 3개월 만에 유효한 CIF 검증 실패 문제를 경험함
Why We Built an API for Spanish Fiscal ID Validation Instead of Just Implementing It
AI 요약
Context
스페인 납세자 식별자 검증 기능을 프로젝트에 통합하는 과정에서 30줄짜리 JavaScript 함수로 구현함. 개발 환경에서 4개 테스트 케이스로 정상 작동 확인 후 배포함. 3개월 후 프로덕션에서 perfectly valid한 CIF가 검증 실패하는 버그가 발생함.
Technical Solution
- NIF: 기본 modulo 23 알고리즘 구현함. K, L, M 특수 포맷과 8자리 숫자 + 1자리 문자 구조를 정확히 검증함
- NIE: X, Y, Z 접두사 처리 후 NIF 알고리즘 substitution 방식으로 검증함
- CIF: Entity 타입(첫 글자)에 따라 control character가 문자 또는 숫자인지 분기 처리함. (10 - sum % 10) % 10 === 0일 때 J 반환 케이스도 정확히 처리함
- IBAN: JavaScript BigInt를 사용한 MOD-97 알고리즘으로 검증함
- 자동 타입 감지 기능으로 NIF, NIE, CIF, IBAN을 요청 payload에 명시하지 않아도 자동으로 판별함
Impact
별도 수치 없음
Key Takeaway
Validation 구현과 올바른 유지보수 사이에는 큰 차이가 있음. Edge case가 포함된 데이터는 개발 환경에서 발견되지 않고 프로덕션에서 실제 사용자로부터 보고됨.
실천 포인트
다양한 납세자 식별자 타입(NIF, NIE, CIF, IBAN)을 혼합하여 검증해야 하는 환경에서는 전문 API 활용이 효율적임. 단일 타입만 검증하고 exhaustive 테스트 케이스를 보유한 경우 자체 구현도 합리적임.