기본 개념
컨트롤러
서버가 수행해야하는 작업을 데코레이터로 기술하여, 어플리케이션이 가지는 핵심 로직에 집중할 수 있도록 도와준다.
@Controller 데코레이터를 클래스에 달면 해당 클래스는 컨트롤러의 역할을 하게 된다.
@Get() 을 통해 들어오는 요청을 경로에 따라 관리 가능하다.
ex) @Get('/hello') 라고 하는 경우, /hello 경로로 들어오는 요청을 처리
@Contoller 데코레이터도 인자를 넣어 라우팅 경로의 prefix를 지정할 수 있다.
라우팅 패스는 와일드 카드를 이용하여 작성할 수 있다.
요청 객체 (Request Object)
Nest는 요청과 함께 전달되는 데이터를 핸들러가 다룰 수 있는 객체로 변환한다.
변환된 객체는 @Req() 데코레이터를 이용해 다룰 수 있다.

Nest는 CRUD에 대한 http method의 성공에 대한 응답으로 POST는 201, 그 외에는 200을 갖는다.
상태코드를 다른 코드를 바꾸기 위해서는 다음과 같이 적용할 수 있다.
import { HttpCode } from '@nestjs/common';
@HttpCode(202)
@Patch(':id')
update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
return this.usersService.update(+id, updateUserDto);
}
요청을 처리하는 도중 에러가 발생하거나 예외를 던져야 하는 경우 다음과 같이 할 수 있다.
@Get(':id')
findOne(@Param('id') id: string) {
if (+id < 1) {
throw new NotFoundException('User is not found');
}
return this.usersService.findOne(+id);
}
응답을 받는 서버 또는 클라이언트와 약속된 커스텀 헤더를 추가할 경우, @Headers 데코레이터를 사용한다.
인자로는 헤더 이름과 값을 받는다.
import { Header } from '@nestjs/common';
@Header('Custom', 'Test Header')
@Get(':id')
findOneWithHeader(@Param('id') id: string) {
return this.usersService.findOne(+id);
}
리디렉션(Redirection)
응답 바디에 redirectionUrl을 포함시켜 클라이언트가 스스로 페이지를 이동하도록 @Redirection 데코레이터 사용.
두번째 인자는 상태코드.
하위 도메인 라우팅
새로운 컨트롤러 생성
새로운 컨트롤러에서도 같은 엔드포인트를 받도록 하는데, 먼저 처리될 수 있도록 순서를 수정
@Controller 데코레이터는 ControllerOptions 객체를 인자로 받는데, 이 때 host 속성에 하위 도메인을 기술한다.
@Controller({ host: 'api.example.com' }) // 하위 도메인 요청 처리 설정 export class ApiController { @Get() // 같은 루트 경로 index(): string { return 'Hello, API'; // 다른 응답 } }
요청 페이로드 다루기
NestJS는 DTO (Data Transfer Object)를 정의하여 쉽게 다룰 수 있다.
예를 들어, Users 리소스를 생성하기 위해 POST /users 로 들어오는 바디는 CreateUserDto 로 받을 수 있다.
export class CreateUserDto { name: string; email: string; }
@Post()
create(@Body() createUserDto: CreateUserDto) {
const { name, email } = createUserDto;
return `유저를 생성했습니다. 이름: ${name}, 이메일: ${email}`;
}
프로바이더 (Provider)
앱이 제공하고자 하는 핵심 기능, 즉 비즈니스 로직을 수행하는 역할을 하는 것.
Service, Repository, Factory, Helper 등 여러 형태로 구현이 가능.
Nest에서 제공하는 프로바이더의 핵심은 의존성을 주입할 수 있다는 점이다.
DI : Dependency Injection 를 이용하면 객체 생성과 사용의 관심을 분리할 수 있다.
모듈(Module)
전역 모듈을 만드는 방법 : @Global() 데코레이터 선언
동적 모듈(Dynamic Module)
Last updated