문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 NestJS (문단 편집) === TypeScript Native === 기존의 자바스크립트 프레임워크와는 다르게, '타입스크립트를 지원할 수 있다'가 아니라 처음부터 '타입스크립트로 쓸 것을 가정하고' 만들어졌다.[* 이는 [[Angular]]와도 상당히 비슷한 특징이다.] 물론 쓸려면 js로도 쓸 수는 있으며 자세한 것은 후술. 타입스크립트를 단순한 기초 이상으로 활용하며 이 프레임워크의 핵심 컨셉 자체에 각종 타입스크립트 특수적인 개념들이 들어가기 때문에 타입스크립트를 모른다면 러닝커브가 상당히 높을 수 있다. 반대로 [[앵귤러]] 개발자들이었다면 provider, 데코레이터, Compodoc, DI 패턴 등 친숙한 개념들이 많아 가장 배우기 쉽다. 가장 눈에 띄는 특징으로, 앵귤러만큼 데코레이터를 도처에 활용한다. 그 외에도 표준화된 인터페이스의 사용({{{OnModuleInit}}} 등), 생성자 DI 등을 찾아볼 수 있다. 타입스크립트의 타입을 활용한 DTO를 사용한다. 즉 다음과 같이 선언한 클래스는{{{#!syntax typescript class Dto { constructor( private readonly name: string, private readonly age: number, private readonly isMan: boolean, ) {} } }}}어떠한 별도의 데코레이터 등이 없이도 자동으로 클라이언트에 전달되는 시점에서{{{#!syntax typescript @Controller() class SomeController { @Get() returnDto(): Dto { return new Dto('namuwiki', 123, false) } } }}}아래와 같이 자동으로 직렬화된다.{{{#!syntax json { "name": "namuwiki", "age": 123, "isMan": false } }}} 또한 {{{classTransformer}}}나 {{{classValidator}}}등을 이용해서 추가적인 비즈니스 로직을 작성할 수도 있다. 주의할 점으로, DTO 클래스에 부분적인 변경을 가하기 위해서는 타입스크립트의 내장 {{{Partial}}}, {{{Omit}}}등을 사용하기보단 {{{@nestjs/mapped-types}}}를 사용하는 것이 좋은데, 이는 내장 타입은 단지 mapped-type이기 때문에 데코레이터가 붙은 클래스에 사용하면 런타임에서 읽어봐야 할 정보다 날아가기 때문이다. 사실상 100% 타입스크립트로 쓰일 것을 가정하고 만들어진 프레임워크지만, 자바스크립트로도 작성이 불가능한 것은 아니다. 다만 100% 네이티브로 돌아가는 것은 아니고 자바스크립트 스캐폴딩 기준으로는 바벨을 사용해 데코레이터를 컴파일한다. 다만 이 과정이 느리기 때문에 [[SWC]]를 사용할 수도 있다(이는 타입스크립트 코드베이스에서도 마찬가지). [[https://github.com/manuschillerdev/nestjs-swc|swc용 스타터 템플릿]]을 보면 성능 차이가 얼마나 나는지 실감할 수 있다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기