-
Nest.js 모듈 생성(추가) 퀵가이드Nest.js 2025. 3. 5. 08:58
* 개요
- Nest.js 에서는 명령어 기반으로 모듈을 추가 할 수 있다.
- 추가 해야 하는 모듈은 3가지가 있다. (module, controller, service)
- 레포지토리는 별도로 구성 하지 않고 서비스에 선언해서 사용한다. --> nest 버전이 높으면 deprecate 경고가 나오더라.
1. 모듈 생성 명령어
- auth 라는 이름의 모듈 생성 예시
// 모듈 생성 nest g module auth // 컨트롤러 추가 nest g controller auth --no-spec // 서비스 추가 nest g service auth --no-spec
2. DB 엔터티 생성
- user 1 : Many boards 관계
// 엔티티 생성 src/entity/user/user.entity.ts import { BaseEntity, Column, Entity, OneToMany, PrimaryGeneratedColumn, Unique, } from 'typeorm'; import { Board } from 'src/boards/entity/board.entity'; @Entity() @Unique(['email']) export class User extends BaseEntity { @PrimaryGeneratedColumn() id: number; @Column() username: string; @Column() password: string; @Column() email: string; @OneToMany(() => Board, (board) => board.user, { eager: true }) boards: Board[]; }
// src/boards/board.entity.ts import { BaseEntity, Column, Entity, ManyToOne, PrimaryGeneratedColumn, } from 'typeorm'; import { BoardStatus } from '../../boards/board-status-enum'; import { User } from 'src/auth/entity/user.entity'; @Entity() export class Board extends BaseEntity { @PrimaryGeneratedColumn() id: number; @Column() title: string; @Column() description: string; @Column() status: BoardStatus; @ManyToOne(() => User, (user) => user.boards, { eager: false }) user: User; }
3. 레포지토리
- 레포지토리 선언
// 리파지토리 설정 (in service) // src/auth/auth.service.ts import { Injectable } from '@nestjs/common'; import { User } from 'src/entity/user/user.entity'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; @Injectable() export class AuthService { constructor( @InjectRepository(User) private userRepository: Repository<User>, ) {} }
- 모듈에 레포 추가
// module 에 리파지토리 설정 // src/auth/auth.module.ts import { Module } from '@nestjs/common'; import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; import { TypeOrmModule } from '@nestjs/typeorm'; import { User } from 'src/entity/user/user.entity'; @Module({ imports: [TypeOrmModule.forFeature([User])], controllers: [AuthController], providers: [AuthService], }) export class AuthModule {}
4. dto 생성
// dto 생성 // src/auth/dto/auth-credential.dto.ts export class AuthCredentialDto { username: string; password: string; }
5. 컨트롤러 구현
// 컨트롤러 구현 // src/auth/auth.controller.ts import { Controller, Post, ValidationPipe, Body, UsePipes, } from '@nestjs/common'; import { AuthCredentialDto } from './dto/auth-credential.dto'; import { AuthService } from './auth.service'; import { User } from 'src/entity/user/user.entity'; @Controller('auth') export class AuthController { constructor(private authService: AuthService) {} @Post() @UsePipes(ValidationPipe) createUser(@Body() authCredentialDto: AuthCredentialDto): Promise<User> { return this.authService.createUser(authCredentialDto); } }
6. 서비스 구현
// 서비스 구현 // src/auth/auth.service.ts import { Injectable } from '@nestjs/common'; import { User } from 'src/entity/user/user.entity'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { AuthCredentialDto } from './dto/auth-credential.dto'; @Injectable() export class AuthService { constructor( @InjectRepository(User) private userRepository: Repository<User>, ) {} async createUser(authCredentialDto: AuthCredentialDto): Promise<User> { const { username, password } = authCredentialDto; const user = this.userRepository.create({ username, password }); await this.userRepository.save(user); return user; } }
'Nest.js' 카테고리의 다른 글
Nest.js 로그 (0) 2025.02.26 Nest.js 에서의 Pipe (0) 2025.02.12