타입스크립트(TypeScript) 코드, 유효성 검사(Validation) 대신 파싱(Parsing)을 적용하라!

by DD
1개월 전
조회수 22

유효성 검사(Validation)는 정보를 버리지만, 파싱(Parsing)은 타입을 통해 정보를 보존하여 런타임 오류를 줄임

타입스크립트(TypeScript)의 구조적 타이핑(Structural Typing)으로 인해 브랜드 타입(Branded Types)을 활용하여 타입 안전성을 확보

parseEmail과 같은 파서(Parser) 함수를 통해 외부 입력(External Input)을 검증하고, 검증된 데이터는 ValidUser 타입으로 사용

Zod와 같은 라이브러리를 사용하여 파싱(Parsing) 로직을 간결하게 구현 가능하며, 타입 시스템(Type System)을 통해 검증 경계를 명확히 함

타입스크립트(TypeScript)의 구조적 타이핑(Structural Typing)과 브랜드 타입(Branded Types)

게시물에서는 타입스크립트(TypeScript)의 구조적 타이핑(Structural Typing)으로 인해 발생하는 문제점을 지적하며, 이를 해결하기 위한 방법으로 브랜드 타입(Branded Types)을 제시한다. 브랜드 타입(Branded Types)은 런타임(Runtime)에 존재하지 않는 타입 레벨 마커(Type-level Marker)를 사용하여, 컴파일 타임(Compile Time)에 타입 간의 호환성을 제한한다. 이를 통해, `string` 타입과 `Email` 타입을 구분하여 타입 안전성을 확보하고, 유효하지 않은 상태를 표현할 수 없도록 한다.

파싱(Parsing)과 유효성 검사(Validation)의 차이점

게시물은 유효성 검사(Validation)와 파싱(Parsing)의 근본적인 차이점을 강조한다. 유효성 검사(Validation)는 검사 후 정보를 버리는 반면, 파싱(Parsing)은 검증된 정보를 타입에 인코딩하여 보존한다. 이러한 차이는 코드의 안전성에 큰 영향을 미치며, 파싱(Parsing)을 통해 런타임(Runtime) 오류를 줄이고, 코드의 가독성을 높일 수 있다. 특히, 타입스크립트(TypeScript)와 같은 정적 타입 언어에서 파싱(Parsing)은 더욱 강력한 이점을 제공한다.

Zod를 활용한 파싱(Parsing) 구현

게시물에서는 Zod와 같은 라이브러리를 사용하여 파싱(Parsing)을 더 쉽게 구현할 수 있음을 언급한다. Zod는 스키마 기반의 DSL(Domain-Specific Language)을 제공하여, 파서(Parser)와 타입을 동시에 정의할 수 있게 해준다. 이를 통해, 개발자는 코드 중복을 줄이고, 타입 안전성을 유지하면서 파싱(Parsing) 로직을 구현할 수 있다. Zod는 타입 시스템(Type System)을 통해 검증 경계를 명확히 하여, 코드의 유지보수성을 높이는 데 기여한다.

파싱(Parsing) 기반 아키텍처의 장점

게시물은 파싱(Parsing) 기반 아키텍처의 장점을 강조하며, 코드의 안전성과 가독성을 향상시킬 수 있다고 설명한다. 특히, 데이터 미저장 정책(Zero-Retention Policy)을 통해 런타임(Runtime) 오류를 줄이고, 코드의 유지보수성을 높일 수 있다. 또한, 파싱(Parsing)을 통해 외부 입력(External Input)과 내부 도메인 타입(Internal Domain Type) 간의 경계를 명확히 하여, 코드의 복잡성을 줄이고, 개발 생산성을 향상시킬 수 있다.

Parse, Don't Validate — In a Language That Doesn't Want You To · cekrem.github.io