23b8c332ecd376b660b8f68b12d21a1d80fe8df4dccb



Nestia: https://nestia.io/docs/


Typia: https://typia.io/docs/


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


Nestia 는 본인의 또다른 라이브러리 typia 를 랩핑해서 NestJS 에서 쓸 수 있게 만든 거임



그래서 다음과 같은 장점이 있음



1. DTO 스키마 따로 정의 안하고 TS 타입 그대로 가져다 쓰기 가능


원래 NestJS 는 DTO 에 디코레이터로 JSON schema 스트럭쳐를 한 번 더 써줘야 함. 그래서 TS 타입 + JSON schema decorator 이렇게 이중 타입 정의를해야하는데, 이걸 TS 타입만 쓸 수 있게 바꿈.


이는 컴파일러 API 이용해서, TS 타입 직접 해독하는 방식으로 변경했기 때문인데, 일단 이거에 대한 워딩을 Super-easy 라 잡음


물론 컴파일러 기반이라는 주제 때문에, NestJS 총 LOC가 6만 4천인데, 정작 지원 라이브러리 격인 Typia + Nestia LOC가 70만 라인인 건 안자랑





2. Validation 속도 2만배 향상


NestJS가 validation 오지게 느려서 (초당 15 ~ 50kb), 가끔씩 좀 무거운 DTO 사용하면 궤같이 느려지는 단점이 있음. 한 번에 전송하는 JSON 데이터가 수백KB 씩 되면, 심한 경우에는 걍 동접 자체를 못 받음 (야발...).


이게 NestJS가 사용하는 class-validator 로직이 개차반으로 구현되고, v8 최적화 코드 이딴거 하나도 없이 죄 Object key iteration 돌아것 그런건데, Validator 를 컴파일러 기반의 Typia 로 갈아치워서, 속도 무지막지하게 향상됨 ㅇㅇ.


속도가 빨라지는 이유는 일단 아래에서 설명할게 ㅇㅇ.






3. JSON serialization 속도 200배 향상


위와 동일함.


NestJS 가 세트로 사용하는 class-transformer (class-library 와 동일 제작자) 가 JSON serialization 도 또 오지게 느린 물건이고, 심지어 JS 빌트인 함수 JSON.stringify() 보다도 느림


이 또한 컴파일러 기반으로, DTO 타입 파악해서 각 DTO 전용 JSON serialization 코드를 컴파일러 수준에서 심어주고 (이를 AOT 컴파일이라 함 - ahead of time compilation), 그 덕에 validation 이고 JSON serialization 이고 무지막지하게 빠른 속도가 나오는 거 ㅇㅇ.


대충 아래 링크 들어가서, TS 코드랑 컴파일된 JS 코드 번갈아가면, AOT 컴파일이 뭔지 확 이해될 듯 ㅇㅇ.


https://typia.io/docs/json/stringify/#stringify-functions





4. SDK generation


본인은 프론트와 백엔드 둘 다 번갈아가며 개발하는 풀스택 개발자인데, 그래서 스웨거같은거 매우 싫어함.


백엔드가 스웨거 만들어주면, 프론트는 그거 읽고 해독해가며 프론트에 동일 DTO랑 연동 코드 만들고, 그러다가 오독하거나 오타치거나 해서 런타임에 서비스 궤같이 터지고, 이런거 몇 번 겪다보면 짱나더라 ㅇㅇ. 걍 스웨거 같은 API 문서 읽는 거 자체가 매우 싫증나고 귀찮고 그래짐 ㅇㅇ


근데 NestJS는 프론트랑 똑같이 TypeScript 쓰잖아?


그래서 NestJS 서버 코드를 컴파일러 수준에서 분석하고, 그것을 토대로 프론트가 사용할 수 있는 연동 라이브러리를 자동으로 만들어주는 SDK Library generator 를 개발함. 대략 아래 gif 짤 같은게 가능해진다.


참고로 아래 gif 짤에서, 왼쪽이 서버 코드, 오른쪽이 SDK 를 사용하는 프론트 코드임. 자동완성 팍팍 떠서 훨씬 편하고 안전해보이지 않냐?



7fec8576b58661ff3ef285e34ed27165b7eff855dade104257fc1bcc8e1bd1f54b842974d996667e455d106d57fa87e4142f4225bcacde028987cc190b1553






5. 기타


Fastify 만드는 곳에서, 자기네에도 typia 심어달라고 요청 들어왔다. 그래서 심어주기로 함 ㅇㅇ.


NodeJS 개발하는 애들은 fastify 가 뭔지 알텐데, 조만간 fastify 에서도 위에서 보는 거 다 될 예정이니 기대하셈 ㅎㅎ.