nest g resource는 Nest.js CLI에서 리소스를 생성하는 명령어로,
RESTful API 또는 GraphQL API 개발에 필요한 기본적인 구조를 자동으로 생성해 줍니다.
이 명령어는 서비스, 컨트롤러, 모듈 등의 파일을 한 번에 생성하여 개발자가 빠르게 리소스를
추가할 수 있도록 도와줍니다.
nest g resource [리소스 이름]
예를 들어, users라는 리소스를 생성하고 싶다면 다음과 같은 명령어를 실행합니다.
nest g resource users
이 명령어는 users와 관련된 여러 파일들을 자동으로 생성합니다.
생성되는 파일들은 일반적으로 다음과 같습니다.
nest g resource 명령어는 아래의 단계로 리소스를 생성합니다.
1. 모듈(Module) 생성
리소스를 관리하는 모듈 파일이 생성됩니다. 모듈은 컨트롤러와 서비스 등 Nest.js의 다양한 구성 요소를 묶는 단위입니다.
2. 컨트롤러(Controller) 생성
API 엔드포인트를 처리하는 컨트롤러 파일이 생성됩니다. 이 컨트롤러는 요청을 처리하고 서비스에 전달합니다.
3. 서비스(Service) 생성
비즈니스 로직을 처리하는 서비스 파일이 생성됩니다. 서비스는 데이터베이스와 상호작용하거나 다른 복잡한 로직을 처리합니다.
4. DTO(Data Transfer Object) 생성
클라이언트로부터 받은 데이터를 검증하고 전송하는 데 사용하는 DTO 파일이 생성됩니다.
5. 엔터티(Entity) 생성(선택 사항)
데이터베이스 모델로 사용되는 엔터티 파일이 생성됩니다.
엔터티는 ORM(Object-Relational Mapping) 툴과 함께 사용되며,
주로 데이터베이스 테이블과 매핑됩니다.
nest g resource 명령어는 여러 옵션을 지원합니다.
주요 옵션들은 다음과 같습니다.
nest g resource [리소스 이름] --crud
- --crud: 기본적인 CRUD(Create, Read, Update, Delete) API 구조를
자동으로 생성합니다.
이 옵션을 사용하면 기본적인 CRUD 엔드포인트와 메서드가 자동으로 설정됩니다.
nest g resource [리소스 이름] --no-spec
기본적으로 Nest.js는 테스트 파일을 생성하지만, 이 옵션을 사용하면
테스트 파일 생성을 생략할 수 있습니다.
nest g resource [리소스 이름] --flat
nest g resource [리소스 이름] --no-dto
nest g resource [리소스 이름] --type graphql
src/
├── users/
│ ├── dto/
│ │ ├── create-user.dto.ts
│ │ ├── update-user.dto.ts
│ ├── entities/
│ │ ├── user.entity.ts
│ ├── users.controller.ts
│ ├── users.module.ts
│ ├── users.service.ts
│ └── users.service.spec.ts
users.controller.ts: /users 경로에 대한 API 엔드포인트를 정의합니다.
기본 CRUD 메서드가 생성되며, 예를 들어 GET, POST, PUT, DELETE 요청을 처리할 수 있습니다.
users.service.ts: 사용자 데이터를 처리하는 로직을 구현하는 서비스입니다.
데이터베이스와의 상호작용 또는 다른 리소스에 대한 처리 로직을 담고 있습니다.
users.module.ts: 해당 리소스를 관리하는 모듈입니다.
모듈은 컨트롤러와 서비스를 묶어 하나의 기능 단위로 관리합니다.
dto 폴더: create-user.dto.ts 및 update-user.dto.ts와
같은 파일들이 생성되어 입력 데이터의 형식을 정의하고 검증합니다.
entities 폴더: user.entity.ts 파일이 생성되며, 데이터베이스 엔터티를 정의합니다.
만약 --crud 옵션을 사용했다면, 생성된 users.controller.ts 파일에는 기본적인 CRUD 메서드가 자동으로 생성됩니다.
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { UsersService } from './users.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.usersService.create(createUserDto);
}
@Get()
findAll() {
return this.usersService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.usersService.findOne(+id);
}
@Patch(':id')
update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
return this.usersService.update(+id, updateUserDto);
}
@Delete(':id')
remove(@Param('id') id: string) {
return this.usersService.remove(+id);
}
}
nest g resource는 Nest.js에서 RESTful API 또는 GraphQL API를 쉽게 개발하기 위한 기본 구조를 자동으로 생성하는 명령어입니다.
nest g resource [리소스 이름] 명령어를 통해 컨트롤러, 서비스, 모듈, DTO, 엔터티 등 다양한 파일을 자동으로 생성할 수 있습니다.
--crud, --no-spec, --type graphql 등의 옵션을 사용해 생성되는 리소스의 구조를 제어할 수 있습니다.