NestJS 컨트롤러는 HTTP 요청을 받아들이고 해당 요청을 처리하는 핸들러입니다. 컨트롤러는 NestJS 애플리케이션의 핵심 요소 중 하나이며, 요청과 응답을 처리하는 로직을 담당합니다. 각각의 컨트롤러는 특정 엔드포인트(라우트)와 연결되며, 해당 엔드포인트에 대한 요청을 처리합니다.
Prisma를 사용하여 CRUD(Create, Read, Update, Delete) 연산을 수행하는 컨트롤러를 구현하는 방법을 살펴보겠습니다. 예시로 User 엔티티를 기준으로 합니다.
User 모델 정의: 먼저, Prisma 데이터베이스 모델에 해당하는 User
엔티티를 정의합니다.
// prisma/schema.prisma
model User {
id Int @id @default(autoincrement())
email String @unique
name String
}
User 컨트롤러 생성: NestJS CLI를 사용하여 User 컨트롤러를 생성합니다.
nest generate controller user
User 서비스 생성: User 컨트롤러가 User 데이터를 다루기 위해 Prisma를 사용하도록 User 서비스를 생성합니다.
nest generate service user
User 컨트롤러 및 서비스 연동: User 컨트롤러와 User 서비스를 연동하여 HTTP 요청을 처리합니다.
// user.controller.ts
import { Controller, Get, Post, Body, Param, Delete, Put } from '@nestjs/common';
import { UserService } from './user.service';
@Controller('users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get()
async getAllUsers() {
return this.userService.getAllUsers();
}
@Post()
async createUser(@Body() userData: { email: string; name: string }) {
return this.userService.createUser(userData);
}
@Get(':id')
async getUser(@Param('id') id: string) {
return this.userService.getUserById(Number(id));
}
@Put(':id')
async updateUser(@Param('id') id: string, @Body() userData: { email: string; name: string }) {
return this.userService.updateUser(Number(id), userData);
}
@Delete(':id')
async deleteUser(@Param('id') id: string) {
return this.userService.deleteUser(Number(id));
}
}
// user.service.ts
import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma.service';
@Injectable()
export class UserService {
constructor(private readonly prisma: PrismaService) {}
async getAllUsers() {
return this.prisma.user.findMany();
}
async createUser(userData: { email: string; name: string }) {
return this.prisma.user.create({
data: userData,
});
}
async getUserById(id: number) {
return this.prisma.user.findUnique({
where: { id },
});
}
async updateUser(id: number, userData: { email: string; name: string }) {
return this.prisma.user.update({
where: { id },
data: userData,
});
}
async deleteUser(id: number) {
return this.prisma.user.delete({
where: { id },
});
}
}
위 예시에서 UserController
는 /users
엔드포인트에 대한 요청을 처리하고, UserService
는 실제 Prisma를 사용하여 CRUD 연산을 수행합니다. 사용자를 생성, 조회, 업데이트, 삭제하는 라우팅과 로직이 구현되었습니다.
NestJS 컨트롤러에서 각 요청은 데코레이터를 사용하여 연결된 핸들러 메서드로 라우팅됩니다. 요청 메서드에 해당하는 데코레이터를 사용하여 엔드포인트를 정의하고, 해당 요청을 처리할 메서드를 작성합니다.
@Get()
: GET 요청을 처리하는 메서드를 정의합니다.@Post()
: POST 요청을 처리하는 메서드를 정의합니다.@Put()
: PUT 요청을 처리하는 메서드를 정의합니다.@Delete()
: DELETE 요청을 처리하는 메서드를 정의합니다.라우팅 경로는 데코레이터의 인수로 지정되며, 인수로 전달된 문자열은 해당 엔드포인트의 URL 경로를 의미합니다.
또한, @Param()
데코레이터를 사용하여 URL의 파라미터 값을 가져올 수 있습니다. 파라미터는 핸들러 메서드의 인수로 전달됩니다.
예시에서 사용된 라우팅 및 요청 처리 메서드들은 NestJS 컨트롤러의 기본적인 사용 방법으로, Prisma를 활용하여 데이터베이스와의 CRUD 연산을 적용하였습니다. 따라서 위 예시를 참고하여 NestJS 컨트롤러에서 HTTP 요청 처리와 라우팅을 구현할 수 있습니다.