DevBoi

[NestJS] MariaDB , TypeOrm 세팅 본문

Develop/[NestJs]

[NestJS] MariaDB , TypeOrm 세팅

HiSmith 2023. 5. 29. 19:01
반응형

일단 가볍게 이미지를 받아준다.

docker pull mariadb

 

그리고, 포트랑 이름, 볼륨 마운트 정보를 넘겨서 커맨드를 입력한다.

사용자,포트,데이터베이스를 한번에 생성한다.

docker run -d --name mydb -p 3306:3306 --env=MYSQL_ROOT_PASSWORD=1234 --env=MYSQL_USER=admin --env=MYSQL_PASSWORD=admin --env=MYSQL_DATABASE=test mariadb

 

도커 프로세스를 확인한다.

 

 

이제 NestJS쪽에서 디비 연동 및 세팅을 진행해보자.

일단. TypeOrm을 사용하기 위해서, 관련 라이브러리를 설치해줘야 한다.

npm install --save @nestjs/typeorm typeorm mysql2 @nestjs/config

추가로 이 파일을 생성해준다.

app.module.ts를 아래와 같이 수정해준다.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { BoardsModule } from './boards/boards.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { Record } from './entities/record.entity';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      port: 3306,
      username: 'admin',
      password: 'admin',
      database: 'test',
      entities: [User, Record],
      synchronize: true,
    }),
    BoardsModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

src 하위에 entities폴더를 만들어서 아래와 같은 파일들을 만들어준다.

record-type.enum.ts

export enum RecordType {
    INCOME = 'INCOME',
    EXPENSE = 'EXPENSE',
    SOCIALINCOME = 'SOCIALINCOME',
    SOCIALEXPENSE = 'SOCIALEXPENSE'
  }

record.entity.ts

import {
    BaseEntity,
    Column,
    Entity,
    PrimaryGeneratedColumn,
  } from 'typeorm';
  import { RecordType } from './record-type.enum';
  
  @Entity()
  export class Record extends BaseEntity {
    @PrimaryGeneratedColumn()
    no: number;
  
    @Column()
    createdDate: Date;
  
    @Column()
    type: RecordType;
  
    @Column()
    amount: number;
  
    @Column()
    remark: string;
  
    @Column()
    uid: number;
  }

 

user.entity.ts

import {
    BaseEntity,
    Column,
    Entity,
    OneToMany,
    PrimaryGeneratedColumn,
  } from 'typeorm';
  import { Record } from './record.entity';
  
  @Entity()
  export class User extends BaseEntity {
    @PrimaryGeneratedColumn()
    uid: number;
  
    @Column({ unique: true })
    kakaoId: string;
  
    @Column({ unique: true })
    email: string;
  
    @Column()
    nickname: string;
  
    @Column()
    password: string;
  
    @OneToMany(() => Record, (record) => record.uid)
    records: Record[];                         // 한 유저당 여러개의 record 생성
  }

 

이렇게 되면 해당 엔티티의 내용대로 데이터베이스의 테이블이 잘 설정 된 것을 확인 할 수 있다.

 

다음에는 기존에 생성했던 기준으로 엔티티를 수정하고, 이를 기준으로 repository를 생성해보자

 

반응형

'Develop > [NestJs]' 카테고리의 다른 글

[NestJS] Guard로, 인증 로직 구현  (0) 2023.06.04
[NestJs] TypeOrm 변경 및 Repository  (0) 2023.05.30
[NestJS] 커스텀 파이프 개발  (0) 2023.05.27
[NestJs] 예외 처리  (0) 2023.05.27
[NestJs] Pipes란?  (0) 2023.05.27