티스토리 뷰

user를 create하는데 쓰기 위한 dto를 만들자.

dto란 data transfer object의 약자로 계층간 데이터 교환을 위한 객체를 말한다.

쉽게 말하면 어떠한 요청이 들어올때 데이터를 전송하는 객체의 규격이다.

데이터를 생성하고자 하는 요청이 올때 우리가 필요한 요구사항들을 정의해 놓는 것이다.

그리고 나는 이 요구사항을 검증하기 위해 class-validator 라는 것을 이용했다.

먼저 src/user/dto 아래에 create-user.dto.ts 라는 파일을 만들었다.

그 다음 yarn add class-validator class-transformer 를 설치했다.

그 다음 이렇게 작성했다.

import { IsNumber, IsOptional, IsString } from 'class-validator';
import { Car } from 'src/car/car.entity';

export class createUserDto {
  @IsString()
  readonly name: string;

  @IsString()
  readonly gender: string;

  @IsNumber()
  readonly age: number;

  @IsOptional()
  readonly car: Car;
}

이제 실제로 데이터를 생성하고, 조회하는 등의 기능을 수행할 service 를 만들어 보자.

nest generate service 명령을 수행하면 자동적으로 파일이 생성되고, 수정된다.

src/user 아래에 user.service.ts 가 생긴 것을 확인할 수 있다.

여기서 user controller의 비즈니스 로직을 담당할 코드를 작성할 것이다.

먼저 레포지토리를 만들것이다.

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

@Injectable()
export class UserService {
  constructor(
    @InjectRepository(User)
    private userRepository: Repository<User>,
  ) {}
}

이렇게 작성해주자.

다음은 전체 유저를 리턴하는 함수를 만들자.

getAllUsers() {
    return this.userRepository.find();
  }

이제 모듈설정을 해주자.

nest generate module 을 한후에 마찬가지로 user를 입력하자.

다음 몇가지를 수정해줘야 한다.

먼저 ormconfig.json 파일에 아래의 코드를 추가하자.

"entities": ["dist/**/*.entity{.ts,.js}"],
"synchronize": true

그 다음 app.module.tsuser.module.ts 를 수정할 것이다.

먼저 user.module.ts 를 아래와 같이 작성하자.

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserController } from './user.controller';
import { User } from './user.entity';
import { UserService } from './user.service';

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  controllers: [UserController],
  providers: [UserService],
})
export class UserModule {}

그 다음 app.module.ts 를 아래 처럼 수정하자.

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CarController } from './car/car.controller';
import { UserModule } from './user/user.module';

@Module({
  imports: [TypeOrmModule.forRoot(), UserModule],
  controllers: [AppController, CarController],
  providers: [AppService],
})
export class AppModule {}

이렇게 한 후에 서버를 구동했을 때 별다른 오류가 없다면 문제없이 연결이 된 것이다.

그럼 이제 [localhost:3000/user](http://localhost:3000/user) 로 접속하여 GET요청이 올바르게 이루어지는지 확인해 보기 위해

Controller를 살짝 수정해보자.

constructor(private readonly userService: UserService) {} 이 코드를 UserController 의 생성자로 추가하고, getAllUser() 함수의 리턴을 다음과 같이 수정하자.

@Get()
  getAllUser() {
    return this.userService.getAllUsers();
  }

이제 [localhost:3000/user](http://localhost:3000/user) 로 접속하면

http localhost:3000/user
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 2
Content-Type: application/json; charset=utf-8
Date: Thu, 29 Jul 2021 13:09:09 GMT
ETag: W/"2-l9Fw4VUO7kr8CvBlt4zaMCqXZ0w"
Keep-Alive: timeout=5
X-Powered-By: Express

[]

이런 결과를 볼 수 있다. 지금은 아무런 데이터가 저장되어 있지 않으므로 빈 배열이 올바른 결과이다.

다음엔 POST요청, DELETE요청 을 통해 데이터가 생성되고 삭제되는 것을 확인 해 보겠다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함