NestJS에 대하여

Devcamp 1일차 NestJS Nest는 테스트가 수월하고 확장성이 좋으며 유지보수가 편리한 Node.js 프레임워크 중 하나이다. Typescript Nest는 Typescript를 지원하는 것이 가장 큰 특징이다. 따라서 Interface를 사용할 수 있으며 Static/strong typing을 지원하기 때문에 type에 관해서, 혹은 property나 이름 오류도 코드 작성 단계에서 감지된다. 서버를 매번 실행하는 번거로움 없이 오타나 Type 설정, 디버깅을 할 수 있다는 것은 개발에 들어가는 시간과 노력을 줄여주는 큰 장점이다. 성질 객체지향 프로그래밍, 자료 처리를 수학적 함수의 계산으로 취급하는 FP(Functional Programming), 그리고 비동기적 데이터 흐름의 요소를 갖추고 있다. 기본적으로 Express hTTP 프레임워크를 사용하지만, Fastify를 포함하여 다양한 Node HTTP 프레임워크도 사용할 수 있고, Express에서 지원되는 것들은 Nest에서도 사용할 수 있어서 사용이 편리하다. ...

2023년 10월 11일 · 8 분 · 배준수

Authentication와 Guard

Authentication Custom Decorator 만들기 handler에게 자동으로 현재 로그인한 유저를 알려주는 기능을 만들려고 한다. 우리는 기존의 @Session() 대신 새로운 우리만의 decorator를 만들 것이다. 우리가 만들 CurrentUser Decorator는 2가지가 필요할 것이다. Session Object : 요청한 유저의 id를 알아야 한다. UsersService Instance : 알아낸 id를 가진 사용자를 찾아야 하기 떄문이다. 우리는 Param decorators로 만들어야 한다. 하지만 Param decorators는 DI(종속성 주입) 시스템 외부에 있어서, UsersService 인스턴스를 받을 수 없다. 이 문제를 해결하기 위해 interceptor를 만든다. ...

2023년 10월 9일 · 3 분 · 배준수

Nest CLI로 프로젝트 생성하기

App setup 이번엔 이전과 다르게 Nest CLI를 이용해 프로젝트를 시작해보겠다. 새로운 디렉토리에서 시작하자. 새 폴더를 만들고 터미널에서 이동한다. npm install -g @nestjs/cli 를 입력하자. 오류뜨면 맨앞에 sudo를 추가한다. 설치가 끝나면 nest new {프로젝트이름}을 입력하고 npm을 선택한다. messages라는 이름으로 짓겟다. 끝나고 나면 우리가 일일이 만들었던 저번보다 훨씬 많은 파일이 자동적으로 생성된 것을 볼 수 있다! 계획 이번에 만들 앱(모바일 X)은 일반 JSON 파일에 저장된 메시지를 검색하고 저장하는 것. 3개의 route가 예상된다. 각 route가 pipe, guard, controller, service, repository 중 무엇이 필요한지 생각해보자. ...

2023년 10월 5일 · 3 분 · 배준수

NestJS 기초

scratch에서 시작한다. Nest 기초 시작 및 설치하기 npm init -y 로 package.json 생성한다. 그 후 종속성 5개를 설치한다. "@nestjs/common": "^7.6.17" : Nest에서 함수, 클래스 등 대다수를 가져온다. "@nestjs/core": "^7.6.17" "@nestjs/platform-express": "^7.6.17" : HTTP 요청을 다루기 위해 Nest가 ExpressJS 사용하도록 해준다. "reflect-metadata": "^0.1.13" : decorator "typescript": "^4.3.2" : 사용할 언어 TS(Typescript) 컴파일러 세팅 루트 디렉토리에 다음과 같이 tsconfig.json 파일을 만든다. 1 2 3 4 5 6 7 8 { "compilerOptions": { "module": "commonjs", "target": "es2017", "experimentalDecorators": true, "emitDecoratorMetadata": true } } HTTP 요청과 응답 사이에 서버에서 발생하는 일 요청 (in Nest) ...

2023년 10월 5일 · 4 분 · 배준수

요청 데이터의 Validation

요청 데이터의 Validation(타당성) 검사 Decorator로 요청 데이터 접근하기 HTTP 요청 3가지로 구성 Start line : POST /messages/5?validate=true HTTP/1.1 Headers : Host: localhost:3000, Content-Type: application/json Body : {"content": "hi there"} Nest의 경우 decorator 이용 POST /messages/5?validate=true HTTP/1.1 5 : @Param(‘id’) validate=true : @Query() Headers는 @Headers() Body 는 @Body() 위와 같이 decorator를 이용하면 된다. messages.controller.ts 의 컨트롤러를 다시 작성해 보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // messages.controller.ts import { Controller, Get, Post, Body, Param } from '@nestjs/common'; @Controller('messages') // class decorator export class MessagesController { @Get() // method decorator listMessages() {} @Post() createMessage(@Body() body: any) { // @Body, @Param : argument decorator console.log(body); } @Get('/:id') getMessage(@Param('id') id: string) { console.log(id); } } 이제 API Client로 확인해보자. ...

2023년 10월 5일 · 4 분 · 배준수