티스토리 뷰

이제 실질적으로 데이터베이스를 이용하여 User와 Car에 대한 데이터를 관리하고 POST요청, UPDATE 요청등을 수행 해 보겠다.

데이터 베이스는 무엇을 사용하던 상관없다. 심지어 NoSQL도 typeORM의 지원을 받을 수 있다.

나는 postgresql 을 이용하겠다. 디비설치는 각각의 로컬환경에서 진행하면 된다.

typeORM 설치

yarn add typeorm @nestjs/typeorm @types/node reflect-metadata pg

필요한 패키지들을 먼저 설치해주자.

그 다음 main.tsimport 'reflect-metadata'; 를 추가해준다.

이제 typeORM 사용을 위한 설정을 해보자.

루트 폴더에 ormconfig.json 이라는 파일을 만들었다.

{
    "type": "postgres",
    "host": "localhost",
    "port": 5432,
    "username": "postgres",
    "password": "root",
    "database": "postgres"
}

이렇게 작성해 주었다. 자신의 DB환경에 맞게 설정을 바꿔주면 된다.

그 다음 app.module.ts 파일에 모듈 부분을 이렇게 수정해주자.

@Module({
  imports: [TypeOrmModule.forRoot()],
  controllers: [AppController, UserController],
  providers: [AppService],
})

이렇게 하면 기본적인 typeORM셋팅을 마쳤다.

yarn start:dev 명령을 실행했을 때 별도의 에러메세지가 나오지 않는다면 데이터베이스 커넥션에 문제가 없다고 생각해도 된다.

entity 작성

먼저 user폴더 아래에 user.entity.ts 라는 파일을 만들고 entity를 작성했다.

import {
  Column,
  CreateDateColumn,
  Entity,
  JoinColumn,
  OneToOne,
  PrimaryGeneratedColumn,
  UpdateDateColumn,
} from 'typeorm';
import { Car } from 'src/car/car.entity';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  gender: string;

  @Column()
  age: number;

  @OneToOne(() => Car)
  @JoinColumn()
  car: Car;

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;
}

entity를 작성하는 방식은 공식문서를 참고하면 된다.

다음은 car에 대한 entity를 작성했다.

import {
  Column,
  Entity,
  PrimaryGeneratedColumn,
  CreateDateColumn,
  UpdateDateColumn,
} from 'typeorm';

@Entity()
export class Car {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  model: string;

  @Column()
  price: number;

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;
}

car의 id는 유저의 Car와 외래키 관계이다.


이제 나머지 API를 작성해보자.

POST요청, UPDATE요청, DELETE 요청을 처리 할 것이다.

user.controller.ts 를 이렇게 수정했다.

import {
  Body,
  Controller,
  Delete,
  Get,
  Param,
  Patch,
  Post,
} from '@nestjs/common';
import { User } from './user.entity';

@Controller('user')
export class UserController {
  @Get()
  getAllUser() {
    return 'get All User';
  }

  @Get(':id')
  getUserById(@Param('id') id: string) {
    return `get User with the id ${id}`;
  }

  @Post()
  createUser(@Body() userData: User) {
    return `create User`;
  }

  @Delete(':id')
  deleteUserById(@Param('id') id: string) {
    return `delete user with the id ${id}`;
  }

  @Patch(':id')
  updateUserById(@Param('id') id: string, @Body() userData: User) {
    return `update user with the id ${id}`;
  }
}

아직 실질적으로 집적 데이터베이스를 이용해 처리하지는 않았다.

하지만 일단 이렇게 작성했을 때 메소드를 달리하여 요청을 보내면 그에 알맞은 결과가 돌아오는 것을 확인할 수 있다.

이제 요청이 정상적으로 들어오는 것을 확인 했으니 dto를 이용해 service 파일을 만들어 비즈니스 로직을 작성해 보겠다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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 29 30
글 보관함