39a4c02fe49f2aa36fbbdbb058c12a3a9cd39fa2e7a2ec1309d7f8



주말 중에 이거 대충 다듬고 영작해서 dev.to 커뮤니티 올릴 생각인데


미리 초안? 공유해본다


-------------------------------


https://github.com/woutervh-/typescript-is/pull/136


Good bye typescript-is


Typia의 선배 격 라이브러리 typescript-is가 deprecated 되고 typia로 통합되었습니다.


저는 NestJS 백엔드 서버를 개발할 때, class-validator 대신 typescript-is 를 사용했었습니다. DTO를 정의하는데 복잡한 디코레이터 함수를 덕지덕지 바르고 4 중의 중복 타입을 정의해야만하는 class-validator에 비해, typescript-is는 순수 TS 타입에 단 한 줄의 코드만 붙이면 되었기 때문입니다.


  - assertType<T>(input)

  - Pure TypeScript Type: https://typia.io/docs/pure/


어디서 많이 본 것 같은 스토리인데 싶다면, 네 맞습니다, 제가 자주 소개하던 typia의 스토리와 정확히 일치합니다. typescript-is는 typia와 동일한 용법으로 validation을 수행하는데, 실은 typia보다 몇 년 일찍 출시하였던 라이브러리입니다. 다만, TypeScript는 4.5에서 5.0으로 버전이 오르는 동안, 모든 마이너 패치마다 컴파일러 API에 break change가 생겨났습니다. 그리고 이를 적시에 대응하지 못하면서 typescript-is는 2 년 전을 기점으로 사용 불가능하게 된 라이브러리입니다.


당시 저는 nestia라는 라이브러리를 만들었었고, SDK + swagger 생성 및 JSON 최적화는 typescript-json으로, runtime validation 최적화는 typescript-is를 통해 할 요량이었습니다. 그런데 돌연 typescript-is가 TS의 무자비한 break change 공세에 삼도천을 건너버리자, typescript-json에 typescript-is와 동일한 인터페이스의 validator를 추가하고, 그 이름을 typia로 바꾸면서 오늘에 이르게 된 것입니다.


그리고 오늘 (typescript-is가 삼도천을 건넌지 2년째), typescript-is 개발자님께 typia로의 통합을 권유하였고, typescript-is 개발자님께서 이를 흔쾌히 허락해주셨습니다. 앞으로 TypeScript 진영에서 사용자의 소스 코드를 분석하여 최적의 runtime validation을 해 주는 라이브러리는 typia만이 유일합니다.


typescript-is 개발자님 고생하셨습니다.


-----------------


실은 typescript-is 코드를 뜯어보면서 알게 된 것인데, typescript-is는 TS 데이터 타입에 대한 자료구조 설계와 코어 로직 구현이 결여되어있습니다. 타입스크립트 컴파일러 API의 break change에 유독 취약했던 이유도 여기 있었고, typescript-is의 고질적인 stack overflow 에러 및 잘못된 validation 결과값 도출 등도 이에 기인합니다. 


특히 잘못된 validation 결과 도출은 현재 typia 를 제외한 TS 진영의 모든 runtime validator 들이 공통적으로 가진 문제이기도 하며, NestJS 의 class-validator 또한 이 문제를 심각하게 겪고 있습니다. Typia를 개발하면서 테스트 함수를 구현하다보니, 약 1만 여 테스트 케이스에 총 100만 줄 정도의 테스트 코드가 필요했는데, typescript-is는 이 테스트 케이스가 50개, 그리고 class-validator는 16개에 지나지 않습니다.


Typia는 가장 나중에 나온 validator 라이브러리인만큼, typescript-is와 class-validator의 문제점들을 (코어 설계 부재 + 테스트 함수 미비) 사전 조사하고 이를 반면교사 삼아서 제작하였기에, 위 문제들로부터 자유로울 수 있었습니다. 그리고 typescript-is 를 위한 변명을 하자면, 그래도 typescript-is 가 출시할 당시에는, 가장 정확한 validation 결과값을 도출해주는 라이브러리였으며, 현재에도 typia와 함께 가장 사용하기 쉽고 생산성이 높은 라이브러리입니다.