Menu
CoddyTech

서비스

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

컨트롤러가 작업을 직접 보유하므로 앱의 다른 부분에서는 작업에 접근할 수 없습니다. 데이터와 로직은 프로바이더에 두어야 합니다. 프로바이더는 Nest가 생성하고 요청하는 곳에 전달하는 클래스입니다.

@Injectable()
export class BooksService {
    private books = [{ title: 'Dune' }];
}

@Controller('books')
export class BooksController {
    constructor(private readonly booksService: BooksService) {}
}

@Injectable()은 클래스를 표시하고, 모듈은 해당 클래스를 providers에 등록합니다. 클래스는 생성자에 프로바이더의 이름을 지정해 요청합니다. 이것이 의존성 주입입니다. Nest는 매개변수의 타입을 읽습니다. 데코레이터가 적용된 클래스의 타입은 컴파일러가 유지합니다. Nest는 앱 전체에서 사용할 인스턴스 하나를 생성하고, 요청하는 모든 클래스에 동일한 인스턴스를 전달합니다. 데이터가 공유되며, 테스트에서는 대신 가짜 객체를 전달할 수 있습니다.

이 강의는 컨트롤러가 이미 this.tasksService를 호출하는 상태에서 시작합니다.

challenge icon

챌린지

쉬움
  • TasksService를 주입 가능하게 만들고, create(title)과 remove(id)를 구현하세요. 이는 5과에서 컨트롤러가 하던 작업입니다. 그리고 이를 TasksModule의 providers에 등록하세요.
  • TasksController의 생성자에서 이를 요청하세요.
  • { "title": "Buy milk" }를 사용해 POST /tasks를 보내고, 이어서 GET /tasks, 그런 다음 DELETE /tasks/99를 보내세요.

직접 해보기

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

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

// Nest가 주입할 수 있도록 이 클래스를 프로바이더로 만드세요.
export class TasksService {
    private tasks: Task[] = [
        { id: 1, title: 'Write the README', done: true, createdAt: '2026-01-05T09:00:00.000Z' },
        { id: 2, title: 'Fix the login bug', done: false, createdAt: '2026-01-06T14:30:00.000Z' },
        { id: 3, title: 'Plan the sprint', done: false, createdAt: '2026-01-07T08:15:00.000Z' },
    ];

    findAll(done?: string): Task[] {
        if (done === undefined) {
            return this.tasks;
        }
        return this.tasks.filter((task) => task.done === (done === 'true'));
    }

    findOne(id: number): Task {
        const task = this.tasks.find((task) => task.id === id);
        if (!task) {
            throw new NotFoundException(`Task ${id} not found`);
        }
        return task;
    }

    // create와 remove 로직을 컨트롤러에서 여기로 옮기세요.
}
quiz icon실력 점검

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

TypeScript와 NestJS의 모든 레슨