DTO (Data Transfer Object)

정의

애플리케이션 간 데이터를 전송하는 데 사용되는 객체.

NestJS에서는 주로 클라이언트에서 서버로 데이터를 전송할 때 사용되며, 이 데이터를 검증하고 타입을 안전하게 관리하기 위해 사용

 

 

만들어진 이유

복잡한 데이터 통신을 간소화하고, 네트워크를 통한 데이터 전송 과정에서 필요한 데이터만을 전송하기 위해서 만들어짐

 

사용되어지는 예시 상황

1. 비지니스 로직에 의해 클라이언트가 서버로부터 사용자의 프로필 정보를 요청할 때, 사용자의 모든 정보가 아닌 특정 정보만 필요한 경우

→ 사용자 전체정보를 포함하는 엔티티 대신 필요한 정보만 포함하는 DTO를 생성하여 전송 >> 데이터 전송량 감소

 

 

 

 

 

Controllers

클라이언트로 부터 오는 request 를 받고 respons 를 반환

 

라우팅 방법 예시

example.controller.ts

import { Controller, Get } from '@nestjs/common';

@Controller('cats') // 주소를 설정 : "http://localhost:3000/cats"
export class CatsController {
  @Get() // routs
  findAll(): string {
    return 'This action returns all cats';
  }
  @Get(:id) // "http://localhost:3000/cats/1"
  findOne(): string {
    return 'This action returns a cat';
  }
  @Get('breed') // "http://localhost:3000/cats/breed"
  findOne(): string {
    return 'This action returns breed';
  }
  
  @Post()
  @HttpCode(201)  // 상태 코드 설정
  create() {
     return 'This action adds a new cat';
  }
}

 

 

@GET / @Post /@Patch / @Delete ... 아래에 다양한 데코레이터를 사용할 수 있다.

 

@HttpCode → 초기설정값 (default): 200 ,

       Express 의 방식처럼    findAll(@Res() response)     response.status(200).send() 가능! 하지만 추천 X

@Header

@Redirect

...

 

요청 데이터 사용방법

Body

요청데이터 예시

{
    "email" : "test@example.com"
    "passwoerd" : "qwertyu"
import { Controller, Post, Body } from '@nestjs/common';

@Controller('users')
export class UsersController {

  @Post()
  createUser(@Body('email') email: string, @Body('password') password: string) {

    // 유저 생성 로직 구현
  }
}

 

DTO 이용

아래이 DTO를 이용하여 같은 방식을 이용하여  데이터를 받을 수 있다.

 

createdUser.dto.ts

export class CreateUserDto {
      email: string;
      password: string;
}

 

....
  @Post()
  create(@Body() createUserDto: CreateUserDto) {
    // 요청 본문 데이터 사용
    const { email, password } = createUserDto;
....

 

 

Query

.....
  @Get()
  //  "http://localhost:3000/users?page=1&limit=2"
  findAll(@Query('page') page: number, @Query('limit') limit: number) {
    // Query Parameter 사용
    console.log('Page:', page);    // 1
    console.log('Limit:', limit);  // 2
  
 .....

 

Dto 를 사용하여 

 @Query('page') page: number, @Query('limit') limit: number
→@Query() findAllUserDto: FindAllUserDto

 

Param

import { Controller, Get, Param } from '@nestjs/common';

@Controller('users')
export class UsersController {
  @Get(':id') // users/ 1
  findOne(@Param('id') id: string) {

    // Path Variable 사용
    console.log('User ID:', id);

    // 특정 유저 조회 로직 구현
  }
}

 

Headers

....
  @Get()
  findAll(@Headers('authorization') token: string) {
    // 헤더 사용
    console.log('Authorization token:', token);

    // 유저 조회 로직 구현
  }
}

 헤더에 있는 내용을 받아 올때  key 값이 일치해야 한다\

 

 

참고자료

https://docs.nestjs.com/controllers

설치

$ npm i -g @nestjs/cli
$ nest new <원하는 프로젝트 이름>

 

 

앱 실행하기

$ npm run start

 

http://localhost:3000/ 로 접속을 하면 "Hello World!" 가 보여야 한다.

 

- 바뀌는 사항을 실시간으로  반영

$ npm run start:dev

 

 

코드를 일관적으로 작성하기 위한 팁

NestJS 에서는 eslint 와 prettier 을 제공한다. 

이것을 아래의 명령어로 실행을 하면 프로젝트 안에 있는 모든 코드가 고쳐진다. 

$ npm run lint

# prettier 포맷을 적용하여 수정
$ npm run format

 

권한 설정

Npm 의 디렉토리 위치 찾기

$ npm config get prefix

 

출력이 "/usr/local"  이면 아래 명령어를 실행하여 권한을 설정

$ sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

  - lib/node_modules,bin,share  <- 이 부분은 원하는 폴더로 변경가능

   >> $ sudo chown -R root:$(whoami) /usr/local/lib/node_modules/

추가로 가능한 권한을 설정해 줄 수 있다.

sudo chmod -R 775 /usr/local/lib/node_modules/

775에 대한 내용은 여기 참고 

nest 설치

 

$ npm i -g @nestjs/cli # Nest 프로젝트를 간편하게 생성할 수 있게 도와주는 라이브러리
$ nest new my-web-server # my-web-server(프로젝트 이름)이라는 이름으로 Nest 프로젝트를 생성

 

 

참고자료

https://stackoverflow.com/questions/47252451/permission-denied-when-installing-npm-modules-in-osx

 

Permission denied when installing npm modules in OSX

I'm trying to install node-g.raphael, and I'm getting the following error: Bender-03:htdocs alfred$ sudo npm install node-g.raphael --save Password: > contextify@0.1.15 install /Users/alfred/

stackoverflow.com

https://docs.nestjs.com/first-steps

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Rea

docs.nestjs.com

https://stackoverflow.com/questions/49679808/error-eacces-permission-denied-mkdir-usr-local-lib-node-modules-node-sass-b

'프로그래밍 > Nest.js' 카테고리의 다른 글

[ NestJS ] Providers  (0) 2024.04.18
[NestJS] TypeORM 설정방법  (0) 2024.04.17
[ NestJS] DTO?  (0) 2024.04.17
[ NestJS ] Controllers  (0) 2024.04.15
[ NestJS ] 시작하기  (0) 2024.04.15

+ Recent posts