cleanUrl: /본격-프로젝트-시작

사용자 생성과 저장

이번 장에서는 UserServicecreate 메서드를 작성하고, 이를 UsersController와 연결하는 과정을 살펴보자.

1. UserService에 리포지토리 연결하기

먼저, UserService에서 TypeORM의 Repository를 주입해야 한다. 이를 위해 @InjectRepository 데코레이터를 사용한다.

import { Injectable } from '@nestjs/common';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './users.entity';

@Injectable()
export class UsersService {
  constructor(@InjectRepository(User) private repo: Repository<User>) {}
}

@InjectRepository(User)를 사용하면 NestJS의 의존성 주입 시스템이 자동으로 User 엔터티와 연결된 Repository 인스턴스를 주입한다.

2. create, save 메서드 구현하기

이제 create 메서드를 작성한다. 사용자의 emailpassword를 받아 새로운 사용자 엔터티를 생성하고, save() 메서드로 이를 데이터베이스에 저장한다.

import { Injectable } from '@nestjs/common';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './users.entity';

@Injectable()
export class UsersService {
  constructor(@InjectRepository(User) private repo: Repository<User>) {}

  create(email: string, password: string) {
    const user = this.repo.create({ email, password });

    return this.repo.save(user);
  }
}

3. UsersController에서 create 메서드 호출하기

UsersController에서 UsersService를 주입하고, create 메서드를 호출하여 사용자 생성 API를 구현한다.

import { Body, Controller, Post } from '@nestjs/common';
import { CreateUserDto } from './dtos/create-user.dto';
import { UsersService } from './users.service';

@Controller('auth')
export class UsersController {
  constructor(private usersService: UsersService) {}

  @Post('/signup')
  createUser(@Body() body: CreateUserDto) {
    this.usersService.create(body.email, body.password);
  }
}

@Body() 데코레이터를 사용하여 클라이언트 요청의 본문에서 emailpassword를 받아 create 메서드에 전달한다.