본문 바로가기

NestJS

Controller

 controller는 클라이언트에서 보낸 HTTP 요청을 받아 라우팅 하며, 프로바이더에게 전달한다. 또한, 프로바이더에게 받은 응답을 다시 클라이언트에게 반환한다. @Controller() 데코레이터를 붙여 정의하는 클래스이다.

 

 

 다음 예시를 보며 설명해 보겠다.

import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { TestService } from './test.service';
import { CreateTestDto } from './dto/create-test.dto';
import { UpdateTestDto } from './dto/update-test.dto';

@Controller('test')
export class TestController {
  constructor(private readonly testService: TestService) {}

  @Post()
  create(@Body() createTestDto: CreateTestDto) {
    return this.testService.create(createTestDto);
  }

  @Get()
  findAll() {
    return this.testService.findAll();
  }

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.testService.findOne(+id);
  }

  @Patch(':id')
  update(@Param('id') id: string, @Body() updateTestDto: UpdateTestDto) {
    return this.testService.update(+id, updateTestDto);
  }

  @Delete(':id')
  remove(@Param('id') id: string) {
    return this.testService.remove(+id);
  }
}

 

@Controller('test')는 해당 컨트롤러가 'API/test' 경로에 대한 요청을 처리한다는 것을 의미한다.

 

constructor(private readonly testService: TestService) 코드는 TestService를 주입하여 testService 멤버 변수를 생성한다. 의존성 주입을 사용하여 TestService 인스턴스를 컨트롤러에 주입한다. 

 

 @Post, @ Get, @Patch, @Delete 등의 컨트롤러 메서드에 적용되는 데코레이터로 HTTP 요청 별 작업을 수행할 수 있고, () 안에 경로를 넣어 라우팅을 할 수 있다. 추가적으로 @Put() 데코레이터는 PUT 요청을 처리한다.

 

 

 @Param, @Body 등의 데코레이터로는 요청에 담겨 있는 정보를 얻을 수 있다.

 @Param(':id')는 경로의 ':id' 파라미터 값을 id 매개변수로 전달한다. 

 @Body()는 HTTP 요청의 Body에 있는 정보들을 DTO에 전달한다.

 

다음은 추가적인 데코레이터 중 필자가 사용해 본 데코레이터들이다.

@Headers(): HTTP 요청의 Header에 있는 정보를 전달한다.

@UploadedFile(): 멀티파트(form-data) 요청에서 파일 업로드 필드의 값을 추출하여 매개변수에 주입한다.

@Query(): 쿼리 파라미터 값을 매개변수로 주입한다.

@Res(): 클라이언트에 대한 응답을 생성하고 전송하는 데 사용되는 Express 응답 객체를 매개변수로 주입한다.

@Req(): 클라이언트로부터의 HTTP 요청에 대한 정보를 담고 있는 Express 요청 객체를 매개변수로 주입한다.

 

실제로는 훨씬 더 많은 데코레이터들이 있다.

 

 

 

 

 

 

 간단하게 요약하자면, controller는 요청을 받아 해당 요청에 있는 데이터들을 처리해 비즈니스 로직을 담당하는 service에 넘겨준 후, 반환받은 응답을 클라이언트에게 다시 넘겨주는 역할을 한다. 

'NestJS' 카테고리의 다른 글

NestJS에서 openAI API 연동으로 ChatGPT 활용하기  (0) 2023.08.30
Throttler를 사용한 Rate Limiting  (0) 2023.08.24
Provider  (0) 2023.07.24
NestJS의 프로젝트 구조  (0) 2023.07.18
NestJS 소개  (0) 2023.04.15