NestJS Standard Schema 호환성 문제 해결
SEO 설명: NestJS에서 Standard S
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

NestJS 이슈: standard schema 호환성

분야

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

대상자

NestJS를 사용하는 개발자, 검증 라이브러리 선택에 고민 중인 개발자, 타입스크립트 생태계 이해를 원하는 개발자

핵심 요약

  • *_Standard Schema_**는 JavaScript/TypeScript 검증 라이브러리 간 공통 인터페이스로, Zod, Valibot, Arktype 등 다양한 도구를 통일된 방식으로 사용 가능하게 합니다.
  • *_NestJS_**는 현재 Class-Validator에 의존하고 있어, 다른 검증 라이브러리 사용 시 직접 Pipe 구현 또는 3rd-party 라이브러리 의존이 필요합니다.
  • *_공식적인 Standard Schema 지원 Pipe_** 도입 시 개발자는 검증 라이브러리 선택만으로 검증 로직을 구현할 수 있지만, Class-Validator의 호환성 부족으로 기능 도입이 어려운 상황입니다.
  • *_breaking change_** 우려와 메인테이너의 부담으로, Standard Schema 지원 Pipe의 공식 도입 가능성은 낮습니다.

섹션별 세부 요약

  1. Standard Schema 소개
  • _Standard Schema_는 검증 라이브러리 간 공통 인터페이스로, Zod, Valibot, Arktype 등 다양한 도구를 통일된 방식으로 사용 가능합니다.
  • import * as z from 'zod';와 같은 방식으로 각 라이브러리 사용 시 standardValidate 함수를 통해 검증 로직을 공통으로 처리합니다.
  • 에서 지원 라이브러리 목록 확인 가능합니다.
  1. NestJS의 현재 검증 체계
  • NestJS는 기본적으로 Class-Validator에 의존하며, 다른 검증 라이브러리 사용 시 직접 Pipe 구현 또는 3rd-party 라이브러리 의존이 필요합니다.
  • Class-ValidatorValidationMetadata를 통해 인스턴스화된 검증 로직을 지원하지만, Standard Schema 호환을 위해 새로운 API가 필요합니다.
  • Class-ValidatorStandard Schema를 지원하지 않아, NestJS의 공식 지원 도입이 어려운 상황입니다.
  1. 공식 Pipe 도입 논의 및 문제점
  • PR에서는 NestJS가 Standard Schema를 지원하는 공식 Pipe를 제공할 것을 제안하며, 개발자의 검증 라이브러리 선택에 대한 자유도를 높일 수 있음을 강조합니다.
  • Class-Validator의 호환성 부족으로 인해 breaking change 우려가 있으며, 메인테이너의 부담으로 새로운 Pipe 추가 가능성은 낮습니다.
  • 기존 ValidationPipe를 유지하면서 새로운 Pipe 추가 시 문서 및 코드 관리 부담이 증가할 수 있습니다.
  1. 커뮤니티 의견 및 결론
  • Class-Validator의 활발한 업데이트 부족으로 Standard Schema 지원이 지연되고 있으며, Class-Validator가 먼저 움직여야 공식 지원이 가능하다는 의견이 있습니다.
  • NestJS 메인테이너는 core에 새로운 Pipe 추가를 신중하게 고려할 가능성이 높으며, 이슈 관리의 엄격성으로 인해 기능 도입이 지연되고 있습니다.

결론

  • *_Standard Schema_** 도입은 검증 라이브러리 통합을 위한 중요한 방향이지만, Class-Validator의 호환성 부족으로 NestJS 공식 지원이 어려운 상황입니다.

실무에서는 NestJSStandard Schema를 활용할 때, Class-Validator 대체 라이브러리 선택 또는 커스텀 Pipe 구현을 고려해야 합니다.

  • *_breaking change_** 우려와 메인테이너의 부담으로, 공식 지원 Pipe 도입은 지연될 가능성이 높아, 커뮤니티 의견과 기술적 동향을 지속적으로 모니터링하는 것이 중요합니다.