NestJS · · 1 min read

2. 인터페이스

인터페이스 계층은 들어오는 HTTP 요청을 받아 결과를 응답하는 진입점이다. NestJS 에서는 컨트롤러(Controller) 가 라우팅을 맡아 이 역할을 한다.

2.1. 컨트롤러

요청 경로(라우트)와 그것을 처리할 메서드를 연결한다. 클래스에 @Controller(), 메서드에 HTTP 메서드 데커레이터를 붙인다.

nest g controller users
import { Controller, Get, Post, Param, Query, Body } from '@nestjs/common';

@Controller('users')           // 공통 경로 prefix: /users
export class UsersController {
  @Get()                       // GET /users
  findAll(@Query('page') page: number) {
    return `page ${page}`;
  }

  @Get(':id')                  // GET /users/:id
  findOne(@Param('id') id: string) {
    return `user ${id}`;
  }

  @Post()                      // POST /users
  create(@Body() dto: CreateUserDto) {
    return dto;
  }
}

라우트 핸들러 데커레이터

데커레이터대상
@Get @Post @Put @Patch @DeleteHTTP 메서드별 라우트
@Param(key)경로 파라미터 (/users/:id)
@Query(key)쿼리스트링 (?page=1)
@Body()요청 본문(JSON)
@Headers() @Req() @Res()헤더·요청·응답 객체

2.2. DTO (Data Transfer Object)

계층 간에 오가는 데이터의 형태를 정의하는 객체. 보통 class 로 만들어 유효성 검사(6장)와 함께 쓴다.

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