컨트롤러는 어떤 요청을 어떻게 처리하는지 관리하는 역할을 합니다.

컨트롤러 생성 방법
nest g controller 이름
nest g co 이름 # 약어 사용
nest g co 이름 --no-spec # 테스트 파일 생성을 원하지 않을 때
라우팅
요청 경로를 처리하기 위한 방법을 라우팅이라 합니다.
컨트롤러 자체의 경로와 메소드별 경로를 지정할 수 있습니다.
// 컨트롤러 수준의 라우팅
// http://url/index 패턴과 일치하면 해당 컨트롤러로 진입후 메서드를 찾습니다.
@Controller('index')
export class AppController {
constructor(private readonly appService: AppService) {}
//메서드 수준의 라우팅
// http://url/index/hello
// 'hello'라고 적어도 동일합니다
@Get('/hello')
getHello() {
return 'Hello!';
}
@Get() // http://url/index
getIndex() {
return 'Index page';
}
}
HTTP 메서드
NestJS는 모든 HTTP 메서드에 대한 데코레이터를 제공합니다.
| 데코레이터 | 기능 |
| @Get(’라우팅') | GET 메서드의 라우팅 설정 |
| @Post(’라우팅') | POST 메서드의 라우팅 설정 |
| @Delete(’라우팅') | DELETE 메서드의 라우팅 설정 |
| @Put(’라우팅’) | PUT 메서드의 라우팅 설정 |
| @Patch(’라우팅’) | PATCH 메서드의 라우팅 설정 |
| @Options(’라우팅') | OPTIONS 메서드의 라우팅 설정 |
| @Head(’라우팅’) | HEAD 메서드의 라우팅 설정 |
| @All(’라우팅’) | HTTP 메서드를 모두 처리 |
Request 객체
데코레이터를 사용해 HTTP 요청 시 전달되는 요청 객체를 다룰 수 있습니다.
| 데코레이터 | 기능 |
| @Req(), @Request() | request 객체 |
| @Res(), @Response() | response 객체 |
| @Next() | 다음 미들웨어 사용(NestJS에서 쓸 일 없을 것 같아요) |
| @Session() | request 객체의 session 속성 |
| @Param(key?: string) | request 객체의 param 속성 |
| @Body(key?: string) | request 객체의 body 속성 (주로 Post, Put, Patch 메서드) |
| @Query(key?: string) | request 객체의 query 속성 |
| @Headers(name?: string) | request 객체의 headers 속성 |
| @Ip() | request 객체의 ip 속성 |
쿼리, 경로 매개변수
@Param() 데코레이터를 이용해 경로 매개변수를 처리하고,
@Query() 데코레이터를 이용해 쿼리 매개변수를 처리합니다.
예시
http://www.google.com/search?q=nestjs 에서 경로와 쿼리는 다음과 같습니다.
| www.google.com | search | q=nestjs |
| host | 경로(Path) | 쿼리 |
@Get(':id')
find(
@Param() params,
@Param('id') id,
@Query() queries,
@Query('q') keyword,
) {
// @Param() 데코레이터에 문자열을 전달하지 않으면 모든 param 객체를 전달 받습니다.
// @Param() 데코레이터에 문자열을 전달하면 인자와 일치하는 param 객체의 값을 string으로 전달 받습니다.
const isParamEqual = params.id === id;
// @Query() 데코레이터에 문자열을 전달하지 않으면 모든 query 객체를 전달 받습니다.
// @Query() 데코레이터에 문자열을 전달하면 인자와 일치하는 query 객체의 값을 string으로 전달 받습니다.
const isQueryEqual = queries.q === keyword;
}
동적 매개변수
@Get(':id')
findOne(@Param() params: any): string {
console.log(params.id);
return `This action returns a #${params.id} cat`;
}
요청 본문(Body, payload(본문을 payload라고도 함)) 다루기
HTTP 요청 시 요청 본문(Body)에 처리에 필요한 데이터를 전달할 수 있습니다.
요청 본문은 @Body() 데코레이터를 이용해 처리합니다.
@Post()
async createB(@Body() body, @Body('name') name, @Body('age') age) {
console.log(body); // body 전체 출력
console.log(name); // body.name 출력
console.log(age); // body.age 출력
}
응답 상태 코드 변경
NestJS의 기본 응답 상태 코드는 200이고 POST 요청은 201입니다.
@HttpCode() 데코레이터를 사용해 변경할 수 있습니다.
@Post()
@HttpCode(204)
create() {
return 'This action adds a new cat';
}
응답 헤더 변경
@Post()
@Header('Cache-Control', 'no-store')
create() {
return 'This action adds a new cat';
}
리디렉션
응답을 특정 URL로 리디렉션 하려면 @Redirect() 데코레이터 혹은 url을 반환하면 됩니다.
둘 다 반환하는 경우 url 반환이 우선순위가 더 높습니다.
@Get('docs')
@Redirect('https://docs.nestjs.com', 302) // 우선순위가 낮습니다.
getDocs(@Query('version') version) {
if (version && version === '5') {
return { url: 'https://docs.nestjs.com/v5/' }; // 우선순위가 높습니다.
}
}
'NestJS > NestJS 자체 문서화' 카테고리의 다른 글
| 파이프(Pipe), DTO (0) | 2025.12.31 |
|---|---|
| 프로바이더, 서비스 (0) | 2025.12.31 |
| 모듈 (0) | 2025.12.31 |
| Nest CLI (1) | 2025.12.18 |
| NestJS 개요 (0) | 2025.12.10 |