
‘타입 정의만으로는 아직 불안한’ 당신에게
TypeScript로 코드를 작성하고 타입 정의를 완벽하게 마쳤습니다. 컴파일 에러도 전혀 없죠. 하지만 막상 실행해 보니 API에서 예기치 않은 데이터가 들어와 앱이 종료되는 쓴 경험을 해보신 적이 있나요?
TypeScript의 타입은 컴파일 시점에만 존재하며, 브라우저에서 실행될 때는 사라집니다. 즉, ‘외부로부터 오는 데이터’가 정말로 올바른지는 실행 시점(런타임)에 직접 확인해야만 합니다.
Zod: 타입 안정성을 ‘런타임’으로 가져오기
이때 구원투수로 등장하는 것이 바로 Zod입니다.
Zod는 데이터의 ‘스키마(설계도)‘를 정의하고, 실행 시점에 데이터가 그 설계도대로 들어왔는지 엄격하게 체크합니다.
- 부적절한 데이터를 입구에서 차단:
string을 기대했는데null이 들어오면 그 즉시 에러를 발생시켜 이후 로직을 보호합니다. - 타입 정의도 동시에 획득: 스키마를 정의하면 해당 스키마로부터 TypeScript 타입을 자동으로 추출할 수 있습니다(
z.infer<T>).
스키마 작성의 번거로움을 ‘제로’로
Zod는 매우 강력하지만, 복잡한 JSON 구조에 맞춰 스키마를 일일이 수동으로 작성하는 것은 꽤나 고된 작업입니다.
저희 사이트의 **JSON→Zod 변환 도구**는 바로 이런 ‘스키마 정의의 번거로움’을 해결하기 위해 만들어졌습니다. 가지고 있는 JSON 데이터를 붙여넣기만 하면, 그에 대응하는 Zod 스키마를 눈 깜짝할 사이에 생성해 줍니다.
기본적인 워크플로우
- API에서 반환된 JSON 데이터를 복사합니다.
- 도구에 붙여넣어 Zod 스키마(
z.object({...}))를 생성합니다. - 생성된 코드를 프로젝트에 복사하여 붙여넣고,
Schema.parse(data)로 유효성 검사를 시작하세요!
import { z } from 'zod';
// 도구로 생성된 스키마
const UserSchema = z.object({
id: z.number(),
name: z.string(),
});
// 실행 시점의 체크와 타입 추출을 동시에 수행
type User = z.infer<typeof UserSchema>;
const safeData = UserSchema.parse(rawData);
마치며
데이터의 경계선을 지키는 것은 시스템의 견고함을 지키는 것과 같습니다.
‘아마 괜찮을 거야’라는 막연한 추측을 Zod를 통한 ‘확신할 수 있는 검증’으로 바꾸세요. 수작업의 번거로움은 도구에 맡기고, 여러분은 서비스의 핵심 로직 구현에 더 집중하시길 바랍니다.