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 를 사용하는 프론트 코드임. 자동완성 팍팍 떠서 훨씬 편하고 안전해보이지 않냐?
5. 기타
Fastify 만드는 곳에서, 자기네에도 typia 심어달라고 요청 들어왔다. 그래서 심어주기로 함 ㅇㅇ.
NodeJS 개발하는 애들은 fastify 가 뭔지 알텐데, 조만간 fastify 에서도 위에서 보는 거 다 될 예정이니 기대하셈 ㅎㅎ.
족고수
삼촌님처럼 이렇게 라이브러리 뚝딱뚝딱 만드려면 어떤 방향으로 공부를 해야할까요...? 정말 멋지십니다
https://dev.to/samchon/nestia-boost-up-your-nestjs-server-much-faster-and-easier-maximum-20000x-faster-59o5
영문판 상세 해설본
fastify에도? 크흐으으으
swc에서 동작가능하면 장난 아닐것 같은데
이거는 작업이 너무 많이 필요하니..
typia가 뱉은 js를 그냥 swc에 던지면 어떨까
개머싯다 - dc App
근데 컴파일러단에서 심어줬다는게 무슨뜻임...? - dc App
기존 방식은 parser 입장에서 런타임에 어떤 타입이 들어올지 모르기 안에서 조건분기, 함수콜 등으로 cpu가 시간낭비하는데, typia는 컴파일과정에서 parser에 무슨 타입이 들어가는지 알아내서 순수하게 파싱하는 코드만 넣는다는 것
컴파일과정에서 파싱하는 코드를 자동으로 만들어낸다는건가? - dc App
ㅇㅇ
뭔가 알거같으면서도 어렵다 - dc App
typia가 ts 컴파일러 플러그인으로 동작하는걸로 앎
위에 영문판 열어보면 대충 AOT 최적화된 코드 예제 있음. 그거 보면 이해 끗
긱뉴스에도 봤는데 블로그 링크 올리지 말고 깃헙 링크를 올려
ㅋㅋㅋ 다음에는 긱뉴스엔 그러려고
js를 안쓰면 애초에 이딴짓거리 할 필요가 없음ㅋ - dc App
혹시 좆바가 더 느리다는 사실 알고계신가요? - dc App
io바운드 한정아님?
JS가 전반적으로 다 빠를껄, 스프링 쓰면서 제 속도 나오는 꼴 본 적이 없음
슥에
미쳤다리
캬 이거 개꿀이겠는데 이럼 파이썬 백보다 ts백이 훨 편하겠다
그저.. 그저 개같이 감사
역시 개고수 - dc App