목차
JS를 쓰고 있는 나는 타입 정의를 위해 TS를 사용하고 있다. 근데 팀원 중 한 분이 Zod를 쓰고 싶어하시길래 도대체 장점이 뭐길래? 라는 의문점이 생겨 알아보기 시작했다.
엄격한 유효성 검증을 위해 사용되는 Zod
Zod가 TS보다 강력한 이유는 엄격한 유효성 검증을 하기 때문이라고 생각한다.
하지만 그 만큼 TS보다 작성해야하는 코드가 많다는 생각이 들었다. 어떤면에서 볼때는 강력하지만, 또 다른면에서 볼때는 오히려 난잡하다는 느낌이 들었기 때문이다. 하지만 그럼에도 불구하고 TS에 비해 강력하다고 느낀 강점은 아래와 같다.
1. 데이터 스키마, 즉 데이터 구조와 형식을 정의하기 때문에 TS보다 더 강력한 타입 검증이 가능하다.
컴파일 시 스키마에서 정의한 수준의 타입 검사가 발생하기 때문이다.
import { z } from "zod";
const User = z.object({
email: z.string().email(),
image: z.string().url(),
ips: z.string().ip().array(),
});
2. 기본값을 설정할 수 있다.
3. 정수형과 실수형을 구분할 수 있다.
4. 허용되는 범위를 제한할 수 있다.
import { z } from "zod";
const Url = z.string().url().max(200);
const Age = z.number().int().min(18).max(80);
그럼에도 불구하고 TS보다 확연하게 작은 커뮤니티로 인해 받을 수 있는 스트레스..(이미 TS는 커뮤니티가 활발함에도 불구하고 종종 스트레스를 받아왔다..) 또한 더 많은 코드의 수(write less X)가 단점이라고 생각한다.
TypeScript
TS는 이미 엄청나게 큰 커뮤니티가 있어 오류가 발생했을 때 도움을 받을 수 있다.
하지만 스키마에서 정의한 수준의 타입 검사는 일어나지 않기 때문에 Zod보다는 덜 엄격하다고 말할 수 있다.
이미 TS로도 충분히 엄격한 타입을 검증하고 있다고생각하기 때문에 Zod는 장점도 있지만 내 생각에는 아직 굳이..?라는 생각이 있기는 하다. 그래도 Zod만의 장점이 있기 때문에 추후 사용 여부를 결정하게 된다면 내가 생각한 의견들을 말씀드려 보아야겠다.
Zod를 사용해보고자 하는 마음으로 기울었다. 그 이유는 정말 엄격한 검증이 가능하기 때문이다. 예를 들어 비밀번호를 6개의 숫자로 지정하고 싶을 때, 일반적으로 number로 타입을 지정할 수 밖에 없다. 하지만 Zod를 사용하면 6개의 숫자가 아닌 경우에 명백한 에러를 호출할 수 있다는 장점이 있기 때문이다.
참고자료
'TypeScript > 그 외' 카테고리의 다른 글
i18n을 사용하여 다국어 처리 하기 (0) | 2024.06.26 |
---|
댓글