Menu
CoddyTech

안녕, Nest

Coddy Node.js 여정의 TypeScript와 NestJS 섹션에 포함된 레슨. 24개 중 2번째.

Express에서는 모든 경로가 직접 등록하는 함수입니다. NestJS에서는 API의 각 부분에 고유한 클래스가 있으며, 데코레이터는 각 클래스가 어떤 역할을 하는지 Nest에 알려 줍니다.

@Controller('books')
export class BooksController {
    @Get()
    findAll() {
        return [{ title: 'Dune' }];
    }
}

컨트롤러는 하나의 경로에 대한 요청에 응답합니다. @Controller('books')와 @Get()은 데코레이터입니다. 데코레이터는 @로 시작하며 클래스나 메서드 바로 위 줄에 위치해, 해당 클래스나 메서드의 역할을 Nest에 알려 줍니다. Nest의 데코레이터는 괄호 안에 아무것도 없어도 항상 ()로 끝납니다. 이를 함께 사용해 findAll을 GET /books에 연결하며, Nest는 메서드가 반환하는 값을 상태 코드 200과 함께 JSON으로 보냅니다. Nest는 경로 데코레이터가 없는 메서드에는 요청을 절대 보내지 않습니다.

모듈은 서로 관련된 클래스를 나열합니다. src/main.ts는 NestFactory.create(AppModule)을 호출하고, AppModule은 TasksController를 나열하는 TasksModule을 가져옵니다. 노트북에서는 npm run start로 시작할 수 있으며, 여기서는 Run이 대신 실행합니다.

시작 코드에서 interface Task는 작업 객체의 필드를 설명하고, Task[]는 그러한 객체의 배열을 의미합니다. private는 필드를 해당 클래스 내부에 둡니다. 메서드의 괄호 뒤에 오는 타입은 반환값을 설명합니다. 이러한 주석은 TypeScript가 코드를 검사하는 데 도움을 주며, Nest의 데코레이터는 경로를 정의합니다.

challenge icon

챌린지

쉬움

첫 Nest 서버에는 이미 작업 세 개가 있지만, 아직 작업을 반환하는 경로는 없습니다. 작업 목록을 반환하는 경로를 추가하세요.

  1. src/tasks/tasks.controller.ts를 여세요. TasksController 클래스는 this.tasks에 목록을 가지고 있습니다. 클래스 위의 @Controller('tasks')는 /tasks 아래의 경로를 이 클래스가 담당하도록 합니다.
  2. 주석이 있는 곳에 메서드 하나를 추가하고(findAll이라고 부르세요) @Get()으로 표시하세요. 메서드는 this.tasks를 반환합니다. Nest는 메서드가 반환하는 값을 상태 코드 200과 함께 JSON으로 보냅니다.
  3. Get은 Controller와 마찬가지로 @nestjs/common에서 가져옵니다. 첫 번째 줄의 가져오기 구문에 추가하세요.

직접 해 보기: ‘실행’을 누른 다음 GET /tasks를 보내세요. 상태 코드 200과 함께 작업 세 개를 받습니다.

[
  { "id": 1, "title": "Write the README", "done": true },
  { "id": 2, "title": "Fix the login bug", "done": false },
  { "id": 3, "title": "Plan the sprint", "done": false }
]

그런 다음 s를 빼고 GET /task를 보내세요. 해당 경로와 일치하는 경로가 없으므로 Nest는 404로 응답합니다.

{ "message": "Cannot GET /task", "error": "Not Found", "statusCode": 404 }

직접 해보기

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

interface Task {
    id: number;
    title: string;
    done: boolean;
}

@Controller('tasks')
export class TasksController {
    private tasks: Task[] = [
        { id: 1, title: 'Write the README', done: true },
        { id: 2, title: 'Fix the login bug', done: false },
        { id: 3, title: 'Plan the sprint', done: false },
    ];

    // 여기에 GET /tasks 요청에 목록을 반환하는 메서드를 추가하세요.
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

TypeScript와 NestJS의 모든 레슨

직접 연습해 보세요: Express 플레이그라운드