타이핑이 필요하지 않다. 런타임 보장이 필요하다.

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

  • 대상자: TypeScript와 외부 데이터 처리에 어려움을 겪는 소프트웨어 개발자
  • 난이도: 중급~고급 (TypeScript 및 런타임 검증 개념 이해 필요)

핵심 요약

  • TypeScript는 컴파일 타임 도구로, 외부 데이터(예: API 응답)의 런타임 검증에는 효과적이지 않다
  • 타입 정의와 런타임 스키마 정의를 복제하는 "두 진실 원천 트랩"은 보안 취약점과 유지보수 부담을 유발
  • AssertScript는 런타임 검증 스키마를 단일 진실 원천으로 정의해, 타입스크립트와 Zod의 중복을 제거

섹션별 세부 요약

1. 문제점: TypeScript의 한계

  • TypeScript는 컴파일 타임 검증만 제공하고, 외부 데이터의 런타임 오류(예: 잘못된 JSON)는 무시
  • 타입 정의(type User)가 API의 잘못된 응답(id: "user-123")을 방지하지 못함
  • 결과: 앱이 런타임에 충돌하며, 개발자는 별도의 검증 로직 추가 필요

2. 두 진실 원천 트랩

  • TypeScript 타입 정의(type User)와 Zod 스키마(UserSchema)를 별도로 정의해야 함
  • 중복된 정의로 인해 유지보수 부담 증가 및 오류 발생 가능성 상승
  • 예시: id 필드의 타입(number)이 두 위치에서 정의됨

3. AssertScript의 접근 방식

  • 단일 진실 원천(types.json) 정의로 타입 및 검증 규칙을 통합
  • 명령어(npm run generate:dts)로 validators.jsvalidators.d.ts 생성
  • 런타임 검증(validateUser)을 통해 외부 데이터의 정확성 보장

4. AssertScript의 장점

  • 중복 제거: 타입스크립트와 검증 라이브러리의 정의를 하나로 통합
  • 의존성 최소화: 추가 라이브러리 없이 검증 가능
  • 편리한 에디터 지원: validators.d.ts로 자동완성 및 타입 추론 제공

결론

  • 외부 데이터의 런타임 보장을 위해 AssertScript를 도입해, 중복을 제거하고 안정적인 앱 개발을 실현
  • AssertScript의 types.json을 단일 진실 원천으로 정의하고, validateUser 함수로 검증을 수행
  • TypeScript는 내부 코드 일관성 보장에 적합하지만, 외부 데이터 검증에는 적합하지 않음