타이핑이 필요하지 않다. 런타임 보장이 필요하다.
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- 대상자: 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.js와
validators.d.ts생성
런타임 검증(
validateUser)을 통해 외부 데이터의 정확성 보장
4. AssertScript의 장점
중복 제거: 타입스크립트와 검증 라이브러리의 정의를 하나로 통합
의존성 최소화: 추가 라이브러리 없이 검증 가능
편리한 에디터 지원:
validators.d.ts로 자동완성 및 타입 추론 제공
결론
외부 데이터의 런타임 보장을 위해 AssertScript를 도입해, 중복을 제거하고 안정적인 앱 개발을 실현
AssertScript의
types.json을 단일 진실 원천으로 정의하고,
validateUser함수로 검증을 수행
TypeScript는 내부 코드 일관성 보장에 적합하지만, 외부 데이터 검증에는 적합하지 않음